From f3b8d099503d236fa778ca29df54b21275f8e76e Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Mon, 12 Oct 2026 08:40:17 +0200 Subject: [PATCH 1/5] chore: bumped deps and raised version to 3.54.0-build1 (cherry picked from commit ddb7cb9a8531e6b7700b9353d5f0b958cf7cc55a) --- demos/in-worker-demo/package.json | 2 +- demos/kvvfs-demo/package.json | 2 +- demos/main-thread-demo/package.json | 2 +- demos/opfs-demo/package.json | 2 +- demos/opfs-wl-demo/package.json | 2 +- demos/sahpool-demo/package.json | 2 +- demos/sahpool-rsbuild-demo/package.json | 2 +- demos/sahpool-webpack-demo/package.json | 2 +- package-lock.json | 1325 ++++++++++------------- package.json | 22 +- 10 files changed, 590 insertions(+), 773 deletions(-) diff --git a/demos/in-worker-demo/package.json b/demos/in-worker-demo/package.json index 6a72e30..ebd7ee5 100644 --- a/demos/in-worker-demo/package.json +++ b/demos/in-worker-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/kvvfs-demo/package.json b/demos/kvvfs-demo/package.json index fd77904..32b2907 100644 --- a/demos/kvvfs-demo/package.json +++ b/demos/kvvfs-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/main-thread-demo/package.json b/demos/main-thread-demo/package.json index cf2509b..e403cce 100644 --- a/demos/main-thread-demo/package.json +++ b/demos/main-thread-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/opfs-demo/package.json b/demos/opfs-demo/package.json index 681e338..991bc98 100644 --- a/demos/opfs-demo/package.json +++ b/demos/opfs-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/opfs-wl-demo/package.json b/demos/opfs-wl-demo/package.json index 8592c2e..4bc6a5b 100644 --- a/demos/opfs-wl-demo/package.json +++ b/demos/opfs-wl-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/sahpool-demo/package.json b/demos/sahpool-demo/package.json index 2268a58..8c1b47e 100644 --- a/demos/sahpool-demo/package.json +++ b/demos/sahpool-demo/package.json @@ -10,6 +10,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } } diff --git a/demos/sahpool-rsbuild-demo/package.json b/demos/sahpool-rsbuild-demo/package.json index 72df949..6496b39 100644 --- a/demos/sahpool-rsbuild-demo/package.json +++ b/demos/sahpool-rsbuild-demo/package.json @@ -9,6 +9,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "@rsbuild/core": "^2.2.3" + "@rsbuild/core": "^2.2.12" } } diff --git a/demos/sahpool-webpack-demo/package.json b/demos/sahpool-webpack-demo/package.json index e858acd..d33f71d 100644 --- a/demos/sahpool-webpack-demo/package.json +++ b/demos/sahpool-webpack-demo/package.json @@ -9,7 +9,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "webpack": "^5.110.3", + "webpack": "^5.111.1", "webpack-cli": "^7.2.3", "webpack-dev-server": "^6.0.0" } diff --git a/package-lock.json b/package-lock.json index 791463c..6b364ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,28 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.53.4-build2", + "version": "3.54.0-build1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlite.org/sqlite-wasm", - "version": "3.53.4-build2", + "version": "3.54.0-build1", "license": "Apache-2.0", "workspaces": [ "demos/*" ], "devDependencies": { - "@types/node": "^26.5.0", - "@vitest/browser": "^5.0.0", - "@vitest/browser-playwright": "^5.0.0", - "happy-dom": "20.14.0", - "lefthook": "2.1.12", - "oxfmt": "^0.67.0", - "playwright": "^1.63.0", - "publint": "^0.3.24", - "tsdown": "^0.23.0", + "@types/node": "^26.6.5", + "@vitest/browser": "^5.0.3", + "@vitest/browser-playwright": "^5.0.3", + "happy-dom": "21.0.1", + "lefthook": "2.2.1", + "oxfmt": "^0.72.0", + "playwright": "^1.64.0", + "publint": "^0.3.25", + "tsdown": "^0.23.1", "typescript": "7.0.2", - "vitest": "^5.0.0" + "vitest": "^5.0.3" }, "engines": { "node": ">=22" @@ -34,7 +34,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/kvvfs-demo": { @@ -43,7 +43,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/main-thread-demo": { @@ -52,7 +52,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/opfs-demo": { @@ -61,7 +61,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/opfs-wl-demo": { @@ -70,7 +70,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/sahpool-demo": { @@ -79,7 +79,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "vite": "^8.2.2" + "vite": "^8.3.4" } }, "demos/sahpool-parcel-demo": { @@ -97,7 +97,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "@rsbuild/core": "^2.2.3" + "@rsbuild/core": "^2.2.12" } }, "demos/sahpool-webpack-demo": { @@ -106,7 +106,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "webpack": "^5.110.3", + "webpack": "^5.111.1", "webpack-cli": "^7.2.3", "webpack-dev-server": "^6.0.0" } @@ -195,9 +195,9 @@ } }, "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==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", + "integrity": "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw==", "dev": true, "license": "MIT" }, @@ -883,9 +883,9 @@ } }, "node_modules/@oxc-project/types": { - "version": "0.148.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.148.0.tgz", - "integrity": "sha512-Nm4s/jB+4FpFsPhWGEC4h7rzksesmtnMXomo6rCMcg/b8zLQuOziRgkCS1fxDCXOlJB/6Q8oABOZ/OP6RIPj9A==", + "version": "0.153.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.153.0.tgz", + "integrity": "sha512-jSNrRIyvPVLL5E1z/tS5zLAprosGz/FuI1PWwEOz59j3E4TTTzSpqKb/RDGqJhhW0QHYISGXxq582wGx6T11Tw==", "dev": true, "license": "MIT", "funding": { @@ -893,9 +893,9 @@ } }, "node_modules/@oxfmt/binding-android-arm-eabi": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.67.0.tgz", - "integrity": "sha512-2olh3ioEmc4gRzQm7jxyB1b/PFBoFvTq8KdgYySeNpysDtA6DEg2Mvya4/I6flhL7G0eOrE8RD7JCNCIMhE16Q==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.72.0.tgz", + "integrity": "sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw==", "cpu": [ "arm" ], @@ -910,9 +910,9 @@ } }, "node_modules/@oxfmt/binding-android-arm64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.67.0.tgz", - "integrity": "sha512-ulfw8EHN1MBq/MFFDXw2/M1VAFu5mRUcnuZ8Hqbv9viAnFzO9t1jKSAsDqKYYDGMlytF/uj6Z5z5n/tHupnKhw==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.72.0.tgz", + "integrity": "sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA==", "cpu": [ "arm64" ], @@ -927,9 +927,9 @@ } }, "node_modules/@oxfmt/binding-darwin-arm64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.67.0.tgz", - "integrity": "sha512-MfONZx/O2o9M5v2jDFol556G9+A+P9xCuJ4DZ+qhE+RnaCdoscy6Eu5nq1dbuNxhwdJyZ6kLI7fnG9mwEeOeGg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.72.0.tgz", + "integrity": "sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA==", "cpu": [ "arm64" ], @@ -944,9 +944,9 @@ } }, "node_modules/@oxfmt/binding-darwin-x64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.67.0.tgz", - "integrity": "sha512-CYnIx5LvFVJnyJcCqwH2jxMKjFjqo5678MPjdmNFoSGMhlOvZ/xRZqvhDcolKrXc8fezW3AKh+C4wyoFuWOSSg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.72.0.tgz", + "integrity": "sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw==", "cpu": [ "x64" ], @@ -961,9 +961,9 @@ } }, "node_modules/@oxfmt/binding-freebsd-x64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.67.0.tgz", - "integrity": "sha512-7/iF1orvIS9mxhKUqnmtMgm+OrSQ5acPwuvdQrm6ECgqbwPmC+Pw9cdke3sNfVN6pT2hbJ58+jP8BCThl5HXOg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.72.0.tgz", + "integrity": "sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ==", "cpu": [ "x64" ], @@ -978,9 +978,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.67.0.tgz", - "integrity": "sha512-yy+OGys07IZOpOmYPZoObKyUQLkfxeQqeCypk+1jaZd8HGo77hzvU1Jg8X3+W75o+9lszOjBfg0nkGtlwYywXw==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.72.0.tgz", + "integrity": "sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA==", "cpu": [ "arm" ], @@ -995,9 +995,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-musleabihf": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.67.0.tgz", - "integrity": "sha512-wPIeeigXgJpwNw3wydYRt3U9iN9Y/ejpOZuYL9IA7igxWs7LIQMOkhKxTumRvy6dIv0iXKk3RTw3Vmjg0i+2sg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.72.0.tgz", + "integrity": "sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg==", "cpu": [ "arm" ], @@ -1012,9 +1012,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.67.0.tgz", - "integrity": "sha512-0+XNxcdbkTfxdcD4qW6Ci9n+mBNJ8xTBumnxKvKBmRFOdx0Wf8/KiHjCJayooXmYkqRpRVd98Q5egvzx5BLSgQ==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.72.0.tgz", + "integrity": "sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g==", "cpu": [ "arm64" ], @@ -1032,9 +1032,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-musl": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.67.0.tgz", - "integrity": "sha512-I75LKPJyNOYUzkqAiAMIE31+Ye7xtQXZdoty1IXn4B+bw5Zpmez5wfG19ejGpNnS/BzQ7LFS+7jxuTPb+vHiZw==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.72.0.tgz", + "integrity": "sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ==", "cpu": [ "arm64" ], @@ -1052,9 +1052,9 @@ } }, "node_modules/@oxfmt/binding-linux-ppc64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.67.0.tgz", - "integrity": "sha512-c2M5iRpe1QMZSRE/UvZoPdXBWb5Ic/ycvOyNiKCqPwQ/OyOKIMiJs02ynlNnjb7ZZJnRXYLmGcohoINOcwDK3w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.72.0.tgz", + "integrity": "sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg==", "cpu": [ "ppc64" ], @@ -1072,9 +1072,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.67.0.tgz", - "integrity": "sha512-dQzzYlV24Udhfm5ECuSdgqRvFJU/CGHzcYYEO3dLM6W6+CHiBFrq9OjIllkdCcPhsoSQ8o223Dja84MOSzed9A==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.72.0.tgz", + "integrity": "sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw==", "cpu": [ "riscv64" ], @@ -1092,9 +1092,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-musl": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.67.0.tgz", - "integrity": "sha512-rFNq1CgX4qMJANOq42LkAs90JE80GpiaEohAV2qn/gT2hGjQTW1zBO5zQBxArI4926pM1OSzo3CN0tBszGBIaA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.72.0.tgz", + "integrity": "sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ==", "cpu": [ "riscv64" ], @@ -1112,9 +1112,9 @@ } }, "node_modules/@oxfmt/binding-linux-s390x-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.67.0.tgz", - "integrity": "sha512-Sky6rEdz2o5IGq01lPhS12yEvDdChVEcaYrcLHkveh4Fx0qPjljE/Iul6SX/bRMl6lNc8J7J/mDQdzgBdA++Pg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.72.0.tgz", + "integrity": "sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ==", "cpu": [ "s390x" ], @@ -1132,9 +1132,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-gnu": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.67.0.tgz", - "integrity": "sha512-vPXmlNORV8AZq2Ocxh07pxwMjfENUWCV/eZArnao0qC3NO/hDeTVkQvee7SJJUbIiF5PZbBa4kYmaXnu7Rk58w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.72.0.tgz", + "integrity": "sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ==", "cpu": [ "x64" ], @@ -1152,9 +1152,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-musl": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.67.0.tgz", - "integrity": "sha512-x/WAtFqYtVr3vZ9ni8nr4kn9whSitg8fOljq/pZzBpxopRdY1BMLZCZkrbIbaBcYkm46qGbqVea2FCWmtQ2P9w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.72.0.tgz", + "integrity": "sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ==", "cpu": [ "x64" ], @@ -1172,9 +1172,9 @@ } }, "node_modules/@oxfmt/binding-openharmony-arm64": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.67.0.tgz", - "integrity": "sha512-eRw9Neh4/aA6i+q/R3WU1gGQINhVM0J4fXIm6t27caOamkr/37uAkp1IdBx4zlJH97hmXR63z/q9n5c5dN7MzA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.72.0.tgz", + "integrity": "sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ } }, "node_modules/@oxfmt/binding-win32-arm64-msvc": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.67.0.tgz", - "integrity": "sha512-YIMvb+sGNYN2uc6+QK2HLPeEKM2vl7QZ5onQzpAJRb6pnf0DwUFP5R8tdS9R0l8hdUil2gu4Uxd0Yxrop0iT4w==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.72.0.tgz", + "integrity": "sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw==", "cpu": [ "arm64" ], @@ -1206,9 +1206,9 @@ } }, "node_modules/@oxfmt/binding-win32-ia32-msvc": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.67.0.tgz", - "integrity": "sha512-LzmU9MyACPzwNDIK0ItMedHPz735Ug7ELWguxo4/kuy6zWuDoeglOAEFCY8jLg0PzRpFO3hDyLFe2Gu2eFDeGA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.72.0.tgz", + "integrity": "sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A==", "cpu": [ "ia32" ], @@ -1223,9 +1223,9 @@ } }, "node_modules/@oxfmt/binding-win32-x64-msvc": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.67.0.tgz", - "integrity": "sha512-sbQOIDNLUEeVZcAJcSL5VURn7kfjvilPviody4Yl5n8lQCDtUm+C9oHTTwZS/m4d/Z6Vv3jNEiAofH932NPPCg==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.72.0.tgz", + "integrity": "sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw==", "cpu": [ "x64" ], @@ -3121,9 +3121,9 @@ } }, "node_modules/@rolldown/binding-android-arm-eabi": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.7.tgz", - "integrity": "sha512-EypzgnYCwyVY4NDHKzGmNJT5b+XaQEBniHxsMdeIQLB/tcCzZnhqrzHpZFbX9iaxx+5RiB8caATBtfvZP7zVxQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.13.tgz", + "integrity": "sha512-Vu/NICrgdRvUOeaJZIyB2FP63s6fO/4ud5l8dXmxDx9yDyn+mN0y+gsvsVviSli+T361Aqo0h46EuMoobrwawA==", "cpu": [ "arm" ], @@ -3138,9 +3138,9 @@ } }, "node_modules/@rolldown/binding-android-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.7.tgz", - "integrity": "sha512-l17HE9EweWaqJZhuUuNBN/FzM62xw+DECVnJyvMsxn8vJFAGLy5QfLDoYAcronkAN8VxKZHezDpulHDPx95vFw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.13.tgz", + "integrity": "sha512-6LEoIrGy5vvCd2boNnv2soPSUZj/PRvhp8R/t9KlX+mIZxThIE/ZqxrGXxmuNX0FuvQFvLdZr7S4HrYpYBVhEQ==", "cpu": [ "arm64" ], @@ -3155,9 +3155,9 @@ } }, "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.7.tgz", - "integrity": "sha512-8ED8ELFvHXc6OCETIn4gXObPiaR6bckM/ipXtbzlPVDRMBfEGjCKgO90F9YtfdpDatVx/ZQw7aZ1vUMf/+T3Mw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.13.tgz", + "integrity": "sha512-CaJSRzlQ6Q+zkDMVA9OkVxBjVoPRCDEE3v0FSJ9kIQBgRjFApA3Si4ijhbNVUji7ZJt+PfO0e46qy4nPInHUPA==", "cpu": [ "arm64" ], @@ -3172,9 +3172,9 @@ } }, "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.7.tgz", - "integrity": "sha512-/WPripjtiAIZ2tWY7ddijORT0Ujg87wxWW/qcoFVCKAWVDPhtY0xr7Dj0M3GyNGz60jGwTElhro/mkF9dT7dDQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.13.tgz", + "integrity": "sha512-e4r340I5hxSzJkD3YJBxgzq/rJ3wwxwdLLb2FPt1Zpyem20nrQPT11DDEEkazwxaHumH8wpglsp/Ozgj/wT6mw==", "cpu": [ "x64" ], @@ -3189,9 +3189,9 @@ } }, "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.7.tgz", - "integrity": "sha512-14DI4NcqpvbICxSnGLx3PmtDaWqRP/KGSGb6C+JLLVPeZRl6dKdHba3pGsqT3vpdTqhEYIPG0MMQ8c0xYqoJxA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.13.tgz", + "integrity": "sha512-hoBWDZ4/K/mJKVMbsgUd1jfpA2DiOrJ54mpegObU9TBHBBrtX4FLIXJJQRDPZ/2Dn91GvPob+Z2hwKJzf4E5SQ==", "cpu": [ "x64" ], @@ -3206,9 +3206,9 @@ } }, "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.7.tgz", - "integrity": "sha512-bxrWIRvHWQvbJwi+VIie/kDJmQxcNE6xxWwZdqF/ExVAigtHkv54WTLQPb+QsZdnFy18fg7JPfWGL0RH6vwIlQ==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.13.tgz", + "integrity": "sha512-oF9fZu3vTWnTiVAkDFxU9PJLt1nh20K9RRpuHsR7ZnE2L7XookBbDBVLojCVSLGbvtSlxeUNnjAj6DbNsKyzbg==", "cpu": [ "arm" ], @@ -3223,9 +3223,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.7.tgz", - "integrity": "sha512-toOY2BChBZyuxU7OYX6Tn389di4IzAqPTycVcci0O7FSfBqzRB3RZn+K5Is6ANf4tmgRd/K1yZTsNTXbkXsnLg==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.13.tgz", + "integrity": "sha512-DTpb/+jMiqWMPgphn4ksW1zW+XLJ6dJJ9FMvnIk9I291LhCctMPhMYJrP5t9p6C9qa3KXadDdUEZHBaPh3kNxQ==", "cpu": [ "arm64" ], @@ -3243,9 +3243,9 @@ } }, "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.7.tgz", - "integrity": "sha512-lAIXTH/aiLRLxsTgQvfhjo4K1ydWIp00+V0voOr9beb/9ZmkUFrSIb03dXNFRgMNvkE6oGsF10ioQ6UsI+vS5Q==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.13.tgz", + "integrity": "sha512-xU+Kvv9N2A3SY35zFh1FWWNjxbadE/BKeqnkXe7vScU4GZsw757BlVmDLITZEq8DPpk6m7uoDYkK7P+x/uU5Ow==", "cpu": [ "arm64" ], @@ -3263,9 +3263,9 @@ } }, "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.7.tgz", - "integrity": "sha512-kdnwS28Pkenp/mZMRwjXXXwxQ7pIsm+bF919LUK93BOyhcLsrVKdP2p9fxpiPNPAbNuch8ypQt0pm2P2LYCAGg==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.13.tgz", + "integrity": "sha512-XMk/hnhh25oQ756Lclb1Q11h4ll0xC0Esa5w4Vzp+mAE2S3AGJgeM0SonrIgY8fHhjarb6hcoTuwoFG0VVP2ig==", "cpu": [ "ppc64" ], @@ -3283,9 +3283,9 @@ } }, "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.7.tgz", - "integrity": "sha512-516OdsyLdr5E65paF3yBF55t8mfm9+gmtCsK3xI7XKXIT7EfRlHhxL8K/NR6Hu8BWSgF5+1w74lTL0+nxcc8Qw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.13.tgz", + "integrity": "sha512-U1BoTHYmlywE2n3HUWjzZ+8EQsKr+OwpxYuDWaubx42tUL8QSL7nOqRz/NVHanibbFP3M1Rxuprz/wNcbMKjqw==", "cpu": [ "s390x" ], @@ -3303,9 +3303,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.7.tgz", - "integrity": "sha512-r8/z8n7GFaYRln3xmP1Cxy0HH/HLM0uBUPkEuSVEfKGDA89M0FsZRZJRSwe/tJjRx+fpH/gjorfhB8tmEbSFLA==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.13.tgz", + "integrity": "sha512-J4cm80Pc6wEwV5AZ42o62sIQgDk+Y7R2s646jIwuvO+4V46QB58N4vVuMPWCBaNgursXLpmUWJV//WQAkPvHBQ==", "cpu": [ "x64" ], @@ -3323,9 +3323,9 @@ } }, "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.7.tgz", - "integrity": "sha512-pAsE8iiDxUg1xBqdhrTfg45AVDVpirjz00sblEYClGNNcMnDb+e8beQgqIAw6LvauX/APvgxUnwrgun/YYGBhw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.13.tgz", + "integrity": "sha512-W0euZS40U4V6JkmEnVCIX9mcsL6cbXQ4X8c2w+MMOIjFg68TXUW+u3RT+2e1t1pv9mg/EP3pDtK3POXdQ7Rxyw==", "cpu": [ "x64" ], @@ -3343,9 +3343,9 @@ } }, "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.7.tgz", - "integrity": "sha512-lTcIYmmnQQA8Or/2DatS6oSqcdLHvendjS+zLu+FwgToynWMRSmQdpM65fTANJgIS4mjbMOo5KT2lnT9SAb96w==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.13.tgz", + "integrity": "sha512-do/AF/4n9MRshia3a5aXoy8xM2c6mgfT6D7H/dY6my5z+hfCIR4ab7mk4IRj++nsEQpKy39kd0DQnDq+r692tw==", "cpu": [ "arm64" ], @@ -3360,9 +3360,9 @@ } }, "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.7.tgz", - "integrity": "sha512-e3Gu3WxbNk/UqQhxqU7YIYO+9ZBvWNz3U+h/qRFosscMFzdRPbXYSaSWgSnklv2fz1TgzBTcti2z35c/7irsHw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.13.tgz", + "integrity": "sha512-6FtUf2cJZobutJdxnGYX8z0vtbgqU0b2v8vfBhkXb9wp2MppMFtkunE+IaOntyi01rkIQoPW2GHABtfzsC0BRQ==", "cpu": [ "arm64" ], @@ -3377,9 +3377,9 @@ } }, "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.7.tgz", - "integrity": "sha512-W/jg5qoRSqjsEv0+dZi4e687mcHqmVuU0P4fK6qS/xjetW2Gmc1W8j//z5nAeNcC8Ttm0hV46IjcYeuVwYhuiw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.13.tgz", + "integrity": "sha512-UKhFaZTeTcbKrb3iU82m17jVcPEAoqDkCN5MBqgPyZSwp/cQmib21crTS0DdH7T1B7wZRWEI89YQAOJMet5yhg==", "cpu": [ "x64" ], @@ -3401,13 +3401,13 @@ "license": "MIT" }, "node_modules/@rsbuild/core": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-2.2.3.tgz", - "integrity": "sha512-oJrYtYDhb7AMwY8HIda2hgMuuxHkYPYar4svdS5uTq0fXY0M1wLfllkTQz0d729pNJ4S//6GUM1WX5LsW2mFLw==", + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-2.2.12.tgz", + "integrity": "sha512-SnJ81Jf9ZGms8hUq0FGxrqlUxdHKV76VK9gxrEdtWLbTic+qRt0SIAsk5NdIr1tXFzqzQ6Fqeffs+K1EUuZEHw==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/core": "~2.2.2", + "@rspack/core": "~2.2.8", "@swc/helpers": "^0.5.23" }, "bin": { @@ -3426,32 +3426,32 @@ } }, "node_modules/@rspack/binding": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.2.tgz", - "integrity": "sha512-gWjKDQfVQJSBh/I+y9WTlyERsiShSJ7eI6Yl0SJs/6gjx8t4ixuwWCsaEFFjwSL4nSn6ML5hNQ7UFY3gj72BWA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.8.tgz", + "integrity": "sha512-c9flkSua3khHnOKBCRk8BkHGOwU9YB7niv+5JfQXiLZIvJmgKsZ7PD8QrFklMhsJT3oVAc6c9GN7/wy1YkACjA==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "2.2.2", - "@rspack/binding-darwin-x64": "2.2.2", - "@rspack/binding-linux-arm64-gnu": "2.2.2", - "@rspack/binding-linux-arm64-musl": "2.2.2", - "@rspack/binding-linux-ppc64-gnu": "2.2.2", - "@rspack/binding-linux-riscv64-gnu": "2.2.2", - "@rspack/binding-linux-riscv64-musl": "2.2.2", - "@rspack/binding-linux-s390x-gnu": "2.2.2", - "@rspack/binding-linux-x64-gnu": "2.2.2", - "@rspack/binding-linux-x64-musl": "2.2.2", - "@rspack/binding-wasm32-wasi": "2.2.2", - "@rspack/binding-win32-arm64-msvc": "2.2.2", - "@rspack/binding-win32-ia32-msvc": "2.2.2", - "@rspack/binding-win32-x64-msvc": "2.2.2" + "@rspack/binding-darwin-arm64": "2.2.8", + "@rspack/binding-darwin-x64": "2.2.8", + "@rspack/binding-linux-arm64-gnu": "2.2.8", + "@rspack/binding-linux-arm64-musl": "2.2.8", + "@rspack/binding-linux-ppc64-gnu": "2.2.8", + "@rspack/binding-linux-riscv64-gnu": "2.2.8", + "@rspack/binding-linux-riscv64-musl": "2.2.8", + "@rspack/binding-linux-s390x-gnu": "2.2.8", + "@rspack/binding-linux-x64-gnu": "2.2.8", + "@rspack/binding-linux-x64-musl": "2.2.8", + "@rspack/binding-wasm32-wasi": "2.2.8", + "@rspack/binding-win32-arm64-msvc": "2.2.8", + "@rspack/binding-win32-ia32-msvc": "2.2.8", + "@rspack/binding-win32-x64-msvc": "2.2.8" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.2.tgz", - "integrity": "sha512-/le/AvV4HSinXTPs2Lqpujxt189Z5T10Ggt96QzckLRPvIchzqoavVDDjltzC7XcaZ87XCH/X06jNKgzkcBBNA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.8.tgz", + "integrity": "sha512-d6GuY/k7kJk7SOXmruIz0m+2fIXaLv2SnBHEYsbvBzE7ZO6QXq7fSABWFWNnSnNu+brYHA5Dr/skV81bXgTTCw==", "cpu": [ "arm64" ], @@ -3463,9 +3463,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.2.tgz", - "integrity": "sha512-uFIcUPUXiPxM6ljenLafp5TemT8eLZm1riRn8fJYmpqNCK+aCcTaud18XHZpI5SjzzcY+xUHfVShgvNzKXuf2g==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.8.tgz", + "integrity": "sha512-xCVou/jJASjEAjwy1T3hPJcJqA5QZASJfUwHqEk+nA0v44MagwH8tM8lsOvRfhzR7N2+YFac1rfZOUT8uM3awg==", "cpu": [ "x64" ], @@ -3477,9 +3477,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.2.tgz", - "integrity": "sha512-Pjby4pDSMNJQK2VBzpgCj6lb+DGuenS1fEDb6xi5/apbJb9v5WE+e43Mz7i+XqgXS8e846pjaONV3KM5WKB1LQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.8.tgz", + "integrity": "sha512-Zy/ss6YAQTjOWKDkcWrbKtu+pySltqT22wn68nlrWKygPWLNmMdU5anlsnwRTIuQ3MF0YJRS42ARauVtlqvRQw==", "cpu": [ "arm64" ], @@ -3494,9 +3494,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.2.tgz", - "integrity": "sha512-0u9O7tTVT2z+F6o/eEY6f6+My8Jn9U56QiBwkfy90ZaoAfZyQSSTxqaK/zA7W43oFxQefeCpiPas27VUzrSakw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.8.tgz", + "integrity": "sha512-lxgp5O8PhL3St9p82llHoNoeWzp9jltW5S9F00p00XPJZHUIuxbwfLSzn/6Wg86USEmafLoBkyD9CM8rBd3SNQ==", "cpu": [ "arm64" ], @@ -3511,9 +3511,9 @@ ] }, "node_modules/@rspack/binding-linux-ppc64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.2.tgz", - "integrity": "sha512-N3lVnhq5qOvpmP5n386JzR1GcE8HzAqq4/r440Z6yle9m7PhVFJ6oXVWxgaDTYV0mtv9YLJmaG+YrjYfUa1vuA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.8.tgz", + "integrity": "sha512-MY+YqpT02tcDCMgHy+IewQsaz7ql4mbJaAqqMlTIqvQwAUl9dXEP7BL352OgCxm9VRebTldE5lK99A3wVd3zqA==", "cpu": [ "ppc64" ], @@ -3528,9 +3528,9 @@ ] }, "node_modules/@rspack/binding-linux-riscv64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.2.tgz", - "integrity": "sha512-ReClZyp32/rJkUDV/oGDU0X6BCFyEkTR6r4stFwm/qOOaG6mUMRzZe4gur8Yh979p4Hiz9EdkmfEHY02GBXcaQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.8.tgz", + "integrity": "sha512-wmN9OigSGNGCKY+AOYaWI8LJcIi8qvs5KjueBueCKOnTV6MPIEujA75QZH1pehTTYKvdGv7r2EtUXUmWpn7/SQ==", "cpu": [ "riscv64" ], @@ -3545,9 +3545,9 @@ ] }, "node_modules/@rspack/binding-linux-riscv64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.2.tgz", - "integrity": "sha512-mqsorvTNerr3r8zI35NFTPYATPDlhepdiUhZjKT6ylqpHlP7vLU9fp4aEMK/CuTv2f+IVsa0+iZqtMxHs2tSjw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.8.tgz", + "integrity": "sha512-ZcQMYR10hLh581zs9MFnFFn0F7wyt5fkDffyukeMHJEoPJrbkfl6cQtsUdpQnZ+mYGYS5KydD1DT9/eMH65jjw==", "cpu": [ "riscv64" ], @@ -3562,9 +3562,9 @@ ] }, "node_modules/@rspack/binding-linux-s390x-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.2.tgz", - "integrity": "sha512-ql2Jub8QYWSugBppmj2u0SjcIj6fOQuAaLCYQOqU7zbvz/uuWTfoqmdWKExwrxeCU9Tzt7emVM0ETuVEpoca+A==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.8.tgz", + "integrity": "sha512-ahBiE+Ir1FMYvStYicihhSJlS2YRagxtry0jWH8zW287o7C0eiHJ+pteJHHC15T5RJqm0j6w5TuwYe+F9AYxxg==", "cpu": [ "s390x" ], @@ -3579,9 +3579,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.2.tgz", - "integrity": "sha512-MNYKYEHrtIVEno2q5rgpou/JVffRwn109xPK3kxct95EojHsniNa8jwy6eEHeOazP4EN60Si7NElE3aQ6JssHw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.8.tgz", + "integrity": "sha512-dncEI515NoPXh3zzWk06Rb3mhSV76myiFKqXiJ8K4fVAe5x/RlweMhvPhHhm7RnIMeBld7BeStzOqj38XFsWGA==", "cpu": [ "x64" ], @@ -3596,9 +3596,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.2.tgz", - "integrity": "sha512-y9/9CmE8lrECaF17GAhacibTL+SvlEPEotQnUuBFC/WFtXh8hU2E7a7bAkpYGSLH6kM0nrJZHO3hTvM1wdWOJw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.8.tgz", + "integrity": "sha512-pfFyU03PjD0GaQG8zOQOHwq51rrJZetXjTGpMmz7iA1hq/f9lChJsDWrC8/7VXeQLwBofLZlOODqe8OM8OBzgA==", "cpu": [ "x64" ], @@ -3613,9 +3613,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.2.tgz", - "integrity": "sha512-VbDIjjeFwZvMSKAOGY5IbU6lLzt6AHHHncTdMMkZ94Xk7O2BOHe9BXDV32Ln29TIW2C8m1fdxfPZWDiecVghUQ==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.8.tgz", + "integrity": "sha512-3mOJuZTrF56jOh/GD9chLMJKbzPZ6Ty2OIML7+lLz0Yk2XS/xWRfLn85Dmnkb/O6UF65x7+p8VPAIZlBtLTclw==", "cpu": [ "wasm32" ], @@ -3629,9 +3629,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.2.tgz", - "integrity": "sha512-rfcNg0W3ZPZvXma1gTyEt9/Z8FxASIaQr+sMWTSaTPPaeU3xY1+0hYcrD0kUFNs3/5L4u63myI4R8qRXiuW3pA==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.8.tgz", + "integrity": "sha512-Cu/RMZT/16s+67xhl6X1pswetL3GLSQl+LnugKRh08Ul21A/tR7vxC4g4aih4u9k5SXCAngxFUt8zAjKnHIBqA==", "cpu": [ "arm64" ], @@ -3643,9 +3643,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.2.tgz", - "integrity": "sha512-TFPvr9RZw9oHIhooDhXHzWjKcHpGPTxkznSeM2poIWU0CdEuua2rVUfsrriTF1Dmx+9kMly61DQmyOHCbb+b2g==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.8.tgz", + "integrity": "sha512-H/erd6di8OapZhhM0raA/7XduPn9jusfLMeO1XF+AmF9WF3HzHgMjha1j+KwtPgQnaH69w6AhY+G2472VIwQmw==", "cpu": [ "ia32" ], @@ -3657,9 +3657,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.2.tgz", - "integrity": "sha512-GvEGyL594dtWN9SoVnKWh0exrM8WLInaUjwcuA2JKbCi1ak/9iHxip/U1dY3DuVqBYBhmvYq96JPbl91xnzFjg==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.8.tgz", + "integrity": "sha512-BziHSUlIQM0MliCqdcHuBXSkQGtPoHQTXJce7fsgnTAzQFgPeog92qTNezYI4IrQ7pQouyiVJ2HPieUbVPRKQQ==", "cpu": [ "x64" ], @@ -3671,13 +3671,13 @@ ] }, "node_modules/@rspack/core": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.2.tgz", - "integrity": "sha512-/yztfDZR5syIPBrUpzBpL+6fhhl0IHBPcXlNr4tOMBULbocFIz7Z4/cqvf1ix0DBbKpIGx99v6N1IDbk2gi8hw==", + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.8.tgz", + "integrity": "sha512-JugsVrnbMGNYzMH++7gR9enygpP/lAo9PbVRq3XmJg0ryIvCpST0XJjBcccaSjYaaPamsjrddihmgVLMFp+yXw==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/binding": "2.2.2" + "@rspack/binding": "2.2.8" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -4008,9 +4008,9 @@ } }, "node_modules/@tybys/wasm-util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", - "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.4.tgz", + "integrity": "sha512-W3c4gRigFS0T/Ma4qIYF3GDAc5AQdHb1yL5znJT1Zv1YaD9Kitx656wBjvr19qbiosmZT8lWDM5BEMynUqX65A==", "dev": true, "license": "MIT", "optional": true, @@ -4132,9 +4132,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "26.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-26.5.0.tgz", - "integrity": "sha512-dVSGpriSoCgz8WnDNTuSSuSv1PC/ALXihO4ulRZt7Md8k9mlbdin3lGOcDE8SnWOgf513ByWlXd7BK4azmyg/A==", + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", "dev": true, "license": "MIT", "dependencies": { @@ -4545,16 +4545,16 @@ } }, "node_modules/@vitest/browser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.0.tgz", - "integrity": "sha512-JC9FG5xIRxPHXJPcdCaluIJcEoeM0IwGQ3xneuJk09LXKHRNs40BqWDWymQikbb20yOpYvzpKzmYgPRuSzKmvg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.3.tgz", + "integrity": "sha512-7KHIkVA/gTRxQV9qPa9qLK+g5INZG6iRrlwXSFG5EKsOomW3UzzW7wsdt1Yp5PufzQ43lniuONlb4lUVCC2qSg==", "dev": true, "license": "MIT", "dependencies": { "@blazediff/core": "1.10.0", - "@vitest/mocker": "5.0.0", - "@vitest/ui": "5.0.0", - "@vitest/utils": "5.0.0", + "@vitest/mocker": "5.0.3", + "@vitest/ui": "5.0.3", + "@vitest/utils": "5.0.3", "magic-string": "^1.2.3", "pngjs": "^7.0.0", "sirv": "^3.0.2", @@ -4565,18 +4565,18 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.0" + "vitest": "5.0.3" } }, "node_modules/@vitest/browser-playwright": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.0.tgz", - "integrity": "sha512-N+gED9y4/8pypaHjz/x0ah3CjoBr+N0hWWT+Gq4VXtMzyB+rUIdHni0ulzpD1j4H77iWy5Jg8PRMlVn6kjxo6g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.3.tgz", + "integrity": "sha512-rYBHwIFL/ZtI6dl0rbrAatScXCrvX+TL2BX2AGOigkC1Y6u3rIWw8KMQJJMS4drSa1ksMCmZU2wpgwdE7kqu3g==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/browser": "5.0.0", - "@vitest/mocker": "5.0.0", + "@vitest/browser": "5.0.3", + "@vitest/mocker": "5.0.3", "tinyrainbow": "^3.1.1" }, "funding": { @@ -4584,7 +4584,7 @@ }, "peerDependencies": { "playwright": "*", - "vitest": "5.0.0" + "vitest": "5.0.3" }, "peerDependenciesMeta": { "playwright": { @@ -4593,14 +4593,14 @@ } }, "node_modules/@vitest/mocker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.0.tgz", - "integrity": "sha512-66PGTMIiVJP3t4a5yxU9qPtf7MdTBs8jmToMvy+HVflB3Yy13WJZTtPePdvU+wjRV02SKK5doLbSA6o9pwOmiA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.3.tgz", + "integrity": "sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.31", - "@vitest/spy": "5.0.0", + "@vitest/spy": "5.0.3", "estree-walker": "^3.0.3", "magic-string": "^1.2.3" }, @@ -4621,9 +4621,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.0.tgz", - "integrity": "sha512-PVRNuB3wpReb4SQEs4zTKM4KWFhQ5pw3spE8naoDJNB5T5aWRzGKHwXcLUllr0WeOTXpB6bSr3CJLo5+7XQSSQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.3.tgz", + "integrity": "sha512-3hr5eV5z2ff0l2Q1vaKQbB4j3M3tElw8stDokEOTqXJB3Es5VrT8gBRIMY59gGuFp8Y61sWlWFK1aNUH5dHDYw==", "dev": true, "license": "MIT", "dependencies": { @@ -4634,9 +4634,9 @@ } }, "node_modules/@vitest/spy": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.0.tgz", - "integrity": "sha512-uy+luWBAPw9XfthoHi5AkfHUnuPYEESjl0p/r+meoBnU8bxg5GDQ3Ey8MjcJ6sqahkL4PFyrvfMJJBw7LbU06g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.3.tgz", + "integrity": "sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==", "dev": true, "license": "MIT", "funding": { @@ -4644,13 +4644,13 @@ } }, "node_modules/@vitest/ui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.0.tgz", - "integrity": "sha512-h2FIFwggCY2GxUd2UdQoYNVQkOIqEQLPhNREcl3FUiRsdzQep7NWwYbSmhGEA9nFLPDq5pXzRMcBZQU8Py83sg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.3.tgz", + "integrity": "sha512-9dfvqDBvSbHM6y9YVXxAypkl2z7mrWozK/JFo237qI0cj/3M/kzDKiVZqzi3TE54Ler7Jditud7OMBZCyUvRHA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "5.0.0", + "@vitest/utils": "5.0.3", "fflate": "^0.8.3", "flatted": "^3.4.4", "pathe": "^2.0.3", @@ -4661,17 +4661,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.0" + "vitest": "5.0.3" } }, "node_modules/@vitest/utils": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.0.tgz", - "integrity": "sha512-dO++xL3vDfvhTAVimfkuQUA3k+JClIF1i1vAkPqpcGAthRmeWnXmHB7YPViPvgCwviX8u7Y5W1u2N//AaQr3fw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.3.tgz", + "integrity": "sha512-77fDTZv8eu1CzlIfgPU2yrl5MXSUaUAOvgdZEeVm3X3WIxUubIX2SforqS6176lT32HCF6uBVMYVqfHxw7o6eg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "5.0.0", + "@vitest/pretty-format": "5.0.3", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.1" }, @@ -4854,10 +4854,10 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/@yuku-codegen/binding-android-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-android-arm64/-/binding-android-arm64-0.9.4.tgz", - "integrity": "sha512-6ViGFAr+N2Yjnc8wBx16wJZGB0pGmClILO+FUC3kzwEydfjXQovWEdcFyl98RVtWdj9ahS41XXe2zKFl+L3uWg==", + "node_modules/@yuku-core/binding-android-arm64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-android-arm64/-/binding-android-arm64-0.19.0.tgz", + "integrity": "sha512-wdL2XmTiZixAOaHk9Z0JJZ8u9Qm8d333Zjpc6gaxXFX+UR5BlsfxZ7a2+2Rm71pamppsPYGUGFq2oVLbh6DISw==", "cpu": [ "arm64" ], @@ -4868,10 +4868,10 @@ "android" ] }, - "node_modules/@yuku-codegen/binding-darwin-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-arm64/-/binding-darwin-arm64-0.9.4.tgz", - "integrity": "sha512-0BTB70ha+wRsz6fI5HosevJpMmvgndmf+6ND1OneFKCrWhNzX/2xIQ36Z8rUgv5bpnWjKl6bRvzSFV3PU+WOlQ==", + "node_modules/@yuku-core/binding-darwin-arm64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-darwin-arm64/-/binding-darwin-arm64-0.19.0.tgz", + "integrity": "sha512-7sNJa6XJhyetnTy64jw3NEi4YgUcezHk1G5GH9FSvXAuC8wIlbaOwT9lgq5qo5sspjrZJQlBR1TWflP49uRpMw==", "cpu": [ "arm64" ], @@ -4882,10 +4882,10 @@ "darwin" ] }, - "node_modules/@yuku-codegen/binding-darwin-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-darwin-x64/-/binding-darwin-x64-0.9.4.tgz", - "integrity": "sha512-9QVVqq8LCD6v+Gl099u32YJ0999HBCoe09ecIeifKTi4Y1azX44DkF9q9pP2lxgwRUvR3GmWl5k1pLe3ojR2rg==", + "node_modules/@yuku-core/binding-darwin-x64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-darwin-x64/-/binding-darwin-x64-0.19.0.tgz", + "integrity": "sha512-pTC7dYEc59isdyizc3nsuyFNBu2LU5wMYZ1be6UMr59PY/AJNtO1aBLWV0MgL/z7C1nv/2sX4TNjGgKLoeevJw==", "cpu": [ "x64" ], @@ -4896,10 +4896,10 @@ "darwin" ] }, - "node_modules/@yuku-codegen/binding-freebsd-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-freebsd-x64/-/binding-freebsd-x64-0.9.4.tgz", - "integrity": "sha512-Qm3ky33Em9w1XVSryq+D/arLVapeqp0Bu1719UGV6olmfp4kTD+NfsLG9bRx5hOJSu1Zl3r9LbyTP1oTmcHAsg==", + "node_modules/@yuku-core/binding-freebsd-x64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-freebsd-x64/-/binding-freebsd-x64-0.19.0.tgz", + "integrity": "sha512-xrZjF6XOEwyLOiDIfrwDdRCS6ghxcJeirNC1KivQhVcUwlRonaU79S3/Uiyx3lBylPnT8qKJ3/aMT+H52nGTJQ==", "cpu": [ "x64" ], @@ -4910,10 +4910,10 @@ "freebsd" ] }, - "node_modules/@yuku-codegen/binding-linux-arm-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.4.tgz", - "integrity": "sha512-euKmS7pnkeJylEN6+9bfu0jHtGfbQRfFBIpmTe8YVnWzQ5Rjyrns13+1kao2RSS9DNkucX1RXIdiTvQoDUXF0w==", + "node_modules/@yuku-core/binding-linux-arm-gnu": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.19.0.tgz", + "integrity": "sha512-0OyIH53C0I1CbADHn9FSdCfX5qbpeLwJhmOVhonFJNYheybOnkSJ50qGMfTJIb8y5zrwqvLs7FVBvz6Fk8maZg==", "cpu": [ "arm" ], @@ -4927,10 +4927,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-arm-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.4.tgz", - "integrity": "sha512-7JTizi2O+ks9/dLPDLYmVLsYQUC9Fxu0e6LNA+F6FFQ/sV2o7owBb1eTccMKkgauWGGUpJYQvlXrCKpGwguvhA==", + "node_modules/@yuku-core/binding-linux-arm-musl": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm-musl/-/binding-linux-arm-musl-0.19.0.tgz", + "integrity": "sha512-z/iPfkCOCSXE34VXNt0uP1ORSW+4mEa9b5CiJcWZeqZH08g49bFU/jRM2T04f+Wpw5mJ6HIzNBiojxeAbrHjeg==", "cpu": [ "arm" ], @@ -4944,10 +4944,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-arm64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.4.tgz", - "integrity": "sha512-f7eLYDwmcz56Jzvp8UmXUehFzTAn6hEHt64GDWNWGSqrphHRvWLEshQ+sQv8DfNpkXFaOQ49erl4gb2Wm0JM+A==", + "node_modules/@yuku-core/binding-linux-arm64-gnu": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.19.0.tgz", + "integrity": "sha512-jLNTi+gzaRwBJ+gwhCJ+rDb5dmx/8hEBx93UWd7hjMSqPTL1D1wvVSvXVAldV5kALvju7b0/m51EHEhs4+I1fA==", "cpu": [ "arm64" ], @@ -4961,10 +4961,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-arm64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.4.tgz", - "integrity": "sha512-bLdjCgo+u3dU3HH/t+WZ8FsAo2IgdOzruTHZ+XTFquj6j//QJjH9xfyRtu7h65lCT3CQVW9aGEe6/A/HPyA9KQ==", + "node_modules/@yuku-core/binding-linux-arm64-musl": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.19.0.tgz", + "integrity": "sha512-YwyPIdW/rN2Fmv0MTFWi47FaB3F9g+2b+sJISyAw83Yd60RWH4T3Nx6XkAHHVN+uKJNBAd6So7/BVihSiFYvuQ==", "cpu": [ "arm64" ], @@ -4978,10 +4978,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-x64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.4.tgz", - "integrity": "sha512-hDMB71QCDx2AAxhlCBgakngMAa4KK6f6rcTt9v8nrzoXs681cmZultGeZk0tjONxli+N+VMhXQUoiVCSJuKiQg==", + "node_modules/@yuku-core/binding-linux-x64-gnu": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.19.0.tgz", + "integrity": "sha512-/vskaAXVX3ESR43FiTdfiYS7z1b9uoQJwVQ/0RgUHgN2sWoAyCZs+aX4CgU7eKGIHTVfp9VFwv+c+2XchYiEtQ==", "cpu": [ "x64" ], @@ -4995,10 +4995,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-linux-x64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.4.tgz", - "integrity": "sha512-uk1hOZA79AqziAH9A/eSD05VchNRdnLb6zxFGHhCbLYeeGYL+KOEL0+kCIPtaKuQ7wdxDOooiKE1D0jpaWQ0aA==", + "node_modules/@yuku-core/binding-linux-x64-musl": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-linux-x64-musl/-/binding-linux-x64-musl-0.19.0.tgz", + "integrity": "sha512-FuXL5igeSKib9Rye02TdH+D6SQezTyGxIATMu1Qsn/QywrzwpGl35OLpS2C1x5vpGLeVE2XgiLd5mVPFHmIglQ==", "cpu": [ "x64" ], @@ -5012,10 +5012,10 @@ "linux" ] }, - "node_modules/@yuku-codegen/binding-win32-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-arm64/-/binding-win32-arm64-0.9.4.tgz", - "integrity": "sha512-IbZuNVrctjts5lAKUEd9ppnzvylaPdYBTv8AVDtY6EyQ5hpgUfsReqbqODJVGpn2/uIk1fa1jWP012orPoiK+A==", + "node_modules/@yuku-core/binding-win32-arm64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-win32-arm64/-/binding-win32-arm64-0.19.0.tgz", + "integrity": "sha512-YuJAe7zEKT1Xa7LuHlhGJpPnYQeVtvo0rZvNjJRqkH0hQGOw4C8QeP30Tg5VKGzZfo2x8CjhjEhKt4TmLwfmdg==", "cpu": [ "arm64" ], @@ -5026,196 +5026,10 @@ "win32" ] }, - "node_modules/@yuku-codegen/binding-win32-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-codegen/binding-win32-x64/-/binding-win32-x64-0.9.4.tgz", - "integrity": "sha512-UqC4C0PlVAPEQ8fYr0AamuW2zKAkqQFiaaQ88Rl3YlzSNlshj+VmDoSbJRw4TFYL22+Vw53zDSJ95aXyjJN/aw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-parser/binding-android-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-android-arm64/-/binding-android-arm64-0.9.4.tgz", - "integrity": "sha512-x+dZef5ulszaYzgjHLUgnhDXAgJsGfodl30JuTinfLN5mEyB50burpUuyUqufGQp0fpI/sHLAN3V8fuJteFEQQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@yuku-parser/binding-darwin-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-arm64/-/binding-darwin-arm64-0.9.4.tgz", - "integrity": "sha512-bSpjVPP8zTTcMZi78gxPkZZhVNbg4Doqsb2CrxHR2g+vZxP7Ey4GVzgD5nVYSHgS1y8dGULGW8AhPrfRWFEF6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-parser/binding-darwin-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-darwin-x64/-/binding-darwin-x64-0.9.4.tgz", - "integrity": "sha512-QNswJLBxsoDkghztrF0bUy+DEUoeX1lS4cL3dCM1IB4hfLoZ3Jf3jmCoggDnqN++sJ91F6w8oHiyQ4ZhUEr/bg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yuku-parser/binding-freebsd-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-freebsd-x64/-/binding-freebsd-x64-0.9.4.tgz", - "integrity": "sha512-D4rmGI0EOwxmKsv3+iGQDmtJ9/Oqr9wPxsQpONZ+QmxHqNbl+08XaJkhuC5wAg17bj6afcpdQfiIAoSMBY17Rw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-gnu/-/binding-linux-arm-gnu-0.9.4.tgz", - "integrity": "sha512-rZuqBxlaRnNY57nawRP1LPx4i+ieCrvIQkBsbGu/xjWkZGzFCrHPliy5YiMxp3Mw4v5KftAlDJx7c9jApNk2ww==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm-musl/-/binding-linux-arm-musl-0.9.4.tgz", - "integrity": "sha512-0PRDvRZvh18Q1lADxs0RMtqYHTd3dD/o1WEnMO/K8o7V9Gmy/7nD3/HjGQCxFPxkHTp41toF+DsXgEandAc2Gw==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.9.4.tgz", - "integrity": "sha512-CT1I24KFA/Tv/Exi1f+CVxafUIjlKm3gc51HbWLW7yf7OvJKCvKSja+EB17sDtYsS5a2EB9BTr8I5fPuDJ8rFA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-arm64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.9.4.tgz", - "integrity": "sha512-DP193Z3nUXQ92AwmmkIAhVLxv2qj8rWAAAODownCwUk0wKrmnyH9km9Gd4NSmntBYG/Kv0P5btN6qcO1JXgEdw==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-x64-gnu": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.9.4.tgz", - "integrity": "sha512-tjoxmuNz+xmSt/Or+US5aaKpRZcptQsWYaPtDp1/0QUvhyg8VS6mOrizKkzVBJKYVNZ7eDTleOBquYVm+Haz6w==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-linux-x64-musl": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-linux-x64-musl/-/binding-linux-x64-musl-0.9.4.tgz", - "integrity": "sha512-kHXf72EM6oHN58Swwruf9plXlCVY4mOlgqIjpXenEAY87cVcH3VxMZdCQG7rIKa+k0Hf3E/WS/8ufqZSCER7Gw==", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yuku-parser/binding-win32-arm64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-arm64/-/binding-win32-arm64-0.9.4.tgz", - "integrity": "sha512-Yj6+bbGDZrLbzp1Qr7hiaIjYagslUrRy6t3TIxfiXUeJWNH8ydx7birM0UJiIInqUld0mk9qBz1kei/T8gcKvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yuku-parser/binding-win32-x64": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-parser/binding-win32-x64/-/binding-win32-x64-0.9.4.tgz", - "integrity": "sha512-B9D+Z1/jVfoEd1SgbuaYTPH6onVlSsSaK151mW8Rb6Yv+OrTOocNnv2w3peBicS6MB3VI+mJG8YqxRI4ONd1OQ==", + "node_modules/@yuku-core/binding-win32-x64": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-core/binding-win32-x64/-/binding-win32-x64-0.19.0.tgz", + "integrity": "sha512-o8iY/mXwlRkedp0LNTr4+TEfXTPQwoNZmv6k+1WIAd1ZXEn8xJJTBCtB0osaVvdZo/x/cNmV16UrWrrGpM5Mvw==", "cpu": [ "x64" ], @@ -5227,9 +5041,9 @@ ] }, "node_modules/@yuku-toolchain/types": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.9.4.tgz", - "integrity": "sha512-dqnMswJWE7YBbPEvGstgFlWFTRn20V/Hu82XTDjWxzaU18rGpxBqxhKlBlgyWrPARRvNLIqY2XA6S9edR+2AsA==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@yuku-toolchain/types/-/types-0.19.0.tgz", + "integrity": "sha512-tFkNbsP4WXX9UMUC5syJGdK9dPMLK0PPaIuXCcCYH75sZ8MrebfBZ2XvCILRTw8AgLivSSCfDa4R67iYBDa4Kg==", "dev": true, "license": "MIT" }, @@ -5271,9 +5085,9 @@ } }, "node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "dev": true, "license": "MIT", "dependencies": { @@ -5288,9 +5102,9 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5581,9 +5395,9 @@ } }, "node_modules/cac": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cac/-/cac-7.0.0.tgz", - "integrity": "sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cac/-/cac-7.1.0.tgz", + "integrity": "sha512-LMDU/U2yA4IPIY8KT0NsNPWEYZvAMkbgyspxJ6btJaYV+WMDOHAZCmB0lsTObiHaRS1V/ztKAl7+TSkTqXyeoA==", "dev": true, "license": "MIT", "engines": { @@ -5643,9 +5457,9 @@ "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.3.0.tgz", + "integrity": "sha512-XWAtwJ6OHO+tj0EKCs0Y2UamnyOxseZWltU4x2U2wh8g4AigdjwvtUjvLP2tqkA/avxHEtzxNaqGq/YGNwckKg==", "dev": true, "license": "MIT", "engines": { @@ -6031,9 +5845,9 @@ "license": "ISC" }, "node_modules/empathic": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.1.tgz", - "integrity": "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/empathic/-/empathic-2.1.0.tgz", + "integrity": "sha512-AnfC1ATldl49/cvZdLPDjBfrRNwbDO05aibiOtzQu3qtlbJtomNLhF30HEtn/7iBz50dlMECqATo3fG0LrdEgw==", "dev": true, "license": "MIT", "engines": { @@ -6051,9 +5865,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.24.5", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz", - "integrity": "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.26.0.tgz", + "integrity": "sha512-9vhedylFonb2YGogzUKX6+Ja72gOJbN1QHAqdrvqLwhdl/QWbKopzoUC9EbQNVsAns/bx/4uyqalrQAoy1IByw==", "dev": true, "license": "MIT", "dependencies": { @@ -6622,9 +6436,9 @@ "license": "ISC" }, "node_modules/happy-dom": { - "version": "20.14.0", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-20.14.0.tgz", - "integrity": "sha512-4bRh1KzRvKDnFNTlLhzT1RZTpkKhQbQDl9j+7GXszWsvuspYdo29k6OHRf4PwiM6oLb8r/pMWeYiJjkfod5AvQ==", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-21.0.1.tgz", + "integrity": "sha512-pRBs/u9fhrncyByOl58DMex0R2uAj6ZPKWIjV5j5yNGZBqLw3P6BTRhlc0DD5b/Ht4/6JYTMuE2LJhUWRC6SGw==", "dev": true, "license": "MIT", "dependencies": { @@ -6677,9 +6491,9 @@ } }, "node_modules/hookable": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.1.tgz", - "integrity": "sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-6.1.2.tgz", + "integrity": "sha512-+abwxtiEA52GCVIsQqut3S/uKTbUwYIp4Pe/vv+6py5XiXBCqMZHg6pA6Y5qhgLSEys0/cYuPbO0z1QFj5ZCmg==", "dev": true, "license": "MIT" }, @@ -6801,9 +6615,9 @@ } }, "node_modules/import-without-cache": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.0.tgz", - "integrity": "sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/import-without-cache/-/import-without-cache-0.4.1.tgz", + "integrity": "sha512-vXoV9PjKHEednCUu01e98TkImxy67e3BJXbTIOmIq4Hyzw3IAwYRcuPkfeTzJzwyyts4kjuA73x+pWJLc4f86A==", "dev": true, "license": "MIT", "engines": { @@ -7089,9 +6903,9 @@ } }, "node_modules/lefthook": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.1.12.tgz", - "integrity": "sha512-2uOexfsrrRhCiTUWdGyDySxVHHhOFJ8MQejs27dM3hugrQB48/z1ZVlaNoxpZ1SnzQ1GaDIbO5rAvicwyiknYQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.2.1.tgz", + "integrity": "sha512-aKEwhQzGbLMkZu5vrFYKJzLvLVblWATYITmN7Ak4qRCDPCoFJhmeJZFuYf3nTXuqG9xTBE+J8xaAEPL2tpuWyw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7099,22 +6913,22 @@ "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "2.1.12", - "lefthook-darwin-x64": "2.1.12", - "lefthook-freebsd-arm64": "2.1.12", - "lefthook-freebsd-x64": "2.1.12", - "lefthook-linux-arm64": "2.1.12", - "lefthook-linux-x64": "2.1.12", - "lefthook-openbsd-arm64": "2.1.12", - "lefthook-openbsd-x64": "2.1.12", - "lefthook-windows-arm64": "2.1.12", - "lefthook-windows-x64": "2.1.12" + "lefthook-darwin-arm64": "2.2.1", + "lefthook-darwin-x64": "2.2.1", + "lefthook-freebsd-arm64": "2.2.1", + "lefthook-freebsd-x64": "2.2.1", + "lefthook-linux-arm64": "2.2.1", + "lefthook-linux-x64": "2.2.1", + "lefthook-openbsd-arm64": "2.2.1", + "lefthook-openbsd-x64": "2.2.1", + "lefthook-windows-arm64": "2.2.1", + "lefthook-windows-x64": "2.2.1" } }, "node_modules/lefthook-darwin-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.1.12.tgz", - "integrity": "sha512-GSUjqaCuxAYlPOovbjXEWE3HAIa/xOQkTTmZ937zieQldjPLTaC7+s5FHoxKywn+D9riBlofkDqG7Z4f5zzmPA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.2.1.tgz", + "integrity": "sha512-SyuDBT5HqNQfi607vMHrYJu45bRN7JoIFdyxLjEPVe34UnZJCesmeYBODEYTyCfRZjPOaTbton4Padu+qvqfCQ==", "cpu": [ "arm64" ], @@ -7126,9 +6940,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.1.12.tgz", - "integrity": "sha512-qAUHSSw/7Afi5wxkoLkxORxSicCeTBXyVLnRgD6YZra6udviozpK3Aok9Z6FIWeKc5FBijRMSNDxGPTREhsjcQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.2.1.tgz", + "integrity": "sha512-qkIdM89T3OxpLp9rssPSdRQ7QKkX0l07xWxxOaZfECn5iB2xVXSD9FQSjYUMNGXtJJWOGqdKqBngGTB/ShDZtQ==", "cpu": [ "x64" ], @@ -7140,9 +6954,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.1.12.tgz", - "integrity": "sha512-FHZRfKliFNbyz54zsoGdVe9muq67cNjBTZ6jrPPUjI7xUuyCwSpzA+1OpiwJT00L9pP5ZGONBqnGZKnrpC+7Uw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.2.1.tgz", + "integrity": "sha512-0jdr/9Q5cGuazrEVquv29AOD77aPc2jAmFU4EtqVVg3PhMJjAyt7bQeA9qdwHhaHhLnaeUZwMwo3IleVm+D4wg==", "cpu": [ "arm64" ], @@ -7154,9 +6968,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.1.12.tgz", - "integrity": "sha512-HYQZPGy2DDEx7dbuotusJpujY5q9igOLgx36qeeQcNQuvvdGHPj2ZGSIsGKhoJ0dw5Qa4knKJoPAHEZQWdV/og==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.2.1.tgz", + "integrity": "sha512-JFKyNZ9qQp9NsuFyAg/CJIBurIHX3AUayFXxuoDMATWAIhhlyK0YMtpWgEFIl1M2iGLBLQ3TiLoCCRnbwndNDg==", "cpu": [ "x64" ], @@ -7168,9 +6982,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.1.12.tgz", - "integrity": "sha512-ipjOri2PB/sk4noPrHQuM5fcpNBjmlKo4qMtXyLnxeOxGYHWZzf0Xi0OtrXHQ//tOprcv40ADvhUuSdcGqigLw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.2.1.tgz", + "integrity": "sha512-na8Ezm7pK44+WsQqj9tES7v8VseM1MrNeNJhUnM8eINV22KYptWam8evfjZxY3NYxOTwn6f/Zpe/BBvcLKMaTQ==", "cpu": [ "arm64" ], @@ -7182,9 +6996,9 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.1.12.tgz", - "integrity": "sha512-DmU6xfvqVoFdW+STyc70YI4Ry8vkHGKHx+IJ1Js/Gacq5dv+fiwNzwle3bi28EkL6P8xY67B/CfQfRj4SRU4tg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.2.1.tgz", + "integrity": "sha512-wl7CR5uNkOiZ38SkW4l9O6wf/Nllbkw90ZZonXRFkbgrnPjLMhZGUt9ucewsPwBQ/ckU1t08JuBHeOywB/CFow==", "cpu": [ "x64" ], @@ -7196,9 +7010,9 @@ ] }, "node_modules/lefthook-openbsd-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.1.12.tgz", - "integrity": "sha512-vb0J7bElLvoaCWQmna3HntsvoNqMsGAhfjjC99ss1OdCteufZKM3RxCVoMBEbD50Itv2c1Ua2AFVToltVFTy1Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.2.1.tgz", + "integrity": "sha512-UFwL+AGSqkhQ15kuKl5FMRx/UqbcfcQbGFg5ggYzhT7qBOsTu3a9POXRxt3hsalBeMgkDWsv3IaPlj51YGpCAg==", "cpu": [ "arm64" ], @@ -7210,9 +7024,9 @@ ] }, "node_modules/lefthook-openbsd-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.1.12.tgz", - "integrity": "sha512-QOmhDWqPPK4+99scanfEmbJjUR+JYC93qhr/0bp5Dj3LaR3kVFNWc6zOQUsOTPy/LC6PG759Lej/mr/BtjUL2Q==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.2.1.tgz", + "integrity": "sha512-IMKEuxJLo91C1yjhJ42EadfXUb3ECMkvTKpSt17kwaiyZsvvZ8LGdrXwQZiLNJt2M5ECuTVCQUvDimM6mGraOw==", "cpu": [ "x64" ], @@ -7224,9 +7038,9 @@ ] }, "node_modules/lefthook-windows-arm64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.1.12.tgz", - "integrity": "sha512-eErEyr9AHkRFj6TxpCQeKGd0s6IrtL/VEIZ/ssg8dNfG+ycR4jAW/IAlrJSw6/ZQXb3WtWLaQ6QA5c+TLh7vmg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.2.1.tgz", + "integrity": "sha512-Pi8vOvObjg8HJDl8d96s7jsI6TN33klpqv6tXSXpoKEeoAwEh5Y9NawO6bzoOpLfAxf2SfMBcuaBzFQ5zE2gjA==", "cpu": [ "arm64" ], @@ -7238,9 +7052,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.1.12.tgz", - "integrity": "sha512-0h+WmDVdDriTjloD/UbjPq/ZtqaaJlPAdGcVwMCEdAxfbF0FTgDbKX3igui9g2U/qG2y6QpVhtz1jeiRe7ctaw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.2.1.tgz", + "integrity": "sha512-7FtuPrc1XzxIFLAbzneOF1hr9r/vGi2lcMpX14QG9d/mnLhwu4EyNBh48JNEqsQqrOB9QKavsNqxVl1e8zcukA==", "cpu": [ "x64" ], @@ -7571,13 +7385,13 @@ } }, "node_modules/magic-string": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.2.3.tgz", - "integrity": "sha512-Bpb0W2TbLKOZ7vJnOUnVRGq3WL2p+ISV29M6hYPL1AFCpyKZpdr5ytiXoTSSxRVhg8YW7f65+6gbG8WG6PCa/g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-1.4.3.tgz", + "integrity": "sha512-z12OxmaPGE0F4xlpGdjuAUckipLpQlTAuAmyGhNoD7ODpYUzvDfvtxUbjM/jwznyP178oju/KDdyi220wNJ0RQ==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "@jridgewell/sourcemap-codec": "^1.6.0" } }, "node_modules/math-intrinsics": { @@ -7873,9 +7687,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.18", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", - "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", "dev": true, "funding": [ { @@ -7901,13 +7715,6 @@ "node": ">= 0.6" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -7958,9 +7765,9 @@ } }, "node_modules/obug": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.4.tgz", - "integrity": "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", + "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -8033,13 +7840,13 @@ "license": "MIT" }, "node_modules/oxfmt": { - "version": "0.67.0", - "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.67.0.tgz", - "integrity": "sha512-vV7sSiPsaO0mSxdoUdayipVDFPzW/UQ+hrezEHa20+Tx1dnMdZLSRHMT0PdS67FFbhd74M1n08asW21aLGeCrA==", + "version": "0.72.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.72.0.tgz", + "integrity": "sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g==", "dev": true, "license": "MIT", "dependencies": { - "tinypool": "2.1.2" + "tinypool": "2.2.0" }, "bin": { "oxfmt": "bin/oxfmt" @@ -8051,25 +7858,25 @@ "url": "https://github.com/sponsors/oxc-project" }, "optionalDependencies": { - "@oxfmt/binding-android-arm-eabi": "0.67.0", - "@oxfmt/binding-android-arm64": "0.67.0", - "@oxfmt/binding-darwin-arm64": "0.67.0", - "@oxfmt/binding-darwin-x64": "0.67.0", - "@oxfmt/binding-freebsd-x64": "0.67.0", - "@oxfmt/binding-linux-arm-gnueabihf": "0.67.0", - "@oxfmt/binding-linux-arm-musleabihf": "0.67.0", - "@oxfmt/binding-linux-arm64-gnu": "0.67.0", - "@oxfmt/binding-linux-arm64-musl": "0.67.0", - "@oxfmt/binding-linux-ppc64-gnu": "0.67.0", - "@oxfmt/binding-linux-riscv64-gnu": "0.67.0", - "@oxfmt/binding-linux-riscv64-musl": "0.67.0", - "@oxfmt/binding-linux-s390x-gnu": "0.67.0", - "@oxfmt/binding-linux-x64-gnu": "0.67.0", - "@oxfmt/binding-linux-x64-musl": "0.67.0", - "@oxfmt/binding-openharmony-arm64": "0.67.0", - "@oxfmt/binding-win32-arm64-msvc": "0.67.0", - "@oxfmt/binding-win32-ia32-msvc": "0.67.0", - "@oxfmt/binding-win32-x64-msvc": "0.67.0" + "@oxfmt/binding-android-arm-eabi": "0.72.0", + "@oxfmt/binding-android-arm64": "0.72.0", + "@oxfmt/binding-darwin-arm64": "0.72.0", + "@oxfmt/binding-darwin-x64": "0.72.0", + "@oxfmt/binding-freebsd-x64": "0.72.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.72.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.72.0", + "@oxfmt/binding-linux-arm64-gnu": "0.72.0", + "@oxfmt/binding-linux-arm64-musl": "0.72.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.72.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.72.0", + "@oxfmt/binding-linux-riscv64-musl": "0.72.0", + "@oxfmt/binding-linux-s390x-gnu": "0.72.0", + "@oxfmt/binding-linux-x64-gnu": "0.72.0", + "@oxfmt/binding-linux-x64-musl": "0.72.0", + "@oxfmt/binding-openharmony-arm64": "0.72.0", + "@oxfmt/binding-win32-arm64-msvc": "0.72.0", + "@oxfmt/binding-win32-ia32-msvc": "0.72.0", + "@oxfmt/binding-win32-x64-msvc": "0.72.0" }, "peerDependencies": { "svelte": "^5.0.0", @@ -8287,13 +8094,13 @@ } }, "node_modules/playwright": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.63.0.tgz", - "integrity": "sha512-+7ziBLidS4NaNCdt57SUDT+wYmmd5fmiQejUic/kb+YsYSCPyOOE9sebzMjNmQrsnNpDJqd4WHvV/8lfKfUDUg==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.0.tgz", + "integrity": "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.63.0" + "playwright-core": "1.64.0" }, "bin": { "playwright": "cli.js" @@ -8303,9 +8110,9 @@ } }, "node_modules/playwright-core": { - "version": "1.63.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.63.0.tgz", - "integrity": "sha512-rYCsBF/M5HjUch52bbtVONEFjv6Xu8sm8h72dNlR5bzIE1fvC/bxgspzkjSfU+MweEMmPM8KJebG6nnyxo5mCg==", + "version": "1.64.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0.tgz", + "integrity": "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8326,9 +8133,9 @@ } }, "node_modules/postcss": { - "version": "8.5.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.28.tgz", - "integrity": "sha512-RRuzqDtt5Y9h3quz5hWhK+TPnsmVs6WwSU6LkJMeY4HstUEDuYTG8UJSdawMRzmzAtV+KEoG8N3Qg2qLy5vM/A==", + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", "dev": true, "funding": [ { @@ -8346,9 +8153,9 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.18", + "nanoid": "^3.3.19", "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "source-map-js": "^1.2.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -8399,9 +8206,9 @@ } }, "node_modules/publint": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/publint/-/publint-0.3.24.tgz", - "integrity": "sha512-9zS56KrKBoqi5Qt8h92uMP8TTM9AYZSgnmCo4u2priMqkOZvQnTsziZ2p5LJ2ywbYkAjoCDp2jda9u4cgFefIw==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/publint/-/publint-0.3.25.tgz", + "integrity": "sha512-WMMbn/d7JqRlfXQL/JUI4n5skC8cJ5WVr8/wT5mmiYWkUdENkZr1I5rgs2+dQPVRgoJd+JRYtB46MTsuDylw9g==", "dev": true, "license": "MIT", "dependencies": { @@ -8621,13 +8428,13 @@ } }, "node_modules/rolldown": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.7.tgz", - "integrity": "sha512-g0EtLvBjTUB7jhyV0S/TCup3v/XSVl45vUIGbOGU4QPiyjTenCe4mKuFvW9fEgYmS2Fo42AUssRmNuMziXdrig==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.13.tgz", + "integrity": "sha512-/5apOkwWxtACcQtZ5WlrAsKS4JwXVThQPJZ3RqIruRY9UG9M8e0VlXN068xum/JRKA4aIUoJ13ghe/kGCvidiQ==", "dev": true, "license": "MIT", "dependencies": { - "@oxc-project/types": "=0.148.0", + "@oxc-project/types": "=0.153.0", "@rolldown/pluginutils": "^1.0.0" }, "bin": { @@ -8637,36 +8444,36 @@ "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@rolldown/binding-android-arm-eabi": "1.2.7", - "@rolldown/binding-android-arm64": "1.2.7", - "@rolldown/binding-darwin-arm64": "1.2.7", - "@rolldown/binding-darwin-x64": "1.2.7", - "@rolldown/binding-freebsd-x64": "1.2.7", - "@rolldown/binding-linux-arm-gnueabihf": "1.2.7", - "@rolldown/binding-linux-arm64-gnu": "1.2.7", - "@rolldown/binding-linux-arm64-musl": "1.2.7", - "@rolldown/binding-linux-ppc64-gnu": "1.2.7", - "@rolldown/binding-linux-s390x-gnu": "1.2.7", - "@rolldown/binding-linux-x64-gnu": "1.2.7", - "@rolldown/binding-linux-x64-musl": "1.2.7", - "@rolldown/binding-openharmony-arm64": "1.2.7", - "@rolldown/binding-win32-arm64-msvc": "1.2.7", - "@rolldown/binding-win32-x64-msvc": "1.2.7" + "@rolldown/binding-android-arm-eabi": "1.2.13", + "@rolldown/binding-android-arm64": "1.2.13", + "@rolldown/binding-darwin-arm64": "1.2.13", + "@rolldown/binding-darwin-x64": "1.2.13", + "@rolldown/binding-freebsd-x64": "1.2.13", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.13", + "@rolldown/binding-linux-arm64-gnu": "1.2.13", + "@rolldown/binding-linux-arm64-musl": "1.2.13", + "@rolldown/binding-linux-ppc64-gnu": "1.2.13", + "@rolldown/binding-linux-s390x-gnu": "1.2.13", + "@rolldown/binding-linux-x64-gnu": "1.2.13", + "@rolldown/binding-linux-x64-musl": "1.2.13", + "@rolldown/binding-openharmony-arm64": "1.2.13", + "@rolldown/binding-win32-arm64-msvc": "1.2.13", + "@rolldown/binding-win32-x64-msvc": "1.2.13" } }, "node_modules/rolldown-plugin-dts": { - "version": "0.28.5", - "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.28.5.tgz", - "integrity": "sha512-yYd3C9CeJwqjOc9X23m0Tyxcqic491uLZlfg51szT287S8zCCqLR2uoySoElgqy2CLn7PdXcEo1dlkBs4n1WHg==", + "version": "0.28.8", + "resolved": "https://registry.npmjs.org/rolldown-plugin-dts/-/rolldown-plugin-dts-0.28.8.tgz", + "integrity": "sha512-FVhfqxorCWcc20BVT5eVRfRjzLLl6mgzjcMR4gSBf0K4oQMXT0qoHhhzfXy0L7y83fQy7Ug5ZDNk90xM3/LiCQ==", "dev": true, "license": "MIT", "dependencies": { "dts-resolver": "^3.0.0", "get-tsconfig": "5.0.0-beta.6", - "obug": "^2.1.4", - "yuku-ast": "^0.9.3", - "yuku-codegen": "^0.9.3", - "yuku-parser": "^0.9.3" + "obug": "^3.0.0", + "yuku-ast": "^0.19.0", + "yuku-codegen": "^0.19.0", + "yuku-parser": "^0.19.0" }, "engines": { "node": "^22.18.0 || ^24.11.0 || >=26.0.0" @@ -8677,6 +8484,7 @@ "peerDependencies": { "@typescript/native-preview": "*", "@volar/typescript": "~2.4.0", + "@vue/language-core": "~3.2.0 || ~3.3.0", "rolldown": "^1.2.0", "typescript": "^5.0.0 || ^6.0.0 || ~7.0.0", "vue-tsc": "~3.2.0 || ~3.3.0" @@ -8688,6 +8496,9 @@ "@volar/typescript": { "optional": true }, + "@vue/language-core": { + "optional": true + }, "typescript": { "optional": true }, @@ -8696,6 +8507,20 @@ } } }, + "node_modules/rolldown-plugin-dts/node_modules/obug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -8792,15 +8617,15 @@ "license": "MIT" }, "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.5.0.tgz", + "integrity": "sha512-zJlMCZ0cAR5p/Y4oVpRoqioDMJcGxaXRrQ/4rP4WyR84vc5z/DolXdbvXeDpTwbtocDFr2rhPqHPErDCUtz2kA==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", + "@types/json-schema": "^7.0.15", + "ajv": "^8.20.0", + "ajv-formats": "^3.0.1", "ajv-keywords": "^5.1.0" }, "engines": { @@ -9119,13 +8944,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, "node_modules/sirv": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", @@ -9152,9 +8970,9 @@ } }, "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==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -9172,13 +8990,6 @@ "source-map": "^0.6.0" } }, - "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" - }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -9190,9 +9001,9 @@ } }, "node_modules/std-env": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz", - "integrity": "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.3.0.tgz", + "integrity": "sha512-OtU/EgQ1kIm5KwqQpBC6ZEMXrZRui11w8zgfTWp8cdO9B8OaPsbA8bTHO2P+HNo1VlUTGMVBwPhydu6poeXiag==", "dev": true, "license": "MIT" }, @@ -9300,9 +9111,9 @@ "license": "MIT" }, "node_modules/tinybench": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.1.4.tgz", - "integrity": "sha512-9APumHG7r4yOk4X4WlkmE71aZcv1gvin1czO3OQ1U9iJcFA5Ja/ygyb0vPOVHTthFozUYs8CLoLUlM8grb2lTQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-6.2.2.tgz", + "integrity": "sha512-nIZ2N2dFpjBsg2hgitKu7mA+FvsIJuGJOwysRngmVRRmWgR/UyPjwJj8c/fT/dhm8EkHnF5EOogRf+0Z2qrimA==", "dev": true, "license": "MIT", "engines": { @@ -9337,9 +9148,9 @@ } }, "node_modules/tinypool": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.1.2.tgz", - "integrity": "sha512-9YodfrxS9g9IbFr/KOjE5bAeJ0p61n3bW6mqvy0jtoeKd1kTW1Cxm0oulm6KX2lyM9Gl6WIe8nEbY7LWv5ZJww==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.2.0.tgz", + "integrity": "sha512-jBrmx4lYmaC9k/mgPbylxs7kBUxHtD8256up+HjLaDFfXScKJQyil+SWXSvhAtT7XHo+yTVlpB81PGmHP8oLSQ==", "dev": true, "license": "MIT", "engines": { @@ -9347,9 +9158,9 @@ } }, "node_modules/tinyrainbow": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.1.tgz", - "integrity": "sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz", + "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==", "dev": true, "license": "MIT", "engines": { @@ -9417,26 +9228,26 @@ } }, "node_modules/tsdown": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.23.0.tgz", - "integrity": "sha512-BaT+ep1xnj5hdyICLd5r5SYYE+TXnI1ATePLykv9vcKpHpFTWUWRH+x1AF/E2qcu3YB6+vI8IdyxIIIffEqw5Q==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/tsdown/-/tsdown-0.23.1.tgz", + "integrity": "sha512-MSC2WSOts3in95J334/VIS7KPfor3eCSvndJ6KdoVj9Aak9Kh1aNfz9ws5owhdukuTNSXRdfkPEzA/ihpDD6SA==", "dev": true, "license": "MIT", "dependencies": { - "cac": "^7.0.0", + "cac": "^7.0.1", "defu": "^6.1.7", - "empathic": "^2.0.1", - "hookable": "^6.1.1", - "import-without-cache": "^0.4.0", - "obug": "^2.1.4", + "empathic": "^2.1.0", + "hookable": "^6.1.2", + "import-without-cache": "^0.4.1", + "obug": "^3.0.0", "picomatch": "^4.0.7", - "rolldown": "~1.2.7", - "rolldown-plugin-dts": "^0.28.5", + "rolldown": "~1.2.13", + "rolldown-plugin-dts": "^0.28.7", "tinyexec": "^1.3.1", "tinyglobby": "^0.2.17", "tree-kill": "^1.2.2", "unconfig-core": "^7.5.0", - "verkit": "^0.4.0" + "verkit": "^0.5.0" }, "bin": { "tsdown": "dist/run.mjs" @@ -9449,8 +9260,8 @@ }, "peerDependencies": { "@arethetypeswrong/core": "^0.18.1", - "@tsdown/css": "0.23.0", - "@tsdown/exe": "0.23.0", + "@tsdown/css": "0.23.1", + "@tsdown/exe": "0.23.1", "@vitejs/devtools": "*", "publint": "^0.3.8", "tsx": "*", @@ -9488,6 +9299,20 @@ } } }, + "node_modules/tsdown/node_modules/obug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -9696,9 +9521,9 @@ } }, "node_modules/verkit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.4.0.tgz", - "integrity": "sha512-sXMwN6DMHeouPfCxkxWkKAmxphWKEenHYY5H1nIBzU3PmDsmJp6kBXJdshjVdpMZuWCmL9SH7KFRx29AylpP6g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.5.0.tgz", + "integrity": "sha512-u4J1hr6Y+C/hit34GwL3eIcUf3wngT8TlYUjK7tk0jxydKLAq3sYvifjdTDA6U3KCKRcQCQDGf/srjxfZF3l7g==", "dev": true, "license": "MIT", "engines": { @@ -9709,16 +9534,16 @@ } }, "node_modules/vite": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz", - "integrity": "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.4.tgz", + "integrity": "sha512-IftLE8phJhdNRIGNEV4JCCvfNScoZQVfcXaN8TQropWGJtOHcu+iAB9pHcuGvmEb/kddw0LBe/jS8ztdC6xdiQ==", "dev": true, "license": "MIT", "dependencies": { "lightningcss": "^1.33.0", - "picomatch": "^4.0.5", - "postcss": "^8.5.26", - "rolldown": "~1.2.4", + "picomatch": "^4.0.7", + "postcss": "^8.5.29", + "rolldown": "~1.2.12", "tinyglobby": "^0.2.17" }, "bin": { @@ -9735,7 +9560,7 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.4.0 || ^0.5.0", + "@vitejs/devtools": "^0.7.1", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", @@ -9787,14 +9612,14 @@ } }, "node_modules/vitest": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.0.tgz", - "integrity": "sha512-gpsMNoRhMjMktVxPtstOH4/PJuPyovVaMDr4oDilXaGH1EcqM2OE96SoHT2VIQ6fTGtTjqmHDrEu2X9RQiXf8Q==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.3.tgz", + "integrity": "sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/mocker": "5.0.0", + "@vitest/mocker": "5.0.3", "chai": "^6.2.2", "es-module-lexer": "^2.3.2", "expect-type": "^1.4.0", @@ -9802,10 +9627,10 @@ "obug": "^2.1.4", "picomatch": "^4.0.7", "std-env": "^4.2.0", - "tinybench": "6.1.4", - "tinyexec": "1.3.0", + "tinybench": "^6.1.4", + "tinyexec": "^1.3.0", "tinyglobby": "^0.2.17", - "why-is-node-running": "^2.3.0" + "why-is-node-running": "3.2.1" }, "bin": { "vitest": "vitest.mjs" @@ -9820,12 +9645,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "5.0.0", - "@vitest/browser-preview": "5.0.0", + "@vitest/browser-playwright": "5.0.3", + "@vitest/browser-preview": "5.0.3", "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0", - "@vitest/coverage-istanbul": "5.0.0", - "@vitest/coverage-v8": "5.0.0", - "@vitest/ui": "5.0.0", + "@vitest/coverage-istanbul": "5.0.3", + "@vitest/coverage-v8": "5.0.3", + "@vitest/ui": "5.0.3", "happy-dom": "*", "jsdom": "*", "vite": "^6.4.0 || ^7.0.0 || ^8.0.0" @@ -9869,16 +9694,6 @@ } } }, - "node_modules/vitest/node_modules/tinyexec": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz", - "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/watchpack": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", @@ -9900,9 +9715,9 @@ "license": "MIT" }, "node_modules/webpack": { - "version": "5.110.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.110.3.tgz", - "integrity": "sha512-GuizBzRvo9YPpyoNMf3ag7AzxbaW85qrRSqTha345KyJbAFPt3/cMzBM0h+RWg7SK/7DdzRLINP3LvQ0hvr4hg==", + "version": "5.111.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.111.1.tgz", + "integrity": "sha512-cNypaz0RP+S4cvQVi1M/3bRUkvNP0xZpL0TjFx+c6jg64VbxD+2weWDgY9UnjRI6dhZgtaj8DU76GGFcJ79xPQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9911,17 +9726,15 @@ "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.24.4", + "enhanced-resolve": "^5.25.0", "es-module-lexer": "^2.1.0", "events": "^3.2.0", "graceful-fs": "^4.2.11", "mime-db": "^1.54.0", "minimizer-webpack-plugin": "^5.7.0", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", + "schema-utils": "^4.5.0", "tapable": "^2.3.0", "watchpack": "^2.5.2", "webpack-sources": "^3.5.1" @@ -10157,20 +9970,16 @@ } }, "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==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-3.2.1.tgz", + "integrity": "sha512-Tb2FUhB4vUsGQlfSquQLYkApkuPAFQXGFzxWKHHumVz2dK+X1RUm/HnID4+TfIGYJ1kTcwOaCk/buYCEJr6YjQ==", "dev": true, "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, "bin": { "why-is-node-running": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=20.11" } }, "node_modules/wildcard": { @@ -10227,62 +10036,70 @@ } }, "node_modules/yuku-ast": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.9.4.tgz", - "integrity": "sha512-AeeHDopMAy2mMafUMEIZxmQaCJOPEvBGDSSA23y5iKuzak3H2otfmgo4ObJubuzdHlJrv4eFY3KQ5XZOru5gpw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-ast/-/yuku-ast-0.19.0.tgz", + "integrity": "sha512-PyCsiScaelhxBGzL8dyeJkLqvRZycoh78R31Vrt/WqYrm0hMFoKwIw/X7Dx5mBKLWAMlV9I9HEyBOHnj2gZVyw==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4" + "@yuku-toolchain/types": "^0.19.0" + }, + "engines": { + "node": ">=14.18.0" } }, "node_modules/yuku-codegen": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-codegen/-/yuku-codegen-0.9.4.tgz", - "integrity": "sha512-pPr8xA8wBjrebER5VFeqS1XqATED1dQXU7JoAectAi1RBG4YFJz5yBirnmmmHZHldgnMKs/pMGkDtwGVQX+Efg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-codegen/-/yuku-codegen-0.19.0.tgz", + "integrity": "sha512-uymAKHjDuaP4BEpkXC/BSLz4DUEF5oArZ5AuD3888nb2miChjWSgpPdojEJxm3pjpXkgUaCRJQyNAbnMN33wHg==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4" + "@yuku-toolchain/types": "^0.19.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/yuku-core": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-core/-/yuku-core-0.19.0.tgz", + "integrity": "sha512-kYK9e1XdfirNhkipzW0wmMcSWcVF/CWnuugodfVYRCUwvoBefweL9HzB96OiKEhsx78V5WbUxbJqlizMX869Qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@yuku-toolchain/types": "^0.19.0" + }, + "engines": { + "node": ">=14.18.0" }, "optionalDependencies": { - "@yuku-codegen/binding-android-arm64": "0.9.4", - "@yuku-codegen/binding-darwin-arm64": "0.9.4", - "@yuku-codegen/binding-darwin-x64": "0.9.4", - "@yuku-codegen/binding-freebsd-x64": "0.9.4", - "@yuku-codegen/binding-linux-arm-gnu": "0.9.4", - "@yuku-codegen/binding-linux-arm-musl": "0.9.4", - "@yuku-codegen/binding-linux-arm64-gnu": "0.9.4", - "@yuku-codegen/binding-linux-arm64-musl": "0.9.4", - "@yuku-codegen/binding-linux-x64-gnu": "0.9.4", - "@yuku-codegen/binding-linux-x64-musl": "0.9.4", - "@yuku-codegen/binding-win32-arm64": "0.9.4", - "@yuku-codegen/binding-win32-x64": "0.9.4" + "@yuku-core/binding-android-arm64": "0.19.0", + "@yuku-core/binding-darwin-arm64": "0.19.0", + "@yuku-core/binding-darwin-x64": "0.19.0", + "@yuku-core/binding-freebsd-x64": "0.19.0", + "@yuku-core/binding-linux-arm-gnu": "0.19.0", + "@yuku-core/binding-linux-arm-musl": "0.19.0", + "@yuku-core/binding-linux-arm64-gnu": "0.19.0", + "@yuku-core/binding-linux-arm64-musl": "0.19.0", + "@yuku-core/binding-linux-x64-gnu": "0.19.0", + "@yuku-core/binding-linux-x64-musl": "0.19.0", + "@yuku-core/binding-win32-arm64": "0.19.0", + "@yuku-core/binding-win32-x64": "0.19.0" } }, "node_modules/yuku-parser": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/yuku-parser/-/yuku-parser-0.9.4.tgz", - "integrity": "sha512-VWnoJzdB2g1JjsMEcB2MxSLoDbgISgOiNRsgiR0qrQKiUw2yyzEfYEYkNHSMNhdGkSo7gtmcN+2UOczzGDLAuw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/yuku-parser/-/yuku-parser-0.19.0.tgz", + "integrity": "sha512-XrBh9ZiQK5mJVRxZBAvD6LwRyAYrK3MFtH3+onyuxFL5hFD44EC3QOmIC1FjTj6H2MMwq46/NAI+NZxLZPZgxg==", "dev": true, "license": "MIT", "dependencies": { - "@yuku-toolchain/types": "^0.9.4", - "yuku-ast": "^0.9.4" + "@yuku-toolchain/types": "^0.19.0", + "yuku-core": "0.19.0" }, - "optionalDependencies": { - "@yuku-parser/binding-android-arm64": "0.9.4", - "@yuku-parser/binding-darwin-arm64": "0.9.4", - "@yuku-parser/binding-darwin-x64": "0.9.4", - "@yuku-parser/binding-freebsd-x64": "0.9.4", - "@yuku-parser/binding-linux-arm-gnu": "0.9.4", - "@yuku-parser/binding-linux-arm-musl": "0.9.4", - "@yuku-parser/binding-linux-arm64-gnu": "0.9.4", - "@yuku-parser/binding-linux-arm64-musl": "0.9.4", - "@yuku-parser/binding-linux-x64-gnu": "0.9.4", - "@yuku-parser/binding-linux-x64-musl": "0.9.4", - "@yuku-parser/binding-win32-arm64": "0.9.4", - "@yuku-parser/binding-win32-x64": "0.9.4" + "engines": { + "node": ">=14.18.0" } } } diff --git a/package.json b/package.json index 8d0bfe4..3132abe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.53.4-build2", + "version": "3.54.0-build1", "description": "SQLite Wasm conveniently wrapped as an ES Module.", "type": "module", "repository": { @@ -75,17 +75,17 @@ "node": ">=22" }, "devDependencies": { - "@types/node": "^26.5.0", - "@vitest/browser": "^5.0.0", - "@vitest/browser-playwright": "^5.0.0", - "happy-dom": "20.14.0", - "lefthook": "2.1.12", - "oxfmt": "^0.67.0", - "playwright": "^1.63.0", - "publint": "^0.3.24", - "tsdown": "^0.23.0", + "@types/node": "^26.6.5", + "@vitest/browser": "^5.0.3", + "@vitest/browser-playwright": "^5.0.3", + "happy-dom": "21.0.1", + "lefthook": "2.2.1", + "oxfmt": "^0.72.0", + "playwright": "^1.64.0", + "publint": "^0.3.25", + "tsdown": "^0.23.1", "typescript": "7.0.2", - "vitest": "^5.0.0" + "vitest": "^5.0.3" }, "packageManager": "npm@12.0.1", "allowScripts": { From b479af6c2edd1b0554313f298c5885049cc09dd0 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Fri, 16 Oct 2026 18:41:50 +0200 Subject: [PATCH 2/5] chore: bumped version to 3.54.1-build1 --- demos/sahpool-rsbuild-demo/package.json | 2 +- demos/sahpool-webpack-demo/package.json | 2 +- package-lock.json | 625 ++++++++++++------------ package.json | 16 +- 4 files changed, 318 insertions(+), 327 deletions(-) diff --git a/demos/sahpool-rsbuild-demo/package.json b/demos/sahpool-rsbuild-demo/package.json index 6496b39..fd59403 100644 --- a/demos/sahpool-rsbuild-demo/package.json +++ b/demos/sahpool-rsbuild-demo/package.json @@ -9,6 +9,6 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "@rsbuild/core": "^2.2.12" + "@rsbuild/core": "^2.2.13" } } diff --git a/demos/sahpool-webpack-demo/package.json b/demos/sahpool-webpack-demo/package.json index d33f71d..bc6100f 100644 --- a/demos/sahpool-webpack-demo/package.json +++ b/demos/sahpool-webpack-demo/package.json @@ -9,7 +9,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "webpack": "^5.111.1", + "webpack": "^5.112.0", "webpack-cli": "^7.2.3", "webpack-dev-server": "^6.0.0" } diff --git a/package-lock.json b/package-lock.json index 6b364ab..cb862cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,28 +1,28 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.54.0-build1", + "version": "3.54.1-build1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@sqlite.org/sqlite-wasm", - "version": "3.54.0-build1", + "version": "3.54.1-build1", "license": "Apache-2.0", "workspaces": [ "demos/*" ], "devDependencies": { "@types/node": "^26.6.5", - "@vitest/browser": "^5.0.3", - "@vitest/browser-playwright": "^5.0.3", - "happy-dom": "21.0.1", - "lefthook": "2.2.1", - "oxfmt": "^0.72.0", - "playwright": "^1.64.0", + "@vitest/browser": "^5.0.5", + "@vitest/browser-playwright": "^5.0.5", + "happy-dom": "21.0.3", + "lefthook": "2.2.2", + "oxfmt": "^0.73.0", + "playwright": "^1.64.1", "publint": "^0.3.25", "tsdown": "^0.23.1", "typescript": "7.0.2", - "vitest": "^5.0.3" + "vitest": "^5.0.5" }, "engines": { "node": ">=22" @@ -97,7 +97,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "@rsbuild/core": "^2.2.12" + "@rsbuild/core": "^2.2.13" } }, "demos/sahpool-webpack-demo": { @@ -106,7 +106,7 @@ "@sqlite.org/sqlite-wasm": "file:../.." }, "devDependencies": { - "webpack": "^5.111.1", + "webpack": "^5.112.0", "webpack-cli": "^7.2.3", "webpack-dev-server": "^6.0.0" } @@ -893,9 +893,9 @@ } }, "node_modules/@oxfmt/binding-android-arm-eabi": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.72.0.tgz", - "integrity": "sha512-u4U1uaDOVBuorGNC/07NLm48nECHOiJJka002YGML16Md2DRvf38RGBt01lH60EOGvNlFVmbLoksQedNBoZHKw==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.73.0.tgz", + "integrity": "sha512-dhunAdMbi/4o0Y66/+Wl6rpsNqpvE4i26Qw6bB77A97L2lJoktWg6m+X9QOon8iOEEqzD9rEZqFi5uZ4oIzhCA==", "cpu": [ "arm" ], @@ -910,9 +910,9 @@ } }, "node_modules/@oxfmt/binding-android-arm64": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.72.0.tgz", - "integrity": "sha512-GCnM+Ae2mWOKC+92y3FOb6eZJeVnBAVz82e3lITUUg+kxukYKzBNAvJ/hhHIfa2A0md55SYYhdWPddSSy3KPVA==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.73.0.tgz", + "integrity": "sha512-dBoypjC2/xeyKyIhN2waX0/XeoccH9k0lVVe+sGRc4X8HSJVRtqyZDoXdr7bGY9A75c51dX0z0dLDpGQKwCdCg==", "cpu": [ "arm64" ], @@ -927,9 +927,9 @@ } }, "node_modules/@oxfmt/binding-darwin-arm64": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.72.0.tgz", - "integrity": "sha512-LjQ8tlevdtwraFlWC6AnQ1Forzde0clRmnsP3QmK+ydSElDt/J+5Jc+m+//Ly1G97aP7WCNUw110QMIUw2K7xA==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.73.0.tgz", + "integrity": "sha512-Tn7Y+qWIpCQK+qdYwBcn6YvqeBuPiuG3tcNlYg16a5QL2o3rSmrgBB1nCyYqo0uvc1LNrfQW9/CK2tzFuID/Fg==", "cpu": [ "arm64" ], @@ -944,9 +944,9 @@ } }, "node_modules/@oxfmt/binding-darwin-x64": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.72.0.tgz", - "integrity": "sha512-+ZbcxhB1C34RQR5IldSyY6Z/yalJIxHXhP36PGE4sEq0f/lgL5jCLmOKoDeVm8dqd9gFGDsd1bNWHSGCAwdSkw==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.73.0.tgz", + "integrity": "sha512-yVb0E0tg/+9Xc9YJCBq66qF1DC/aN5mhb5nnHz0k4ikwkMANtSul2VPDSwjYdXR6/DFimc+pPUgLBqkIa5Ctuw==", "cpu": [ "x64" ], @@ -961,9 +961,9 @@ } }, "node_modules/@oxfmt/binding-freebsd-x64": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.72.0.tgz", - "integrity": "sha512-yGPhA8sePEBFV9iGcprhyOk3Bz3fZshswMH3DpYIPZFLT1DG5LjiZ0j6AJQpSueaL6bUK0av1K+5+fe+ldy5EQ==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.73.0.tgz", + "integrity": "sha512-IKR4lFnBkYNL9Uqdxa5GMTQLvnLj+3sDwTvh2atHCzah0xeo+1xR5bigRU8uyXlOsA4VpXUn0UAimq4E4RBGmQ==", "cpu": [ "x64" ], @@ -978,9 +978,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.72.0.tgz", - "integrity": "sha512-/g5axuqFMcAtoQrFLR5EJEMDjR5Ea4GuzpdDmMpPWAgrF1DmL4kD1NPNVlpXEOxpFJnD6lPvLKYj1lzdlrfifA==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.73.0.tgz", + "integrity": "sha512-7qnZ4g0ZCO3aZevOOQpZIABYwwXJW1lLDo2elviGdPQ0i11255xKEMFsi97fC1/nauQFseCJfELUy/k2JoOP+g==", "cpu": [ "arm" ], @@ -995,9 +995,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm-musleabihf": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.72.0.tgz", - "integrity": "sha512-InVitdHbS09PM+w+WinIiyX37rC9R3L7lUP9mKy9uKTEDSUFaLjWsLoreRIxKivnv7Ndqc6Trvi+K+b6ZzhiJg==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.73.0.tgz", + "integrity": "sha512-36eBico2j/WPB84gb4FYd/jjqGCKOwU4M+TWLBUIqlnzTozQueLy0joA5BwsSp2OZFVkOlpCwvA3ndPamdiyLw==", "cpu": [ "arm" ], @@ -1012,9 +1012,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-gnu": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.72.0.tgz", - "integrity": "sha512-WKjlyRAxpPjXoqeuwFBim5LscgvY+RNEiZ971C9JlRQZONhJTsXDki/oHFYQE+fzzRpzXh3owZvOdT3kNL2g+g==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.73.0.tgz", + "integrity": "sha512-VZ3cSgCAT18knKo52DcACmAuIoqG6qVEyeZRFbJd0xmYQ8GyYjuBc6IAh6MZHijT6q7p4/HPI+6ZWsCuhdV6iw==", "cpu": [ "arm64" ], @@ -1032,9 +1032,9 @@ } }, "node_modules/@oxfmt/binding-linux-arm64-musl": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.72.0.tgz", - "integrity": "sha512-poafnbsPpJhR+5Mbwpf8CscugTyiRAzjTOxRVn8ra3X2jnURs2xL5Du2xl5g2iW85lICMglpmLf8jDjZEbNgzQ==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.73.0.tgz", + "integrity": "sha512-8YVzH59XSHcqwXNgc5qK851zCqwpmBgOifARXEPPe5/xTsIbHceYoPZAyqfpYV0CfKmzSaEDBgYHFza4rhx+Zw==", "cpu": [ "arm64" ], @@ -1052,9 +1052,9 @@ } }, "node_modules/@oxfmt/binding-linux-ppc64-gnu": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.72.0.tgz", - "integrity": "sha512-zNUi0gKRsO7S3IfPzsTbnm88OedPuX32hmZFWZRWHvWJlAoZRwVbeO6Nb3hng4vDgL7qUKp4TGqzPz1mhsycYg==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.73.0.tgz", + "integrity": "sha512-MqRJnmCys0rwOgpWyEidSA7v/bvOqfNDJhPkQoR9mPVYrvSmMaW2Xhdpl28cbTA+brOM1is62GjIvJplVlUVpw==", "cpu": [ "ppc64" ], @@ -1072,9 +1072,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-gnu": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.72.0.tgz", - "integrity": "sha512-qTY7z/iyF/rWI2HWwWMevXqZW5PZUOofUy2afK7v6rseXnpld3yjgyIk6pCux3DqWQ0lB+f5atvLJNBwzLvFsw==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.73.0.tgz", + "integrity": "sha512-4t2F3SWJSK/O/kRRFnL0elJzn75fJGGu71gs1HtiWcS80SmJOpkHiwwLnTp9suGdns8VHEPxYS0GTcyVwHKWBA==", "cpu": [ "riscv64" ], @@ -1092,9 +1092,9 @@ } }, "node_modules/@oxfmt/binding-linux-riscv64-musl": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.72.0.tgz", - "integrity": "sha512-w18qfo8vEMD6EKEHtzTvjc6jH8yCyXIT1Bn7PFWJd0PpZyzH/VQDx4xvjCh0LGz6GRzqiezbisTdG9AoXtpkZQ==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.73.0.tgz", + "integrity": "sha512-D8b4I8I1kLdJQFwdFXNV+cwh3xWSiNKofjdGUk0nDpc0AHOds8T+poGbP9RWQMvgsvMb9OMgp/aV7ahBR37TbQ==", "cpu": [ "riscv64" ], @@ -1112,9 +1112,9 @@ } }, "node_modules/@oxfmt/binding-linux-s390x-gnu": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.72.0.tgz", - "integrity": "sha512-grW8HwEir+vK7fCcq1ZgL3NHQCfZ1PidiERE9Hbf+24xGys+DoDaoqTht4ccfn0PcBwbViLkwkda/KNpJu2KRQ==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.73.0.tgz", + "integrity": "sha512-QrC1S5VL1+N5rvorB15jH7CPvjVHA7GyUI5oVEd8Bd9m5605RDBQYTxDQ920DuylRoZOh2V7/xXpfCtFUrojUQ==", "cpu": [ "s390x" ], @@ -1132,9 +1132,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-gnu": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.72.0.tgz", - "integrity": "sha512-wQJRQfWBRIn88Pkr449EUViwRayrYUScg7ty+Ihiem21mQ9BUA6S9e/4RAgyNk9lMag0KBouyKskjq61rOC0WQ==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.73.0.tgz", + "integrity": "sha512-dFcUKQPltCEPa+YlkF3zqufn6nJPZdG73LpnjBvZFFsU3laCMssDXSYB99mVaj43FqdEgjpz5TO6gbYXcczd9g==", "cpu": [ "x64" ], @@ -1152,9 +1152,9 @@ } }, "node_modules/@oxfmt/binding-linux-x64-musl": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.72.0.tgz", - "integrity": "sha512-T1B0uQzafxuGPjjaPrZJ497nxoi1BiI65JfsYc56nNpmev3msfb/iaTmH2kQuNFqa8PKxpMlf3GhWrWBvBPORQ==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.73.0.tgz", + "integrity": "sha512-LmQe+nV8e+eUwfPNCxDF+owbsg88toBiR/8rZRgVOeKQP3MaGefXZRvBoc1UG37iWEQ/9JlCXG9Mc4nf4N3agw==", "cpu": [ "x64" ], @@ -1172,9 +1172,9 @@ } }, "node_modules/@oxfmt/binding-openharmony-arm64": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.72.0.tgz", - "integrity": "sha512-OKxxgTurl7+hypVplO8QRAbbQlwEs0j1Y6FZv+ZN2qNbdxQk2muMlzuJNBGTCWwxQ0rkkOD1uK/DW1fvzoUSJA==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.73.0.tgz", + "integrity": "sha512-8weOr1OKknE0G2DbR6ejJUT9AOsoBU6cXlsetmbihHv1K+bK7qP61T6lJxY0k/aAO7GyOJiRGNlL+04r4eH8Xg==", "cpu": [ "arm64" ], @@ -1189,9 +1189,9 @@ } }, "node_modules/@oxfmt/binding-win32-arm64-msvc": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.72.0.tgz", - "integrity": "sha512-L78TKzURqvjuZOCo88ixMbPXf/RP7u31Y0cmjJ/KEmrHmfYhmhEvsDaTYPiyTRne64jUgCbADfY0YeoQk4/Xyw==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.73.0.tgz", + "integrity": "sha512-mZV+QxXYgb8E18gzAFItb937VIsE4dqWdStrD3tRRC52UubOYEuU+e7NaIqUsGdB5YsJqNeuck3Ue/af2r9wyA==", "cpu": [ "arm64" ], @@ -1206,9 +1206,9 @@ } }, "node_modules/@oxfmt/binding-win32-ia32-msvc": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.72.0.tgz", - "integrity": "sha512-gQtFW+Ii8BWgtJTAD17TY/WsdNS5gUfAPov8iI1jeq4r9lRRYImmxPL08UU00/RLaCfBJwh2UgINnDY0iOiZ+A==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.73.0.tgz", + "integrity": "sha512-QJPUsbgUb97ZPPMkFUq6VQq0fLhC4Np19KL9aB/qKVwXnpKE6MIiILXqzhKnQ/UbnEDjKJ7Xv1d6zH4bYPCUdQ==", "cpu": [ "ia32" ], @@ -1223,9 +1223,9 @@ } }, "node_modules/@oxfmt/binding-win32-x64-msvc": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.72.0.tgz", - "integrity": "sha512-uhooIN+DCzWX5uH7mQkSVCsODqsGluGJ4n3ch4+mITtWKpESMDjUJUSDBAVFuYQDwqY2McPDKdKJbM0oZVW/Qw==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.73.0.tgz", + "integrity": "sha512-cGcze2fu+ykIaFtkEvZlkZ3HvnCLk+WISthtq99zWTWn0x13t5L9TxvGdLZMUMvtfYR+ICkiCwKnguVubdcw0w==", "cpu": [ "x64" ], @@ -3401,13 +3401,13 @@ "license": "MIT" }, "node_modules/@rsbuild/core": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-2.2.12.tgz", - "integrity": "sha512-SnJ81Jf9ZGms8hUq0FGxrqlUxdHKV76VK9gxrEdtWLbTic+qRt0SIAsk5NdIr1tXFzqzQ6Fqeffs+K1EUuZEHw==", + "version": "2.2.13", + "resolved": "https://registry.npmjs.org/@rsbuild/core/-/core-2.2.13.tgz", + "integrity": "sha512-UDSDrokgG70tmx+0bz9kuc64SkPQ5A1/Zhqsp8pD0L3Cko/xEnukAbrjouGihUTk55imhC4zx62DnQN/1VJ+GQ==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/core": "~2.2.8", + "@rspack/core": "~2.2.9", "@swc/helpers": "^0.5.23" }, "bin": { @@ -3426,32 +3426,32 @@ } }, "node_modules/@rspack/binding": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.8.tgz", - "integrity": "sha512-c9flkSua3khHnOKBCRk8BkHGOwU9YB7niv+5JfQXiLZIvJmgKsZ7PD8QrFklMhsJT3oVAc6c9GN7/wy1YkACjA==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-2.2.9.tgz", + "integrity": "sha512-Y8wDJoRo8n0KXDGq6J3KGVekkUQcOcUHSppMHoJv8JLbNBEsyaaKiDx4ljNTGEDtTON0CRbMEWbSiLRe+bJxOQ==", "dev": true, "license": "MIT", "optionalDependencies": { - "@rspack/binding-darwin-arm64": "2.2.8", - "@rspack/binding-darwin-x64": "2.2.8", - "@rspack/binding-linux-arm64-gnu": "2.2.8", - "@rspack/binding-linux-arm64-musl": "2.2.8", - "@rspack/binding-linux-ppc64-gnu": "2.2.8", - "@rspack/binding-linux-riscv64-gnu": "2.2.8", - "@rspack/binding-linux-riscv64-musl": "2.2.8", - "@rspack/binding-linux-s390x-gnu": "2.2.8", - "@rspack/binding-linux-x64-gnu": "2.2.8", - "@rspack/binding-linux-x64-musl": "2.2.8", - "@rspack/binding-wasm32-wasi": "2.2.8", - "@rspack/binding-win32-arm64-msvc": "2.2.8", - "@rspack/binding-win32-ia32-msvc": "2.2.8", - "@rspack/binding-win32-x64-msvc": "2.2.8" + "@rspack/binding-darwin-arm64": "2.2.9", + "@rspack/binding-darwin-x64": "2.2.9", + "@rspack/binding-linux-arm64-gnu": "2.2.9", + "@rspack/binding-linux-arm64-musl": "2.2.9", + "@rspack/binding-linux-ppc64-gnu": "2.2.9", + "@rspack/binding-linux-riscv64-gnu": "2.2.9", + "@rspack/binding-linux-riscv64-musl": "2.2.9", + "@rspack/binding-linux-s390x-gnu": "2.2.9", + "@rspack/binding-linux-x64-gnu": "2.2.9", + "@rspack/binding-linux-x64-musl": "2.2.9", + "@rspack/binding-wasm32-wasi": "2.2.9", + "@rspack/binding-win32-arm64-msvc": "2.2.9", + "@rspack/binding-win32-ia32-msvc": "2.2.9", + "@rspack/binding-win32-x64-msvc": "2.2.9" } }, "node_modules/@rspack/binding-darwin-arm64": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.8.tgz", - "integrity": "sha512-d6GuY/k7kJk7SOXmruIz0m+2fIXaLv2SnBHEYsbvBzE7ZO6QXq7fSABWFWNnSnNu+brYHA5Dr/skV81bXgTTCw==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-2.2.9.tgz", + "integrity": "sha512-aIHkk/wngpwgWkwVQFz2AIkmG9WpWtWlkqy4BlYhs5a7l9z0BrB0kXnUb6VSbqZ7Tc3cRepKw7ipkGjKa8KKXw==", "cpu": [ "arm64" ], @@ -3463,9 +3463,9 @@ ] }, "node_modules/@rspack/binding-darwin-x64": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.8.tgz", - "integrity": "sha512-xCVou/jJASjEAjwy1T3hPJcJqA5QZASJfUwHqEk+nA0v44MagwH8tM8lsOvRfhzR7N2+YFac1rfZOUT8uM3awg==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-2.2.9.tgz", + "integrity": "sha512-QtUS7lyOE5oxdMm7RH/Fw176jqwdHiTW2qEsmbdCYzPw3t7QkmI5ohoyiuxOp3czJfaayXP6bVyvm2FqqnWPAw==", "cpu": [ "x64" ], @@ -3477,9 +3477,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.8.tgz", - "integrity": "sha512-Zy/ss6YAQTjOWKDkcWrbKtu+pySltqT22wn68nlrWKygPWLNmMdU5anlsnwRTIuQ3MF0YJRS42ARauVtlqvRQw==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-2.2.9.tgz", + "integrity": "sha512-GMKxtBJAMoqBPqXZVi0QanDkneWwgiKRpTgHW/pbKPY/2XMfZJ98thm4YlATO18XZJ2KET+GfsNfaf1o5Y+aaA==", "cpu": [ "arm64" ], @@ -3494,9 +3494,9 @@ ] }, "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.8.tgz", - "integrity": "sha512-lxgp5O8PhL3St9p82llHoNoeWzp9jltW5S9F00p00XPJZHUIuxbwfLSzn/6Wg86USEmafLoBkyD9CM8rBd3SNQ==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-2.2.9.tgz", + "integrity": "sha512-aW3fcM64R5mY2+ym6Q8okAo/pcVIjAliqxFOc9lf9hCyS7hHaabWo30smeMX3neEjsqw+iyNbzWMuH0G5AugTw==", "cpu": [ "arm64" ], @@ -3511,9 +3511,9 @@ ] }, "node_modules/@rspack/binding-linux-ppc64-gnu": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.8.tgz", - "integrity": "sha512-MY+YqpT02tcDCMgHy+IewQsaz7ql4mbJaAqqMlTIqvQwAUl9dXEP7BL352OgCxm9VRebTldE5lK99A3wVd3zqA==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-2.2.9.tgz", + "integrity": "sha512-dVEiyZdANq+g/qugI64vKnxO+PCVicidu/GQ6sO0QEWGVzdSUbxHztHviSnMwdvRs6OLrN7Lwhaw536hJ/cU8w==", "cpu": [ "ppc64" ], @@ -3528,9 +3528,9 @@ ] }, "node_modules/@rspack/binding-linux-riscv64-gnu": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.8.tgz", - "integrity": "sha512-wmN9OigSGNGCKY+AOYaWI8LJcIi8qvs5KjueBueCKOnTV6MPIEujA75QZH1pehTTYKvdGv7r2EtUXUmWpn7/SQ==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-2.2.9.tgz", + "integrity": "sha512-uBHWmfMm502145le0EUOsBoV6bJ9XA5s3NQLL4smSMoSEuMbNrRhqDJ2+B1u8aXVfjfhxCPyNlMDmgbsdVaO0Q==", "cpu": [ "riscv64" ], @@ -3545,9 +3545,9 @@ ] }, "node_modules/@rspack/binding-linux-riscv64-musl": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.8.tgz", - "integrity": "sha512-ZcQMYR10hLh581zs9MFnFFn0F7wyt5fkDffyukeMHJEoPJrbkfl6cQtsUdpQnZ+mYGYS5KydD1DT9/eMH65jjw==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-2.2.9.tgz", + "integrity": "sha512-MR7e6PP7KcG3jHYWznk17npBBvjUXQg7qQbS+yrAu0R3p/27wLp+aP5m/zk4ev1Iq93ccIBIAGVRGA3v1fSKew==", "cpu": [ "riscv64" ], @@ -3562,9 +3562,9 @@ ] }, "node_modules/@rspack/binding-linux-s390x-gnu": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.8.tgz", - "integrity": "sha512-ahBiE+Ir1FMYvStYicihhSJlS2YRagxtry0jWH8zW287o7C0eiHJ+pteJHHC15T5RJqm0j6w5TuwYe+F9AYxxg==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-2.2.9.tgz", + "integrity": "sha512-Tc9Nuv7XvkrAG79Ps/6F7vT4bxZqiaiQ3Rd3BidKUjVYiwTPJogk1W3gPXp7Lw+AMoN/dY63W22bMJ7Oh0FeZw==", "cpu": [ "s390x" ], @@ -3579,9 +3579,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.8.tgz", - "integrity": "sha512-dncEI515NoPXh3zzWk06Rb3mhSV76myiFKqXiJ8K4fVAe5x/RlweMhvPhHhm7RnIMeBld7BeStzOqj38XFsWGA==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-2.2.9.tgz", + "integrity": "sha512-xQYhQwC8q3mSCzHV+yi76Gt2Lt9BhnmeJnQgXGjuhyvjZWBB9jFNp9Uj6umun7tlMliMRhoqTesqvK4Vo/kkcQ==", "cpu": [ "x64" ], @@ -3596,9 +3596,9 @@ ] }, "node_modules/@rspack/binding-linux-x64-musl": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.8.tgz", - "integrity": "sha512-pfFyU03PjD0GaQG8zOQOHwq51rrJZetXjTGpMmz7iA1hq/f9lChJsDWrC8/7VXeQLwBofLZlOODqe8OM8OBzgA==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-2.2.9.tgz", + "integrity": "sha512-FfEYdFhOd1nZL+U/up8nlbcRTTyWX4ohXUQcApQMYKIZoR1EJ0g/oBhS915+TSray0DchA+NT6yVL1sqWJOFaQ==", "cpu": [ "x64" ], @@ -3613,9 +3613,9 @@ ] }, "node_modules/@rspack/binding-wasm32-wasi": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.8.tgz", - "integrity": "sha512-3mOJuZTrF56jOh/GD9chLMJKbzPZ6Ty2OIML7+lLz0Yk2XS/xWRfLn85Dmnkb/O6UF65x7+p8VPAIZlBtLTclw==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-2.2.9.tgz", + "integrity": "sha512-+29JEBiUi2TMDOGYmT3Tm3JGk3f19+CbjxNEt1bVreR8axuZZj+wOSwB/sx85lKQkL5fuNPh0BhOZ7cdkDxQpA==", "cpu": [ "wasm32" ], @@ -3629,9 +3629,9 @@ } }, "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.8.tgz", - "integrity": "sha512-Cu/RMZT/16s+67xhl6X1pswetL3GLSQl+LnugKRh08Ul21A/tR7vxC4g4aih4u9k5SXCAngxFUt8zAjKnHIBqA==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-2.2.9.tgz", + "integrity": "sha512-x/BDAwQCkR+ANWAAWV+15PFWuae2z9DzL+QcVeb+5taOri+tHa/iQdG8e3GJ60d0amsR+u9BJ2CBtJLK1fQkxw==", "cpu": [ "arm64" ], @@ -3643,9 +3643,9 @@ ] }, "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.8.tgz", - "integrity": "sha512-H/erd6di8OapZhhM0raA/7XduPn9jusfLMeO1XF+AmF9WF3HzHgMjha1j+KwtPgQnaH69w6AhY+G2472VIwQmw==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-2.2.9.tgz", + "integrity": "sha512-i622t0Mom3STiDi8VHLaX62LKwhbT2kg37fKjzv3wQT+9bJvQ/+St6QQzFZg9C7fV53LXqAw8jFi5yIPIjg0Qw==", "cpu": [ "ia32" ], @@ -3657,9 +3657,9 @@ ] }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.8.tgz", - "integrity": "sha512-BziHSUlIQM0MliCqdcHuBXSkQGtPoHQTXJce7fsgnTAzQFgPeog92qTNezYI4IrQ7pQouyiVJ2HPieUbVPRKQQ==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-2.2.9.tgz", + "integrity": "sha512-K98FPCAv0VpDPAz5ZqZ0XI1CmdJu9Kw1FmUDl4rN/zQIt9iqYn+Hgxq6Nk6Zx7g938jiG7ABLwITXSIKGbs6aw==", "cpu": [ "x64" ], @@ -3671,13 +3671,13 @@ ] }, "node_modules/@rspack/core": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.8.tgz", - "integrity": "sha512-JugsVrnbMGNYzMH++7gR9enygpP/lAo9PbVRq3XmJg0ryIvCpST0XJjBcccaSjYaaPamsjrddihmgVLMFp+yXw==", + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-2.2.9.tgz", + "integrity": "sha512-Tp6/ZdM5UrGB3BeLfvh69l1iX03PZ46IgXjKqubVEuJVAhnOjpshooH/YAxcxR0AymcBLKA997Z4v+LV2aXzCw==", "dev": true, "license": "MIT", "dependencies": { - "@rspack/binding": "2.2.8" + "@rspack/binding": "2.2.9" }, "engines": { "node": "^20.19.0 || >=22.12.0" @@ -4545,46 +4545,46 @@ } }, "node_modules/@vitest/browser": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.3.tgz", - "integrity": "sha512-7KHIkVA/gTRxQV9qPa9qLK+g5INZG6iRrlwXSFG5EKsOomW3UzzW7wsdt1Yp5PufzQ43lniuONlb4lUVCC2qSg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-5.0.5.tgz", + "integrity": "sha512-IDMoZX/iZ8rkilw7weaSgN8tJ7iZ9hUv0wYoKXyiyjWjWFwLSWAY707DcVTgxTYOudWC1E3HA9LYn7kVa9a7uQ==", "dev": true, "license": "MIT", "dependencies": { "@blazediff/core": "1.10.0", - "@vitest/mocker": "5.0.3", - "@vitest/ui": "5.0.3", - "@vitest/utils": "5.0.3", - "magic-string": "^1.2.3", + "@vitest/mocker": "5.0.5", + "@vitest/ui": "5.0.5", + "@vitest/utils": "5.0.5", + "magic-string": "^1.4.3", "pngjs": "^7.0.0", "sirv": "^3.0.2", - "tinyrainbow": "^3.1.1", - "ws": "^8.21.3" + "tinyrainbow": "^3.2.0", + "ws": "^8.22.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.3" + "vitest": "5.0.5" } }, "node_modules/@vitest/browser-playwright": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.3.tgz", - "integrity": "sha512-rYBHwIFL/ZtI6dl0rbrAatScXCrvX+TL2BX2AGOigkC1Y6u3rIWw8KMQJJMS4drSa1ksMCmZU2wpgwdE7kqu3g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/browser-playwright/-/browser-playwright-5.0.5.tgz", + "integrity": "sha512-lcdThFUUcMV9mGGV1SUiZXPxfjgW4CssA7o3STxzh8WK0tT2r526kc12tZIBRZfoLMwkhxjLmMXkWXONzdsDQw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/browser": "5.0.3", - "@vitest/mocker": "5.0.3", - "tinyrainbow": "^3.1.1" + "@vitest/browser": "5.0.5", + "@vitest/mocker": "5.0.5", + "tinyrainbow": "^3.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "playwright": "*", - "vitest": "5.0.3" + "vitest": "5.0.5" }, "peerDependenciesMeta": { "playwright": { @@ -4593,22 +4593,22 @@ } }, "node_modules/@vitest/mocker": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.3.tgz", - "integrity": "sha512-T8sWAIbkSyAjkwTcaEc3Iu0o9A27X1/kdXrizhZkGuSKScRQtRzclfAMpOTcGdXCsqxeWlpGy3XjqaW8CpLORg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-5.0.5.tgz", + "integrity": "sha512-xLL3lkDegJZw+MGoGaCCsFayDZthGgpAtr3Vziyfc4p7xH89K7KRPcRBBh/kEYm0Aqkt5DtTmkYpBtRV/FrHZg==", "dev": true, "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.31", - "@vitest/spy": "5.0.3", + "@vitest/spy": "5.0.5", "estree-walker": "^3.0.3", - "magic-string": "^1.2.3" + "magic-string": "^1.4.3" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "msw": "^2.4.9", + "msw": "^2.4.9 || ^3.0.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { @@ -4621,22 +4621,22 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.3.tgz", - "integrity": "sha512-3hr5eV5z2ff0l2Q1vaKQbB4j3M3tElw8stDokEOTqXJB3Es5VrT8gBRIMY59gGuFp8Y61sWlWFK1aNUH5dHDYw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-5.0.5.tgz", + "integrity": "sha512-24sSdIlMA9DVPXnYiB9siwU0bTd887Y9jX3+vabztCSsvHwo7ipvJ/a2L3Rljw8+2rK1f5fCj3h5U9I/Jsqgbw==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^3.1.1" + "tinyrainbow": "^3.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.3.tgz", - "integrity": "sha512-XhFysQTB8AZ+P4gMi+Lpo99vg2AZi0qKpaB9yXQl37+CaMEAPO3iH/wGVnSyL5MPERiLezpqTVtrR6UZH5GCXg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-5.0.5.tgz", + "integrity": "sha512-lwJRExuH417257Q5wv9QYugN9IMJkoxcrKrYxGPQkBzl7wlNpTUxD/5yNX4ESKVUIShKPgkGchYPFMWOOk0wzw==", "dev": true, "license": "MIT", "funding": { @@ -4644,36 +4644,36 @@ } }, "node_modules/@vitest/ui": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.3.tgz", - "integrity": "sha512-9dfvqDBvSbHM6y9YVXxAypkl2z7mrWozK/JFo237qI0cj/3M/kzDKiVZqzi3TE54Ler7Jditud7OMBZCyUvRHA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-5.0.5.tgz", + "integrity": "sha512-dCoGUOdgmCaSB2g+WQ/spPCBkytAWdNUkFSXY4z+eYp2d8JEOY8v0uDRaJTG9qf/kTlTVZ4CuYMYMz/f1HS/qQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "5.0.3", + "@vitest/utils": "5.0.5", "fflate": "^0.8.3", "flatted": "^3.4.4", "pathe": "^2.0.3", "sirv": "^3.0.2", - "tinyrainbow": "^3.1.1" + "tinyrainbow": "^3.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "5.0.3" + "vitest": "5.0.5" } }, "node_modules/@vitest/utils": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.3.tgz", - "integrity": "sha512-77fDTZv8eu1CzlIfgPU2yrl5MXSUaUAOvgdZEeVm3X3WIxUubIX2SforqS6176lT32HCF6uBVMYVqfHxw7o6eg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-5.0.5.tgz", + "integrity": "sha512-/rBu7gzLDQI/SC79Tn98b5DwOgaHU/Gt4I9OVeP3YofzNaYtbImRCOJQmT1S6vOJg9gEIlWC+r3QxKkjuSa1nQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "5.0.3", + "@vitest/pretty-format": "5.0.5", "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.1" + "tinyrainbow": "^3.2.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -6436,9 +6436,9 @@ "license": "ISC" }, "node_modules/happy-dom": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-21.0.1.tgz", - "integrity": "sha512-pRBs/u9fhrncyByOl58DMex0R2uAj6ZPKWIjV5j5yNGZBqLw3P6BTRhlc0DD5b/Ht4/6JYTMuE2LJhUWRC6SGw==", + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-21.0.3.tgz", + "integrity": "sha512-PesNgu5BnIEmAwzKGewB3K1ORFeznFZJ4JrRz89ea1wkHnxskdpzX9sN/+zb4KO6k8oSMhyJSj/cwXAFrYBBNA==", "dev": true, "license": "MIT", "dependencies": { @@ -6903,9 +6903,9 @@ } }, "node_modules/lefthook": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.2.1.tgz", - "integrity": "sha512-aKEwhQzGbLMkZu5vrFYKJzLvLVblWATYITmN7Ak4qRCDPCoFJhmeJZFuYf3nTXuqG9xTBE+J8xaAEPL2tpuWyw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-2.2.2.tgz", + "integrity": "sha512-37fYHAhL12r1twaEV0PA5TwoIT491eTGGYjhhXxlYNMq3DSkiGZBQ++Jfk5maXj0vq52NRauLtMikBKtbNJs3Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6913,22 +6913,37 @@ "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "2.2.1", - "lefthook-darwin-x64": "2.2.1", - "lefthook-freebsd-arm64": "2.2.1", - "lefthook-freebsd-x64": "2.2.1", - "lefthook-linux-arm64": "2.2.1", - "lefthook-linux-x64": "2.2.1", - "lefthook-openbsd-arm64": "2.2.1", - "lefthook-openbsd-x64": "2.2.1", - "lefthook-windows-arm64": "2.2.1", - "lefthook-windows-x64": "2.2.1" - } + "lefthook-android-arm64": "2.2.2", + "lefthook-darwin-arm64": "2.2.2", + "lefthook-darwin-x64": "2.2.2", + "lefthook-freebsd-arm64": "2.2.2", + "lefthook-freebsd-x64": "2.2.2", + "lefthook-linux-arm64": "2.2.2", + "lefthook-linux-x64": "2.2.2", + "lefthook-openbsd-arm64": "2.2.2", + "lefthook-openbsd-x64": "2.2.2", + "lefthook-windows-arm64": "2.2.2", + "lefthook-windows-x64": "2.2.2" + } + }, + "node_modules/lefthook-android-arm64": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-android-arm64/-/lefthook-android-arm64-2.2.2.tgz", + "integrity": "sha512-wb9rQQFLX7u1dJLxvMrq9VUfMYi5kxM7tJQ6Y4mWEOwaU+SmIm2wjoT/nromKq27Y8fh2Qd7FgCD3G1wfW8CnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, "node_modules/lefthook-darwin-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.2.1.tgz", - "integrity": "sha512-SyuDBT5HqNQfi607vMHrYJu45bRN7JoIFdyxLjEPVe34UnZJCesmeYBODEYTyCfRZjPOaTbton4Padu+qvqfCQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-2.2.2.tgz", + "integrity": "sha512-6V8D3bLnD/60Xhqn0o2EQD6H3Fe/U9LGkt4WF1O/3eBHbux+5ZJqoH0hfrC+Bi9Dy1Ve1AWxiAY7U2asYl8qVA==", "cpu": [ "arm64" ], @@ -6940,9 +6955,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.2.1.tgz", - "integrity": "sha512-qkIdM89T3OxpLp9rssPSdRQ7QKkX0l07xWxxOaZfECn5iB2xVXSD9FQSjYUMNGXtJJWOGqdKqBngGTB/ShDZtQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-2.2.2.tgz", + "integrity": "sha512-fH/kArZ9ZZ65wCFtvBMgGcq25qwQpkQ5jp93ba+8wpjgxxzjczYGluwHvM/NQDJWLOFXuKXW0yFs76SramQkyQ==", "cpu": [ "x64" ], @@ -6954,9 +6969,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.2.1.tgz", - "integrity": "sha512-0jdr/9Q5cGuazrEVquv29AOD77aPc2jAmFU4EtqVVg3PhMJjAyt7bQeA9qdwHhaHhLnaeUZwMwo3IleVm+D4wg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-2.2.2.tgz", + "integrity": "sha512-MCRsU01ju989QQffOfS3gCeFfyVDXs5B/FzR65fmrNvqcxb98fldvfzzoAbnK2q6SBJlRT3QT1tNEMCxddCwlA==", "cpu": [ "arm64" ], @@ -6968,9 +6983,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.2.1.tgz", - "integrity": "sha512-JFKyNZ9qQp9NsuFyAg/CJIBurIHX3AUayFXxuoDMATWAIhhlyK0YMtpWgEFIl1M2iGLBLQ3TiLoCCRnbwndNDg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-2.2.2.tgz", + "integrity": "sha512-LkKuJU0S2oLimeoHwPTy1TLWB6GcN0t5lLxiXNlsBKUkr6R47QRcvPMZMoXmu3IetQtd+WliXMLE8qTwi2fqBg==", "cpu": [ "x64" ], @@ -6982,9 +6997,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.2.1.tgz", - "integrity": "sha512-na8Ezm7pK44+WsQqj9tES7v8VseM1MrNeNJhUnM8eINV22KYptWam8evfjZxY3NYxOTwn6f/Zpe/BBvcLKMaTQ==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-2.2.2.tgz", + "integrity": "sha512-d+HFtS2DEKaOnD7vRU0tUz8pNgHwsUYmQ22+1dyXpOrXGyzNXR0AqX5KsIRF36JGhVvO5X5Anw5QYgR3mxVSuA==", "cpu": [ "arm64" ], @@ -6996,9 +7011,9 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.2.1.tgz", - "integrity": "sha512-wl7CR5uNkOiZ38SkW4l9O6wf/Nllbkw90ZZonXRFkbgrnPjLMhZGUt9ucewsPwBQ/ckU1t08JuBHeOywB/CFow==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-2.2.2.tgz", + "integrity": "sha512-N/OlQyAhcU6RAXjrwFxLsh70sn96rBoi+XkuLJ8CVBkk9Ci3VDXQayDZTNz5B1xML8RwoMcV8Wblniy1xFOmSA==", "cpu": [ "x64" ], @@ -7010,9 +7025,9 @@ ] }, "node_modules/lefthook-openbsd-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.2.1.tgz", - "integrity": "sha512-UFwL+AGSqkhQ15kuKl5FMRx/UqbcfcQbGFg5ggYzhT7qBOsTu3a9POXRxt3hsalBeMgkDWsv3IaPlj51YGpCAg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-2.2.2.tgz", + "integrity": "sha512-6G/gKXcpIwC+XcODg7ELZYP/hIrVIHQxhy2GoRdVyecmpGMFj+BZo3iqcUmeWusQMuL+UdNexbkrUaeJalIkNw==", "cpu": [ "arm64" ], @@ -7024,9 +7039,9 @@ ] }, "node_modules/lefthook-openbsd-x64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.2.1.tgz", - "integrity": "sha512-IMKEuxJLo91C1yjhJ42EadfXUb3ECMkvTKpSt17kwaiyZsvvZ8LGdrXwQZiLNJt2M5ECuTVCQUvDimM6mGraOw==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-2.2.2.tgz", + "integrity": "sha512-eMJGi3/tqKEqu7XCZlqwQWRtK5JlL/9diaqqgRlEdlRD7GxwzHZN21z6awbITum9emea3lALvXFe6V8odQLGOA==", "cpu": [ "x64" ], @@ -7038,9 +7053,9 @@ ] }, "node_modules/lefthook-windows-arm64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.2.1.tgz", - "integrity": "sha512-Pi8vOvObjg8HJDl8d96s7jsI6TN33klpqv6tXSXpoKEeoAwEh5Y9NawO6bzoOpLfAxf2SfMBcuaBzFQ5zE2gjA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-2.2.2.tgz", + "integrity": "sha512-4P1EaQb5xG1zhYD1RLJ6TEGdFkmHkB+Slqx6yRDPKuBDNxMiD0+kTAAdUY2E8xPuRR35xHpVPR+b3/HtzPrjQQ==", "cpu": [ "arm64" ], @@ -7052,9 +7067,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.2.1.tgz", - "integrity": "sha512-7FtuPrc1XzxIFLAbzneOF1hr9r/vGi2lcMpX14QG9d/mnLhwu4EyNBh48JNEqsQqrOB9QKavsNqxVl1e8zcukA==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-2.2.2.tgz", + "integrity": "sha512-9Ck4zancQilBfXT3ZeRipm7Lcq4RQfxyMpy8SAVINw0t/BrbjsT25V46ZuziERcwdajnE4myfMzC33GoCBwr7g==", "cpu": [ "x64" ], @@ -7525,9 +7540,9 @@ } }, "node_modules/minimizer-webpack-plugin": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.10.0.tgz", - "integrity": "sha512-2//60T4S0X1Ug/dqLDOgDaGlZsN1Lv8hf8oB0NOV/KIHSaXlPwXBBIbim79dE2Z7NEs52ES8YHoSv6Lmsk+XNg==", + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.13.0.tgz", + "integrity": "sha512-OO1NF2zHj6sf4CNv2AsUWYcS8WEwkVKQDXxxKzlOxx1Xl+WlqYtVC+oNlGNwGkLAOnpj277BSHypWwRtd9w4JQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7765,9 +7780,9 @@ } }, "node_modules/obug": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.2.1.tgz", - "integrity": "sha512-XrsrhT5sybtKI6wakr2SPOlGZWWYbUXZ7a0jT8/QOeAPau+1X/bSegNe5YR75oJmEZQbKningirmGOEJCIk61Q==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", + "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", "dev": true, "funding": [ "https://github.com/sponsors/sxzz", @@ -7840,9 +7855,9 @@ "license": "MIT" }, "node_modules/oxfmt": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.72.0.tgz", - "integrity": "sha512-16OQeL0uhPZbfmT9S9WWM0Nv9+BmVi8Ra1uTYaSKj/qSCs6FB30KOhz9JoNYw6thT+K5bVxsk/tSEOu497i34g==", + "version": "0.73.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.73.0.tgz", + "integrity": "sha512-Ke4xbpuzqIBP4bkd48q815RhqWNJqOBzxVA9199M4qcF0y0LtpUv7UTg1dJ5ea6jw0RBUDZvX3qOUMNmmxfxbw==", "dev": true, "license": "MIT", "dependencies": { @@ -7858,31 +7873,35 @@ "url": "https://github.com/sponsors/oxc-project" }, "optionalDependencies": { - "@oxfmt/binding-android-arm-eabi": "0.72.0", - "@oxfmt/binding-android-arm64": "0.72.0", - "@oxfmt/binding-darwin-arm64": "0.72.0", - "@oxfmt/binding-darwin-x64": "0.72.0", - "@oxfmt/binding-freebsd-x64": "0.72.0", - "@oxfmt/binding-linux-arm-gnueabihf": "0.72.0", - "@oxfmt/binding-linux-arm-musleabihf": "0.72.0", - "@oxfmt/binding-linux-arm64-gnu": "0.72.0", - "@oxfmt/binding-linux-arm64-musl": "0.72.0", - "@oxfmt/binding-linux-ppc64-gnu": "0.72.0", - "@oxfmt/binding-linux-riscv64-gnu": "0.72.0", - "@oxfmt/binding-linux-riscv64-musl": "0.72.0", - "@oxfmt/binding-linux-s390x-gnu": "0.72.0", - "@oxfmt/binding-linux-x64-gnu": "0.72.0", - "@oxfmt/binding-linux-x64-musl": "0.72.0", - "@oxfmt/binding-openharmony-arm64": "0.72.0", - "@oxfmt/binding-win32-arm64-msvc": "0.72.0", - "@oxfmt/binding-win32-ia32-msvc": "0.72.0", - "@oxfmt/binding-win32-x64-msvc": "0.72.0" + "@oxfmt/binding-android-arm-eabi": "0.73.0", + "@oxfmt/binding-android-arm64": "0.73.0", + "@oxfmt/binding-darwin-arm64": "0.73.0", + "@oxfmt/binding-darwin-x64": "0.73.0", + "@oxfmt/binding-freebsd-x64": "0.73.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.73.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.73.0", + "@oxfmt/binding-linux-arm64-gnu": "0.73.0", + "@oxfmt/binding-linux-arm64-musl": "0.73.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.73.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.73.0", + "@oxfmt/binding-linux-riscv64-musl": "0.73.0", + "@oxfmt/binding-linux-s390x-gnu": "0.73.0", + "@oxfmt/binding-linux-x64-gnu": "0.73.0", + "@oxfmt/binding-linux-x64-musl": "0.73.0", + "@oxfmt/binding-openharmony-arm64": "0.73.0", + "@oxfmt/binding-win32-arm64-msvc": "0.73.0", + "@oxfmt/binding-win32-ia32-msvc": "0.73.0", + "@oxfmt/binding-win32-x64-msvc": "0.73.0" }, "peerDependencies": { + "@astrojs/compiler-rs": "^0.4.0 || ^0.5.0", "svelte": "^5.0.0", "vite-plus": "*" }, "peerDependenciesMeta": { + "@astrojs/compiler-rs": { + "optional": true + }, "svelte": { "optional": true }, @@ -8094,13 +8113,13 @@ } }, "node_modules/playwright": { - "version": "1.64.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.0.tgz", - "integrity": "sha512-kVzTnYFYEyQ9RGzBjNCd2+yEqWmVbxl3AHPynv3qQ6JTjv4a+kwRcnqQwIpuP3NnrnIrE/Q6wWAIAvMfIE2/Yg==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz", + "integrity": "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.64.0" + "playwright-core": "1.64.1" }, "bin": { "playwright": "cli.js" @@ -8110,9 +8129,9 @@ } }, "node_modules/playwright-core": { - "version": "1.64.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0.tgz", - "integrity": "sha512-T9r+MZkTECl2+oUcZ26YgZzTrYidTsIhYYkJix+6iDOymOb1FB2RLLSOxRGnZGv5DStt+aduIVbt+E8WygXYpg==", + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz", + "integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8507,20 +8526,6 @@ } } }, - "node_modules/rolldown-plugin-dts/node_modules/obug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", - "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT", - "engines": { - "node": ">=12.20.0" - } - }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -9299,20 +9304,6 @@ } } }, - "node_modules/tsdown/node_modules/obug": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/obug/-/obug-3.0.0.tgz", - "integrity": "sha512-5vvB5+W7ePv+p3uqxi+RcW1XAzLW0/hxt3/4X4Lc4qHudzOhmBiBwOY6DRob4WnanAEGvNcLjF+KNOufrUoEQw==", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT", - "engines": { - "node": ">=12.20.0" - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", @@ -9612,23 +9603,23 @@ } }, "node_modules/vitest": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.3.tgz", - "integrity": "sha512-xMw97S3rjdtj5dkVat7jCsqWBpvchs3RlpQctUqwJD0KkERk40vz2fJ77lDwW/Vzh/pk18eItYAzkodhSes3jQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-5.0.5.tgz", + "integrity": "sha512-cPODOMF8YnkiiYtDdHo6n4wWmBrOBBbOIYH2d33M4l3CdNn72h+qMmO6uXffUN6A5AZFXNND/d+krS9mgkXRfg==", "dev": true, "license": "MIT", "dependencies": { "@types/chai": "^5.2.2", - "@vitest/mocker": "5.0.3", - "chai": "^6.2.2", + "@vitest/mocker": "5.0.5", + "chai": "^6.3.0", "es-module-lexer": "^2.3.2", "expect-type": "^1.4.0", - "magic-string": "^1.2.3", - "obug": "^2.1.4", + "magic-string": "^1.4.3", + "obug": "^3.0.0", "picomatch": "^4.0.7", - "std-env": "^4.2.0", - "tinybench": "^6.1.4", - "tinyexec": "^1.3.0", + "std-env": "^4.3.0", + "tinybench": "^6.2.2", + "tinyexec": "^1.3.1", "tinyglobby": "^0.2.17", "why-is-node-running": "3.2.1" }, @@ -9645,12 +9636,12 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "5.0.3", - "@vitest/browser-preview": "5.0.3", + "@vitest/browser-playwright": "5.0.5", + "@vitest/browser-preview": "5.0.5", "@vitest/browser-webdriverio": "^5.0.0-beta.5 || >=5.0.0", - "@vitest/coverage-istanbul": "5.0.3", - "@vitest/coverage-v8": "5.0.3", - "@vitest/ui": "5.0.3", + "@vitest/coverage-istanbul": "5.0.5", + "@vitest/coverage-v8": "5.0.5", + "@vitest/ui": "5.0.5", "happy-dom": "*", "jsdom": "*", "vite": "^6.4.0 || ^7.0.0 || ^8.0.0" @@ -9695,9 +9686,9 @@ } }, "node_modules/watchpack": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", - "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.6.1.tgz", + "integrity": "sha512-8mk/LnXpQAiM2xKZhTkxikwly5GhL2Z+DWiLTkMa/E1Nfv9zURhHgiFyWvM4BWqW+LjIgL2AIS7JntEUx6v3vQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9715,9 +9706,9 @@ "license": "MIT" }, "node_modules/webpack": { - "version": "5.111.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.111.1.tgz", - "integrity": "sha512-cNypaz0RP+S4cvQVi1M/3bRUkvNP0xZpL0TjFx+c6jg64VbxD+2weWDgY9UnjRI6dhZgtaj8DU76GGFcJ79xPQ==", + "version": "5.112.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.112.0.tgz", + "integrity": "sha512-NIBpsRuCll036haDDt/CfcTDfsWNR9Z782nMRMI9D377BsGcYzZDTNU5TyzhCJzPIcihAxMBaMAhq2WSaDrH8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9728,16 +9719,16 @@ "@webassemblyjs/wasm-parser": "^1.14.1", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.25.0", + "enhanced-resolve": "^5.26.0", "es-module-lexer": "^2.1.0", "events": "^3.2.0", "graceful-fs": "^4.2.11", "mime-db": "^1.54.0", - "minimizer-webpack-plugin": "^5.7.0", + "minimizer-webpack-plugin": "^5.13.0", "schema-utils": "^4.5.0", "tapable": "^2.3.0", - "watchpack": "^2.5.2", - "webpack-sources": "^3.5.1" + "watchpack": "^2.6.1", + "webpack-sources": "^3.6.0" }, "bin": { "webpack": "bin/webpack.js" @@ -9934,9 +9925,9 @@ } }, "node_modules/webpack-sources": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", - "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.6.0.tgz", + "integrity": "sha512-EIMmPVvNI0CYXyRPp34F2Qk7W37/BZVZIofS6LAUnrNjCVahS+hO4mxwFJDjQjODTGZDtVzLYoN2+1dYkhk9qA==", "dev": true, "license": "MIT", "engines": { @@ -9997,9 +9988,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.3.tgz", - "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", "dev": true, "license": "MIT", "engines": { diff --git a/package.json b/package.json index 3132abe..cc2345b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sqlite.org/sqlite-wasm", - "version": "3.54.0-build1", + "version": "3.54.1-build1", "description": "SQLite Wasm conveniently wrapped as an ES Module.", "type": "module", "repository": { @@ -76,16 +76,16 @@ }, "devDependencies": { "@types/node": "^26.6.5", - "@vitest/browser": "^5.0.3", - "@vitest/browser-playwright": "^5.0.3", - "happy-dom": "21.0.1", - "lefthook": "2.2.1", - "oxfmt": "^0.72.0", - "playwright": "^1.64.0", + "@vitest/browser": "^5.0.5", + "@vitest/browser-playwright": "^5.0.5", + "happy-dom": "21.0.3", + "lefthook": "2.2.2", + "oxfmt": "^0.73.0", + "playwright": "^1.64.1", "publint": "^0.3.25", "tsdown": "^0.23.1", "typescript": "7.0.2", - "vitest": "^5.0.3" + "vitest": "^5.0.5" }, "packageManager": "npm@12.0.1", "allowScripts": { From 53965228b5bc12059f4110355a8187f3cb04b0e6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 17 Oct 2026 08:40:38 +0200 Subject: [PATCH 3/5] chore: update SQLite Wasm binaries from 57520227c95396ce39ba6ecaac8d475b78dd3964 (57520227c95396ce39ba6ecaac8d475b78dd3964) (#26) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- src/bin/sqlite3-bundler-friendly.mjs | 785 +++++++--- src/bin/sqlite3-node.mjs | 2171 +++----------------------- src/bin/sqlite3-opfs-async-proxy.js | 2 +- src/bin/sqlite3.mjs | 796 +++++++--- src/bin/sqlite3.wasm | Bin 868907 -> 879084 bytes 5 files changed, 1393 insertions(+), 2361 deletions(-) diff --git a/src/bin/sqlite3-bundler-friendly.mjs b/src/bin/sqlite3-bundler-friendly.mjs index e026859..c55b1ed 100644 --- a/src/bin/sqlite3-bundler-friendly.mjs +++ b/src/bin/sqlite3-bundler-friendly.mjs @@ -27,9 +27,9 @@ /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** ** Emscripten SDK: 5.0.5 */ @@ -92,7 +92,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR /** This file was preprocessed using: - ./c-pp -o ./bld/pre-js.bundler.js -Dtarget:es6-module -Dtarget:es6-bundler-friendly -DModule.instantiateWasm api/pre-js.c-pp.js + ./c-pp -o ./bld/pre-js.bundler.js -Dtarget:es6-module -Dtarget:es6-bundler-friendly -Dsqlite3.wasm.base64=./jswasm/sqlite3.wasm -DModule.instantiateWasm api/pre-js.c-pp.js */ /* END FILE: api/pre-js.js. */ // end include: ./bld/pre-js.bundler.js @@ -4008,11 +4008,11 @@ var _sqlite3_status64, _sqlite3_db_status, _sqlite3_vfs_find, _sqlite3_initialize, - _sqlite3_malloc, - _sqlite3_free, _sqlite3_vfs_register, _sqlite3_vfs_unregister, + _sqlite3_malloc, _sqlite3_malloc64, + _sqlite3_free, _sqlite3_realloc, _sqlite3_realloc64, _sqlite3_value_text, @@ -4035,6 +4035,11 @@ var _sqlite3_status64, _sqlite3_column_type, _sqlite3_errmsg, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4272,11 +4277,11 @@ function assignWasmExports(wasmExports) { _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; - _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; - _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; @@ -4299,6 +4304,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4731,9 +4741,9 @@ Module.runSQLite3PostLoadInit = async function( /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** ** Emscripten SDK: 5.0.5 */ @@ -5510,7 +5520,11 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5530,7 +5544,8 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -6978,7 +6993,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.53.4", "libVersionNumber": 3053004, "sourceId": "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","downloadVersion": 3530400,"scm":{ "sha3-256": "bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","branch": "branch-3.53","tags": "release version-3.53.4","datetime": "2026-07-24T19:02:57.525Z"}}; + sqlite3.version = {"libVersion": "3.54.1", "libVersionNumber": 3054001, "sourceId": "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","downloadVersion": 3540100,"scm":{ "sha3-256": "555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","branch": "branch-3.54","tags": "release version-3.54.1","datetime": "2026-10-16T14:45:20.546Z"}}; }); /** 2022-07-08 @@ -9550,7 +9565,7 @@ globalThis.WhWasmUtilInstaller ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js - by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; globalThis.Jaccwabyt = @@ -9862,8 +9877,8 @@ function StructBinderFactory(config){ and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ const ii = getInstanceHandle(obj, false); - if( !ii ) return; - rmInstanceHandle(obj); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; if( !m && !(m = ii.p) ){ console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); return; @@ -9890,6 +9905,7 @@ function StructBinderFactory(config){ m,'threw. NOT propagating it.',e); } } + rmInstanceHandle(obj); delete obj.ondispose; if(ctor.debugFlags.__flags.dealloc){ log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), @@ -10815,6 +10831,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Please keep these sorted by function name! ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written bindings to permit more flexible inputs. */ ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], @@ -11522,6 +11543,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -11573,6 +11595,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -12726,8 +12749,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __doesNotOwnHandle = new Set(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -13209,7 +13232,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -13225,6 +13249,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); if( !__doesNotOwnHandle.delete(this) ){ capi.sqlite3_close_v2(pDb); } - if(this.onclose && (this.onclose.after instanceof Function)){ + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -13884,8 +13959,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -14309,6 +14387,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -14325,6 +14408,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -14542,14 +14651,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -14561,7 +14672,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -14576,69 +14707,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rc cache.storagePool[store.jzClass] = @@ -16641,6 +16745,35 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const pFileHandles = new Map(); + /** + Map of filename to lock objects with this structure: + + {.lockType: int, .nShared: int} + + Used by xLock(), xUnlock(), and xCheckReservedLock(). Modelled + after the "same-process, same-file, different-db-handle" locking + in os_unix.c. + */ + const mapPathToLocks = new Map(); + + /** + Main xUnlock() impl for kvvfs, also used by xClose(). Expects an + xOpen()-created file handle object and the second argument to + xUnlock(). It returns void. + */ + const unlockFile = function(fh, lockType){ + if(fh.lockType<=lockType) return; + const lk = mapPathToLocks.get(fh.jzClass); + if(fh.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + mapPathToLocks.delete(fh.jzClass); + } + fh.lockType = lockType; + }; + /** Original WASM functions for methods we partially override. */ @@ -16725,29 +16858,25 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ else if(1===nBuf){ wasm.poke(zBuf, 0); return nV; - } - if( nBuf+1 nV + 1 ){ + nBuf = nV + 1; } if( 0 ){ debug("xRcrdRead", nBuf, zClass, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey), nV, jV, store); } - const zV = cache.memBuffer(0); - //if( !zV ) return -3 /*OOM*/; + const nCopy = nV0, }/*.vfs*/, @@ -16965,6 +17108,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ kvvfs?.log?.xClose && debug("xClose", pFile, h); if( h ){ pFileHandles.delete(pFile); + unlockFile(h, capi.SQLITE_LOCK_NONE); const s = h.store;//storageForZClass(h.jzClass); s.files = s.files.filter((v)=>v!==h.file); if( --s.refc<=0 && s.deleteAtRefc0 ){ @@ -17043,6 +17187,82 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } }, + xLock: function(pFile, iLock){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + if( capi.SQLITE_LOCK_NONE!==iLock ){ + /* Tells the impl to re-read its size. */ + originalMethods.ioDb.xLock(pFile, iLock); + } + /** + This impl is based off of the one in the opfs-sahpool VFS + impl which, in turn, is based off of the impl in + os_unix.c. + */ + if(h.lockType>=iLock) return 0; + let lk = mapPathToLocks.get(h.jzClass); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + mapPathToLocks.set(h.jzClass, lk); + } + if(h.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || iLock>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(iLock===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = iLock; + }else if(iLock===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(h.lockType===capi.SQLITE_LOCK_RESERVED){ + h.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = iLock; + } + h.lockType = iLock; + return 0; + }catch(e){ + error("xLock", e); + return cache.setError(e); + } + }, + + xUnlock: function(pFile, iLock){ + cache.popError(); + try{ + if( capi.SQLITE_LOCK_NONE===iLock ){ + /* Tells the impl to re-read its size on the next op. */ + originalMethods.ioDb.xUnlock(pFile, iLock); + } + const h = pFileHandles.get(pFile); + unlockFile(h, iLock); + return 0; + }catch(e){ + error("xUnlock", e); + return cache.setError(e); + } + }, + + xCheckReservedLock: function(pFile, pOut){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + const lk = mapPathToLocks.get(h.jzClass); + wasm.poke32(pOut, + (!!lk && lk.lockType>capi.SQLITE_LOCK_SHARED) + ? 1 : 0) + return 0; + }catch(e){ + error("xCheckReservedLock", e); + return cache.setError(e); + } + }, + }/*.ioDb*/, @@ -17051,6 +17271,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ are copied as-is from the ioDb objects. Others are specific to journal files. */ xClose: true, + xLock: true, + xUnlock: true, + xCheckReservedLock: true, }/*.ioJrnl*/ }/*methodOverrides*/; @@ -18280,11 +18503,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way, the resolved value of the returned Promise is the number of bytes written to the target file. - It very specifically requires the input to be an SQLite3 - database and throws if that's not the case. It does so in - order to prevent this function from taking on a larger scope - than it is specifically intended to. i.e. we do not want it to - become a convenience for importing arbitrary files into OPFS. + It very specifically requires the input to be an SQLite3 database + and throws if that's not the case. It does so in order to + prevent this function from taking on a larger scope than it is + specifically intended to. i.e. we do not want it to become a + convenience for importing arbitrary files into OPFS. Caveat: as + of 3.54 in SEE builds, the "is this a db?" check is necessarily + lax to account for SEE-encrypted databases not having a legible + header. In such builds, only the db size is relevant for the + check. This routine rewrites the database header bytes in the output file (not the input array) to force disabling of WAL mode. @@ -18766,6 +18993,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ so would need to pass it to the async proxy. That would make it inordinately expensive considering that it's just a hint. + + See: forum:a2f573b00cda1372 */ wasm.poke(pOut, 0, 'i32'); return 0; @@ -19171,7 +19400,6 @@ const initS11n = function(){ const options = opfsUtil.options; const W = opfsVfs.worker = (()=>{ - /* _Sigh_... */ /* Discussion explaining this formulation: https://github.com/sqlite/sqlite-wasm/pull/159 */ const url = new URL('sqlite3-opfs-async-proxy.js', import.meta.url); @@ -19210,7 +19438,7 @@ const initS11n = function(){ //| capi.SQLITE_OPEN_DELETEONCLOSE | capi.SQLITE_OPEN_MAIN_DB; const pOut = wasm.scopedAlloc(8); - const dbFile = "/sanity/check/file"+randomFilename(8); + const dbFile = "/sanity/check/file"+opfsUtil.randomFilename(8); const zDbFile = wasm.scopedAllocCString(dbFile); let rc; state.s11n.serialize("This is ä string."); @@ -19299,7 +19527,7 @@ const initS11n = function(){ state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); opfsVfs.initS11n(); - delete opfsVfs.initS11n; + opfsVfs.initS11n = null; if(options.sanityChecks){ warn("Running sanity checks because of opfs-sanity-check URL arg..."); sanityCheck(); @@ -19565,6 +19793,9 @@ globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ - Also because of that, it does not require the SharedArrayBuffer, so can function without the COOP/COEP HTTP response headers. + - Also because of that, this one is much faster and the performance + gap increases as the job sizes increase. + - It can hypothetically support Safari 16.4+, whereas the "opfs" VFS requires v17 due to a subworker/storage bug in 16.x which makes it incompatible with that VFS. @@ -19669,7 +19900,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Logging verbosity 3+ == everything, 2 == warnings+errors, 1 == errors only. */ verbosity: 2, - forceReinitIfPreviouslyFailed: false + forceReinitIfPreviouslyFailed: false, + preserveOnInitFailure: false }); /** Logging routines, from most to least serious. */ @@ -19706,7 +19938,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xCheckReservedLock'); pool.storeErr(); - wasm.poke32(pOut, 1); + const file = pool.getOFileForS3File(pFile); + wasm.poke32( + pOut, + pool.hasReservedLock(file.path) ? 1 : 0 + /* As forum:b2fbb61642 elaborates on why we cannot simply + check file.lockType>=capi.SQLITE_LOCK_RESERVED + here. Summary: xOpen() has long allowed multiple handles to + the same filename and we need to check if any of them have + a lock to avoid a specific corruption case which that forum + thread demonstrates. */ + ); return 0; }, xClose: function(pFile){ @@ -19716,6 +19958,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(file) { try{ pool.log(`xClose ${file.path}`); + pool.unlockFile(file, capi.SQLITE_LOCK_NONE); pool.mapS3FileToOFile(pFile, false); file.sah.flush(); if(file.flags & capi.SQLITE_OPEN_DELETEONCLOSE){ @@ -19747,8 +19990,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xLock ${lockType}`); pool.storeErr(); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; - return 0; + return pool.lockFile(file, lockType); }, xRead: function(pFile,pDest,n,offset64){ const pool = getPoolForPFile(pFile); @@ -19802,7 +20044,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xUnlock'); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; + pool.unlockFile(file, lockType); return 0; }, xWrite: function(pFile,pSrc,n,offset64){ @@ -19903,6 +20145,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ? pool.getPath(zName) : getRandomName(); let sah = pool.getSAHForPath(path); + if(sah && (flags & capi.SQLITE_OPEN_CREATE) + && (flags & capi.SQLITE_OPEN_EXCLUSIVE)){ + toss('file already exists:', path); + } if(!sah && (flags & capi.SQLITE_OPEN_CREATE)) { // File not found so try to create it. if(pool.getFileCount() < pool.getCapacity()) { @@ -19969,7 +20215,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Inherit certain VFS members from the default VFS, if available. */ opfsVfs.$xRandomness = dVfs.$xRandomness; - opfsVfs.$xSleep = dVfs.$xSleep; dVfs.dispose(); } if(!opfsVfs.$xRandomness && !vfsMethods.xRandomness){ @@ -19982,9 +20227,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return i; }; } - if(!opfsVfs.$xSleep && !vfsMethods.xSleep){ - vfsMethods.xSleep = (pVfs,ms)=>0; - } + /** + This VFS's xSleep() must be a no-op. In this environment, + only db handles within the same thread can ever come into + contention, and that contention cannot be resolved if + one of the handles sleeps in that same thread. + See also: forum:3f0794c5d8 + */ + vfsMethods.xSleep = (pVfs,ms)=>0; sqlite3.vfs.installVfs({ vfs: {struct: opfsVfs, methods: vfsMethods} }); @@ -19992,8 +20242,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; /** - Class for managing OPFS-related state for the - OPFS SharedAccessHandle Pool sqlite3_vfs. + Class for managing OPFS-related state for the OPFS + SharedAccessHandle Pool sqlite3_vfs. This class is + internal-use-only, never exposed to the client. OpfsSAHPoolUtil + is the public-facing part. */ class OpfsSAHPool { /* OPFS dir in which VFS metadata is stored. */ @@ -20015,7 +20267,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Set of currently-unused SAHs. */ #availableSAH = new Set(); /* Maps (sqlite3_file*) to xOpen's file objects. */ - #mapS3FileToOFile_ = new Map(); + #mapS3FileToOFile = new Map(); + /* Maps client-side file names to the lock state of the files + opened via this pool: {nShared, lockType}, modelled after + os_unix.c:unixInodeInfo. */ + #mapPathToLock = new Map(); /* Maps SAH to an abstract File Object which contains various metadata about that handle. */ @@ -20031,6 +20287,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Logging verbosity. See optionDefaults.verbosity. #verbosity; + /** + Options are documented in installOpfsSAHPoolVfs(). + */ constructor(options = Object.create(null)){ this.#verbosity = options.verbosity ?? optionDefaults.verbosity; this.vfsName = options.name || optionDefaults.name; @@ -20057,6 +20316,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ warn(...args){this.#logImpl(1, ...args)}; error(...args){this.#logImpl(0, ...args)}; + /* Design note: at the time this method was added, the developer + was unaware that getter syntax was an option: get vfs(){...} */ getVfs(){return this.#cVfs} /* Current pool capacity. */ @@ -20091,22 +20352,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } /** - Reduce capacity by n, but can only reduce up to the limit - of currently-available SAHs. Returns a Promise which resolves - to the number of slots really removed. + Reduce capacity by n, but can only reduce up to the limit of + currently-available SAHs. Returns a Promise which resolves to + the number of slots really removed. Throws if removal of an + OPFS filesystem entry fails for any reason, in which case the + VFS itself is left in a well-defined state, possibly partially + reduced in capacity compared to before this call, but the file + which was unable to be removed is in an undefined state. It may + be orphaned and/or later recycled. + + As of 3.54, throws if n is an invalid value. Prior to that + an invalid value could cause it to remove all entries. */ async reduceCapacity(n){ + if(!Number.isSafeInteger(n) || n < 0){ + toss('Invalid capacity reduction:', n); + } let nRm = 0; for(const ah of Array.from(this.#availableSAH)){ if(nRm === n || this.getFileCount() === this.getCapacity()){ break; } const name = this.#mapSAHToName.get(ah); - //this.#unmapFileObject(ah); ah.close(); - await this.#dhOpaque.removeEntry(name); this.#mapSAHToName.delete(ah); this.#availableSAH.delete(ah); + await this.#dhOpaque.removeEntry(name); ++nRm; } return nRm; @@ -20122,6 +20393,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ this.#mapSAHToName.clear(); this.#mapFilenameToSAH.clear(); this.#availableSAH.clear(); + this.#mapS3FileToOFile.clear(); + this.#mapPathToLock.clear(); } /** @@ -20131,8 +20404,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ throws, this.$error will contain the corresponding Error object. - If it throws, it releases any SAHs which it may have - acquired before the exception was thrown, leaving the VFS in a + If it throws, it waits for every pending acquisition to settle, + then releases all SAHs it acquired, leaving the VFS in a well-defined but unusable state. If clearFiles is true, the client-stored state of each file is @@ -20146,27 +20419,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ files.push([name,h]); } } - return Promise.all(files.map(async([name,h])=>{ - try{ - const ah = await h.createSyncAccessHandle() - this.#mapSAHToName.set(ah, name); - if(clearFiles){ - ah.truncate(HEADER_OFFSET_DATA); - this.setAssociatedPath(ah, '', 0); + const results = await Promise.allSettled(files.map(async([name,h])=>{ + const ah = await h.createSyncAccessHandle() + this.#mapSAHToName.set(ah, name); + if(clearFiles){ + ah.truncate(HEADER_OFFSET_DATA); + this.setAssociatedPath(ah, '', 0); + }else{ + const path = this.getAssociatedPath(ah); + if(path){ + this.#mapFilenameToSAH.set(path, ah); }else{ - const path = this.getAssociatedPath(ah); - if(path){ - this.#mapFilenameToSAH.set(path, ah); - }else{ - this.#availableSAH.add(ah); - } + this.#availableSAH.add(ah); } - }catch(e){ - this.storeErr(e); - this.releaseAccessHandles(); - throw e; } })); + const failure = results.find((r)=>'rejected'===r.status) + /* If any failures are found then clean up and re-throw the + first one. We "could" record them all but we can only throw + one of them (or an exception wrapping all of them, which + seems unnecessary). */; + if( failure ){ + this.storeErr(failure.reason); + this.releaseAccessHandles(); + throw failure.reason; + } } /** @@ -20219,8 +20496,12 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ into the given SAH. If path is an empty string then the file is disassociated from the pool but its previous name is preserved in the metadata. + + If nameToRemove is truthy then it must be the "old" name when path + is falsy. This function removes the mapping of that name to an + SAH. */ - setAssociatedPath(sah, path, flags){ + setAssociatedPath(sah, path, flags, nameToRemove){ const enc = textEncoder.encodeInto(path, this.#apBody); if(HEADER_MAX_PATH_SIZE <= enc.written + 1/*NUL byte*/){ toss("Path too long:",path); @@ -20237,6 +20518,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const digest = this.computeDigest(this.#apBody, flags); //console.warn("setAssociatedPath(",path,") digest",digest); sah.write(this.#apBody, {at: 0}); + if(nameToRemove){ + /* The placement of this is very specific: between the above + write and the digest. If the above write fails, + nameToRemove remains in the mapping pool. If it succeeds, + nameToRemove is no longer available and needs to be removed + from the SAH mapping. If the write() _below_ fails, that + leaves us with a consistent world view. + + Discussion: bugs:432f260aa787a53 */ + this.#mapFilenameToSAH.delete(nameToRemove); + } sah.write(digest, {at: HEADER_OFFSET_DIGEST}); sah.flush(); @@ -20326,9 +20618,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ deletePath(path) { const sah = this.#mapFilenameToSAH.get(path); if(sah) { - // Un-associate the name from the SAH. - this.#mapFilenameToSAH.delete(path); - this.setAssociatedPath(sah, '', 0); + this.setAssociatedPath(sah, '', 0, path); } return !!sah; } @@ -20373,7 +20663,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ xOpen file object. */ getOFileForS3File(pFile){ - return this.#mapS3FileToOFile_.get(pFile); + return this.#mapS3FileToOFile.get(pFile); } /** Maps or unmaps (if file is falsy) the given (sqlite3_file*) @@ -20381,10 +20671,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ mapS3FileToOFile(pFile,file){ if(file){ - this.#mapS3FileToOFile_.set(pFile, file); + this.#mapS3FileToOFile.set(pFile, file); setPoolForPFile(pFile, this); }else{ - this.#mapS3FileToOFile_.delete(pFile); + this.#mapS3FileToOFile.delete(pFile); setPoolForPFile(pFile, false); } } @@ -20442,7 +20732,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return true; } - /** "Pauses" this VFS by unregistering it from SQLite and relinquishing all open SAHs, leaving the associated files @@ -20464,7 +20753,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ @see unpauseVfs() */ pauseVfs(){ - if(this.#mapS3FileToOFile_.size>0){ + if(this.#mapS3FileToOFile.size>0){ sqlite3.SQLite3Error.toss( capi.SQLITE_MISUSE, "Cannot pause VFS", this.vfsName,"because it has opened files." @@ -20535,7 +20824,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ util.affirmDbHeader(chunk); checkedHeader = true; } - sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + const n = sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + if( n!==chunk.byteLength ){ + toss("Expected to write "+chunk.byteLength+ + "bytes but wrote"+n+"."); + } nWrote += chunk.byteLength; } if( nWrote < 512 || 0!==nWrote % 512 ){ @@ -20543,7 +20836,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if( !checkedHeader ){ const header = new Uint8Array(20); - sah.read( header, {at: 0} ); + sah.read( header, {at: HEADER_OFFSET_DATA} ); util.affirmDbHeader( header ); } sah.write(new Uint8Array([1,1]), { @@ -20561,24 +20854,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ importDb(name, bytes){ if( bytes instanceof ArrayBuffer ) bytes = new Uint8Array(bytes); else if( bytes instanceof Function ) return this.importDbChunked(name, bytes); + util.affirmIsDb(bytes); const sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss("No available handles to import to."); const n = bytes.byteLength; - if(n<512 || n%512!=0){ - toss("Byte array size is invalid for an SQLite db."); - } - const header = "SQLite format 3"; - for(let i = 0; i < header.length; ++i){ - if( header.charCodeAt(i) !== bytes[i] ){ - toss("Input does not contain an SQLite database header."); - } - } const nWrote = sah.write(bytes, {at: HEADER_OFFSET_DATA}); if(nWrote != n){ this.setAssociatedPath(sah, '', 0); toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); }else{ + sah.truncate(HEADER_OFFSET_DATA + n + /* Ensure no trailing junk when overwriting an + existing file with a shorter one. */); sah.write(new Uint8Array([1,1]), {at: HEADER_OFFSET_DATA+18} /* force db out of WAL mode */); this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); @@ -20586,8 +20874,72 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return nWrote; } - }/*class OpfsSAHPool*/; + /** + Returns true if any (sqlite3_file*) currently opened by this + pool using the given client-provided file name (as distinct from + its opaque name) holds a RESERVED or greater lock, else false. + */ + hasReservedLock(filename){ + const lk = this.#mapPathToLock.get(filename); + return !!lk && lk.lockType>capi.SQLITE_LOCK_SHARED; + } + + /** + Implements xLock() for the given xOpen-generated file object. + This pool holds its SAHs exclusively, so its xOpen() represent + the only connections to a given file. The locks are held + separately from their file object in the same thread the same + way in which os_unix.c:unixLock() distinguishes multiple + connections of a single process which share an inode: a lock + which conflicts with another connection's lock fails with + SQLITE_BUSY, and a failed attempt to get from RESERVED to + EXCLUSIVE leaves a PENDING lock, which admits no new SHARED + locks. + */ + lockFile(file, lockType){ + if(file.lockType>=lockType) return 0; + let lk = this.#mapPathToLock.get(file.path); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + this.#mapPathToLock.set(file.path, lk); + } + if(file.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || lockType>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(lockType===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = lockType; + }else if(lockType===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(file.lockType===capi.SQLITE_LOCK_RESERVED){ + file.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = lockType; + } + file.lockType = lockType; + return 0; + } + + /** Implements xUnlock() for the given xOpen file object. */ + unlockFile(file, lockType){ + if(file.lockType<=lockType) return; + const lk = this.#mapPathToLock.get(file.path); + if(file.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + this.#mapPathToLock.delete(file.path); + } + file.lockType = lockType; + } + }/*class OpfsSAHPool*/; /** A OpfsSAHPoolUtil instance is exposed to clients in order to @@ -20741,9 +21093,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ option is truthy _and_ the previous attempt to initialize this VFS with the same `name` failed, the VFS will attempt to initialize a second time instead of returning the cached - failure. See discussion at: + failure. See discussion at + - `preserveOnInitFailure`: (default=`false`) If truthy, + initialization failure unregisters and disposes of the VFS and + releases acquired handles without also deleting its storage. This + does not undo changes already made during initialization, + including `clearOnInit`. Otherwise, initialization failure + invokes this.removeVfs(), which attempts to delete the + pool. Retrying a cached initialization failure requires + `forceReinitIfPreviouslyFailed`. See discussion at + . + Peculiarities of this VFS vis a vis other SQLite VFSes: @@ -20780,16 +21142,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - byteArray exportFile(name) - Synchronously reads the contents of the given file into a Uint8Array - and returns it. This will throw if the given name is not currently - in active use or on I/O error. Note that the given name is _not_ - visible directly in OPFS (or, if it is, it's not from this VFS). + Synchronously reads the contents of the given file into a + Uint8Array and returns it. This will throw if the given name is + not currently in active use or on I/O error. Because of how this + VFS maps names to storage, the given name is _not_ visible + directly in OPFS (or, if it is, it's not from this VFS). - number getCapacity() - Returns the number of files currently contained - in the SAH pool. The default capacity is only large enough for one - or two databases and their associated temp files. + Returns the number of files currently contained in the SAH + pool. The default capacity is only large enough for one or two + databases and their associated temp files. - number getFileCount() @@ -20806,11 +21169,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Imports the contents of an SQLite database, provided as a byte array or ArrayBuffer, under the given name, overwriting any existing content. Throws if the pool has no available file slots, - on I/O error, or if the input does not appear to be a - database. In the latter case, only a cursory examination is made. + on I/O error, or if the input does not appear to be a database. + In the latter case, only a cursory examination is made to + determine whether the input is a db (and only in non-SEE builds, + as we cannot distinguish encrypted DBs from garbage input). + Results are undefined if the given db name refers to an opened - db. Note that this routine is _only_ for importing database - files, not arbitrary files, the reason being that this VFS will + db. This routine is _only_ for importing database files, not + arbitrary files, the reason being that this VFS will automatically clean up any non-database files so importing them is pointless. @@ -20825,7 +21191,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way is the size of the resulting database. On success this routine rewrites the database header bytes in the - output file (not the input array) to force disabling of WAL mode. + output file (not the input array) to force disabling of WAL mode, + (A) for historical reasons and (B) getting WAL to work in this + build requires doing a (pragma locking_mode=exclusive) on the db + before using it. On a write error, the handle is removed from the pool and made available for re-use. @@ -20941,6 +21310,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return (initPromises[vfsName] = Promise.reject(new Error("Missing required OPFS APIs."))); } + /** + An interal detail of OpfsSAHPool, called only by initPromises(). + + Unregisters and disposes of OpfsSAHPool thePool, releasing all + of its SAHs without deleting its files. Used when + initialization fails and the preserveOnInitFailure option is + set. This is a no-op if thePool.getVfs().pointer is falsy. Returns the + undefined value. + */ + const unregisterVfs = (thePool)=>{ + const cVfs = thePool.getVfs(); + if( cVfs?.pointer ){ + capi.sqlite3_vfs_unregister(cVfs.pointer); + cVfs.dispose(); + thePool.releaseAccessHandles(); + } + }; + /** Maintenance reminder: the order of ASYNC ops in this function is significant. We need to have them all chained at the very @@ -20978,7 +21365,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ thePool.log("VFS initialized."); return poolUtil; }).catch(async (e)=>{ - await thePool.removeVfs().catch(()=>{}); + if( options.preserveOnInitFailure ){ + unregisterVfs(thePool); + }else{ + await thePool.removeVfs().catch(()=>{}); + } throw e; }); }).catch((err)=>{ diff --git a/src/bin/sqlite3-node.mjs b/src/bin/sqlite3-node.mjs index fe47aaa..068e049 100644 --- a/src/bin/sqlite3-node.mjs +++ b/src/bin/sqlite3-node.mjs @@ -27,9 +27,9 @@ /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** ** Emscripten SDK: 5.0.5 */ @@ -98,7 +98,7 @@ if (ENVIRONMENT_IS_NODE) { /** This file was preprocessed using: - ./c-pp -o ./bld/pre-js.node.js -Dtarget:node -Dtarget:es6-module -Dtarget:es6-bundler-friendly -Dunsupported-build -DModule.instantiateWasm api/pre-js.c-pp.js + ./c-pp -o ./bld/pre-js.node.js -Dtarget:node -Dtarget:es6-module -Dtarget:es6-bundler-friendly -Dunsupported-build -Dsqlite3.wasm.base64=./jswasm/sqlite3.wasm -DModule.instantiateWasm api/pre-js.c-pp.js */ /** UNSUPPORTED BUILD: @@ -4067,11 +4067,11 @@ var _sqlite3_status64, _sqlite3_db_status, _sqlite3_vfs_find, _sqlite3_initialize, - _sqlite3_malloc, - _sqlite3_free, _sqlite3_vfs_register, _sqlite3_vfs_unregister, + _sqlite3_malloc, _sqlite3_malloc64, + _sqlite3_free, _sqlite3_realloc, _sqlite3_realloc64, _sqlite3_value_text, @@ -4094,6 +4094,11 @@ var _sqlite3_status64, _sqlite3_column_type, _sqlite3_errmsg, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4331,11 +4336,11 @@ function assignWasmExports(wasmExports) { _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; - _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; - _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; @@ -4358,6 +4363,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4790,9 +4800,9 @@ Module.runSQLite3PostLoadInit = async function( /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** ** Emscripten SDK: 5.0.5 */ @@ -5569,7 +5579,11 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5589,7 +5603,8 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -7037,7 +7052,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.53.4", "libVersionNumber": 3053004, "sourceId": "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","downloadVersion": 3530400,"scm":{ "sha3-256": "bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","branch": "branch-3.53","tags": "release version-3.53.4","datetime": "2026-07-24T19:02:57.525Z"}}; + sqlite3.version = {"libVersion": "3.54.1", "libVersionNumber": 3054001, "sourceId": "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","downloadVersion": 3540100,"scm":{ "sha3-256": "555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","branch": "branch-3.54","tags": "release version-3.54.1","datetime": "2026-10-16T14:45:20.546Z"}}; }); /** 2022-07-08 @@ -9609,7 +9624,7 @@ globalThis.WhWasmUtilInstaller ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js - by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; globalThis.Jaccwabyt = @@ -9921,8 +9936,8 @@ function StructBinderFactory(config){ and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ const ii = getInstanceHandle(obj, false); - if( !ii ) return; - rmInstanceHandle(obj); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; if( !m && !(m = ii.p) ){ console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); return; @@ -9949,6 +9964,7 @@ function StructBinderFactory(config){ m,'threw. NOT propagating it.',e); } } + rmInstanceHandle(obj); delete obj.ondispose; if(ctor.debugFlags.__flags.dealloc){ log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), @@ -10874,6 +10890,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Please keep these sorted by function name! ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written bindings to permit more flexible inputs. */ ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], @@ -11581,6 +11602,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -11632,6 +11654,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -12785,8 +12808,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __doesNotOwnHandle = new Set(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -13268,7 +13291,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -13284,6 +13308,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); if( !__doesNotOwnHandle.delete(this) ){ capi.sqlite3_close_v2(pDb); } - if(this.onclose && (this.onclose.after instanceof Function)){ + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -13943,8 +14018,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -14368,6 +14446,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -14384,6 +14467,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -14601,14 +14710,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -14620,7 +14731,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -14635,69 +14766,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rcObject.prototype.hasOwnProperty.call(o,k); - - const kvvfsMethods = new sqlite3_kvvfs_methods( - /* Wraps the static sqlite3_api_methods singleton */ - wasm.exports.sqlite3__wasm_kvvfs_methods() - ); - util.assert( 32<=kvvfsMethods.$nKeySize, "unexpected kvvfsMethods.$nKeySize: "+kvvfsMethods.$nKeySize); - - /** - Most of the VFS-internal state. - */ - const cache = Object.assign(Object.create(null),{ - /** Regex matching journal file names. */ - rxJournalSuffix: /-journal$/, - /** Frequently-used C-string. */ - zKeyJrnl: wasm.allocCString("jrnl"), - /** Frequently-used C-string. */ - zKeySz: wasm.allocCString("sz"), - /** - The maximum size of a kvvfs record key. It is historically only - 32, a limitation currently retained only because it's convenient to - do so (the underlying code has outgrown the need for the artifically - low limit). - - We cache this value here because the end of this init code will - dispose of kvvfsMethods, invalidating it. - */ - keySize: kvvfsMethods.$nKeySize, - /** - WASM heap memory buffers to optimize out some frequent - allocations. - */ - buffer: Object.assign(Object.create(null),{ - /** - The size of each buffer in this.pool. - - kvvfsMethods.$nBufferSize is slightly larger than the output - space needed for a kvvfs-encoded 64kb db page in a worse-cast - encoding (128kb). It is not suitable for arbitrary buffer - use, only page de/encoding. - */ - n: kvvfsMethods.$nBufferSize, - /** - Map of buffer ids to wasm.alloc()'d pointers of size - this.n. (Re)used by various internals. - - Buffer ids 0 and 1 are used in the API internals. Other - names are used in higher-level APIs. - - See memBuffer() and memBufferFree(). - */ - pool: Object.create(null) - }) - }); - - /** - Returns a (cached) wasm.alloc()'d buffer of cache.buffer.n size, - throwing on OOM. - - We leak this one-time alloc because we've no better option. - sqlite3_vfs does not have a finalizer, so we've no place to hook - in the cleanup. We "could" extend sqlite3_shutdown() to have a - cleanup list for stuff like this but that function is never - used in JS, so it's hardly worth it. - */ - cache.memBuffer = (id=0)=>cache.buffer.pool[id] ??= wasm.alloc(cache.buffer.n); - - /** Frees the buffer with the given id. */ - cache.memBufferFree = (id)=>{ - const b = cache.buffer.pool[id]; - if( b ){ - wasm.dealloc(b); - delete cache.buffer.pool[id]; - } - }; - - const noop = ()=>{}; - const debug = sqlite3.__isUnderTest - ? (...args)=>sqlite3.config.debug?.("kvvfs:", ...args) - : noop; - const warn = (...args)=>sqlite3.config.warn?.("kvvfs:", ...args); - const error = (...args)=>sqlite3.config.error?.("kvvfs:", ...args); - - /** - Implementation of JS's Storage interface for use as backing store - of the kvvfs. Storage is a native class and its constructor - cannot be legally called from JS, making it impossible to - directly subclass Storage. This class implements (only) the - Storage interface, to make it a drop-in replacement for - localStorage/sessionStorage. (Any behavioral discrepancies are to - be considered bugs.) - - This impl simply proxies a plain, prototype-less Object, suitable - for JSON-ing. - - Design note: Storage has a bit of an odd iteration-related - interface as does not (AFAIK) specify specific behavior regarding - modification during traversal. Because of that, this class does - some seemingly unnecessary things with its #keys member, deleting - and recreating it whenever a property index might be invalidated. - */ - class KVVfsStorage { - #map = Object.create(null); - #keys = null; - #size = 0; - - constructor(){ - this.clear(); - } - - #getKeys(){ - return this.#keys ??= Object.keys(this.#map); - } - - key(n){ - if(n < 0 || n >= this.#size) return null; - return this.#getKeys()[n]; - } - - getItem(k){ - return this.#map[k] ?? null; - } - - setItem(k,v){ - if( !(k in this.#map) ){ - ++this.#size; - this.#keys = null; - } - this.#map[k] = ''+v; - } - - removeItem(k){ - if( k in this.#map ){ - delete this.#map[k]; - --this.#size; - this.#keys = null; - } - } - - clear(){ - this.#map = Object.create(null); - this.#keys = null; - this.#size = 0; - } - - get length() { - return this.#size; - } - }/*KVVfsStorage*/; - - /** True if v is the name of one of the special persistant Storage - objects. */ - const kvvfsIsPersistentName = (v)=>'local'===v || 'session'===v; - - /** - Keys in kvvfs have a prefix of "kvvfs-NAME-", where NAME is the - db name. This key is redundant in JS but it's how kvvfs works (it - saves each key to a separate file, so needs a distinct namespace - per data source name). We retain this prefix in 'local' and - 'session' storage for backwards compatibility and so that they - can co-exist with client data in their storage, but we elide them - from "v2" storage, where they're superfluous. - */ - const kvvfsKeyPrefix = (v)=>kvvfsIsPersistentName(v) ? 'kvvfs-'+v+'-' : ''; - - /** - Throws if storage name n (JS string) is not valid for use as a - storage name. Much of this goes back to kvvfs having a fixed - buffer size for its keys, and the storage name needing to be - encoded in the keys for local/session storage. - - The second argument must only be true when called from xOpen() - - it makes names with a "-journal" suffix legal. - */ - const validateStorageName = function(n,mayBeJournal=false){ - if( kvvfsIsPersistentName(n) ) return; - const len = (new Blob([n])).size/*byte length*/; - if( !len ) toss3(capi.SQLITE_MISUSE, "Empty name is not permitted."); - let maxLen = cache.keySize - 1; - if( cache.rxJournalSuffix.test(n) ){ - if( !mayBeJournal ){ - toss3(capi.SQLITE_MISUSE, - "Storage names may not have a '-journal' suffix."); - } - }else if( ['-wal','-shm'].filter(v=>n.endsWith(v)).length ){ - toss3(capi.SQLITE_MISUSE, - "Storage names may not have a -wal or -shm suffix."); - }else{ - maxLen -= 8 /* so we have space for a matching "-journal" suffix */; - } - if( len > maxLen ){ - toss3(capi.SQLITE_RANGE, "Storage name is too long. Limit =", maxLen); - } - let i; - for( i = 0; i < len; ++i ){ - const ch = n.codePointAt(i); - if( ch<32 ){ - toss3(capi.SQLITE_RANGE, - "Illegal character ("+ch+"d) in storage name:",n); - } - } - }; - - /** - Create a new instance of the objects which go into - cache.storagePool, with a refcount of 1. If passed a Storage-like - object as its second argument, it is used for the storage, - otherwise it creates a new KVVfsStorage object. - */ - const newStorageObj = (name,storage=undefined)=>Object.assign(Object.create(null),{ - /** - JS string value of this KVVfsFile::$zClass. i.e. the storage's - name. - */ - jzClass: name, - /** - Refcount. This keeps dbs and journals pointing to the same - storage for the life of both and enables kvvfs to behave more - like a conventional filesystem (a stepping stone towards - downstream API goals). Managed by xOpen() and xClose(). - */ - refc: 1, - /** - If true, this storage will be removed by xClose() or - sqlite3_js_kvvfs_unlink() when refc reaches 0. The others will - persist when refc==0, to give the illusion of real back-end - storage. Managed by xOpen() and sqlite3_js_kvvfs_reserve(). By - default this is false but the delete-on-close=1 flag can be - used to set this to true. - */ - deleteAtRefc0: false, - /** - The backing store. Must implement the Storage interface. - */ - storage: storage || new KVVfsStorage, - /** - The storage prefix used for kvvfs keys. It is - "kvvfs-STORAGENAME-" for local/session storage and an empty - string for other storage. local/session storage must use the - long form (A) for backwards compatibility and (B) so that kvvfs - can coexist with non-db client data in those backends. Neither - (A) nor (B) are concerns for KVVfsStorage objects. - - This prefix mirrors the one generated by os_kv.c's - kvrecordMakeKey() and must stay in sync with that one. - */ - keyPrefix: kvvfsKeyPrefix(name), - /** - KVVfsFile instances currently using this storage. Managed by - xOpen() and xClose(). - */ - files: [], - /** - If set, it's an array of objects with various event - callbacks. See sqlite3_js_kvvfs_listen(). When there are no - listeners, this member is set to undefined (instead of an empty - array) to allow us to more easily optimize out calls to - notifyListeners() for the common case of no listeners. - */ - listeners: undefined - }); - - /** - Public interface for kvvfs v2. The capi.sqlite3_js_kvvfs_...() - routines remain in place for v1. Some members of this class proxy - to those functions but use different default argument values in - some cases. - */ - const kvvfs = sqlite3.kvvfs = Object.create(null); - if( sqlite3.__isUnderTest ){ - /* For inspection via the dev tools console. */ - kvvfs.log = Object.assign(Object.create(null),{ - xOpen: false, - xClose: false, - xWrite: false, - xRead: false, - xSync: false, - xAccess: false, - xFileControl: false, - xRcrdRead: false, - xRcrdWrite: false, - xRcrdDelete: false, - }); - } - - /** - Deletes the cache.storagePool entries for store (a - cache.storagePool entry) and its db/journal counterpart. - */ - const deleteStorage = function(store){ - const other = cache.rxJournalSuffix.test(store.jzClass) - ? store.jzClass.replace(cache.rxJournalSuffix,'') - : store.jzClass+'-journal'; - kvvfs?.log?.xClose - && debug("cleaning up storage handles [", store.jzClass, other,"]",store); - delete cache.storagePool[store.jzClass]; - delete cache.storagePool[other]; - if( !sqlite3.__isUnderTest ){ - /* In test runs, leave these for inspection. If we delete them here, - any prior dumps of them emitted via the console get cleared out - because the console shows live objects instead of call-time - static dumps. */ - delete store.storage; - delete store.refc; - } - }; - - /** - Add both store.jzClass and store.jzClass+"-journal" - to cache,storagePool. - */ - const installStorageAndJournal = (store)=> - cache.storagePool[store.jzClass] = - cache.storagePool[store.jzClass+'-journal'] = store; - - /** - The public name of the current thread's transient storage - object. A storage object with this name gets preinstalled. - */ - const nameOfThisThreadStorage = '.'; - - /** - Map of JS-stringified KVVfsFile::zClass names to - reference-counted Storage objects. These objects are created in - xOpen(). Their refcount is decremented in xClose(), and the - record is destroyed if the refcount reaches 0. We refcount so - that concurrent active xOpen()s on a given name, and within a - given thread, use the same storage object. - */ - cache.storagePool = Object.assign(Object.create(null),{ - /* Start off with mappings for well-known names. */ - [nameOfThisThreadStorage]: newStorageObj(nameOfThisThreadStorage) - }); - - if( globalThis.Storage ){ - /* If available, install local/session storage. */ - if( globalThis.localStorage instanceof globalThis.Storage ){ - cache.storagePool.local = newStorageObj('local', globalThis.localStorage); - } - if( globalThis.sessionStorage instanceof globalThis.Storage ){ - cache.storagePool.session = newStorageObj('session', globalThis.sessionStorage); - } - } - - cache.builtinStorageNames = Object.keys(cache.storagePool); - - const isBuiltinName = (n)=>cache.builtinStorageNames.indexOf(n)>-1; - - /* Add "-journal" twins for each cache.storagePool entry... */ - for(const k of Object.keys(cache.storagePool)){ - /* Journals in kvvfs are are stored as individual records within - their Storage-ish object, named "{storage.keyPrefix}jrnl". We - always map the db and its journal to the same Storage - object. */ - const orig = cache.storagePool[k]; - cache.storagePool[k+'-journal'] = orig; - } - - cache.setError = (e=undefined, dfltErrCode=capi.SQLITE_ERROR)=>{ - if( e ){ - cache.lastError = e; - return (e.resultCode | 0) || dfltErrCode; - } - delete cache.lastError; - return 0; - }; - - cache.popError = ()=>{ - const e = cache.lastError; - delete cache.lastError; - return e; - }; - - /** Exception handler for notifyListeners(). */ - const catchForNotify = (e)=>{ - warn("kvvfs.listener handler threw:",e); - }; - - const kvvfsDecode = wasm.exports.sqlite3__wasm_kvvfs_decode; - const kvvfsEncode = wasm.exports.sqlite3__wasm_kvvfs_encode; - - /** - Listener events and their argument(s) (via the callback(ev) - ev.data member): - - 'open': number of opened handles on this storage. - - 'close': number of opened handles on this storage. - - 'write': key, value - - 'delete': key - - 'sync': true if it's from xSync(), false if it's from - xFileControl(). - - For efficiency's sake, all calls to this function should - be in the form: - - store.listeners && notifyListeners(...); - - Failing to do so will trigger an exceptin in this function (which - will be ignored but may produce a console warning). - */ - const notifyListeners = async function(eventName,store,...args){ - try{ - //cache.rxPageNoSuffix ??= /(\d+)$/; - if( store.keyPrefix && args[0] ){ - args[0] = args[0].replace(store.keyPrefix,''); - } - let u8enc, z0, z1, wcache; - for(const ear of store.listeners){ - const ev = Object.create(null); - ev.storageName = store.jzClass; - ev.type = eventName; - const decodePages = ear.decodePages; - const f = ear.events[eventName]; - if( f ){ - if( !ear.includeJournal && args[0]==='jrnl' ){ - continue; - } - if( 'write'===eventName && ear.decodePages && +args[0]>0 ){ - /* Decode pages to Uint8Array, caching the result in - wcache in case we have more listeners. */ - ev.data = [args[0]]; - if( wcache?.[args[0]] ){ - ev.data[1] = wcache[args[0]]; - continue; - } - u8enc ??= new TextEncoder('utf-8'); - z0 ??= cache.memBuffer(10); - z1 ??= cache.memBuffer(11); - const u = u8enc.encode(args[1]); - const heap = wasm.heap8u(); - heap.set(u, Number(z0)); - heap[wasm.ptr.addn(z0, u.length)] = 0; - const rc = kvvfsDecode(z0, z1, cache.buffer.n); - if( rc>0 ){ - wcache ??= Object.create(null); - wcache[args[0]] - = ev.data[1] - = heap.slice(Number(z1), wasm.ptr.addn(z1,rc)); - }else{ - continue; - } - }else{ - ev.data = args.length - ? ((args.length===1) ? args[0] : args) - : undefined; - } - try{f(ev)?.catch?.(catchForNotify)} - catch(e){ - warn("notifyListeners [",store.jzClass,"]",eventName,e); - } - } - } - }catch(e){ - catchForNotify(e); - } - }/*notifyListeners()*/; - - /** - Returns the storage object mapped to the given string zClass - (C-string pointer or JS string). - */ - const storageForZClass = (zClass)=> - 'string'===typeof zClass - ? cache.storagePool[zClass] - : cache.storagePool[wasm.cstrToJs(zClass)]; - - - const kvvfsMakeKey = wasm.exports.sqlite3__wasm_kvvfsMakeKey; - /** - Returns a C string from kvvfsMakeKey() OR returns zKey. In the - former case the memory is static, so must be copied before a - second call. zKey MUST be a pointer passed to a VFS/file method, - to allow us to avoid an alloc and/or an snprintf(). It requires - C-string arguments for zClass and zKey. zClass may be NULL but - zKey may not. - */ - const zKeyForStorage = (store, zClass, zKey)=>{ - //debug("zKeyForStorage(",store, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey)); - return (zClass && store.keyPrefix) ? kvvfsMakeKey(zClass, zKey) : zKey; - }; - - const jsKeyForStorage = (store,zClass,zKey)=> - wasm.cstrToJs(zKeyForStorage(store, zClass, zKey)); - - const storageGetDbSize = (store)=>+store.storage.getItem(store.keyPrefix + "sz"); - - /** - sqlite3_file pointers => objects, each of which has: - - .file = KVVfsFile instance - - .jzClass = JS-string form of f.$zClass - - .storage = Storage object. It is shared between a db and its - journal. - */ - const pFileHandles = new Map(); - - /** - Original WASM functions for methods we partially override. - */ - const originalMethods = { - vfs: Object.create(null), - ioDb: Object.create(null), - ioJrnl: Object.create(null) - }; - - /** Returns the appropriate originalMethods[X] instance for the - given a KVVfsFile instance. */ - const originalIoMethods = (kvvfsFile)=> - originalMethods[kvvfsFile.$isJournal ? 'ioJrnl' : 'ioDb']; - - const pVfs = new capi.sqlite3_vfs(kvvfsMethods.$pVfs); - const pIoDb = new capi.sqlite3_io_methods(kvvfsMethods.$pIoDb); - const pIoJrnl = new capi.sqlite3_io_methods(kvvfsMethods.$pIoJrnl); - const recordHandler = - Object.create(null)/** helper for some vfs - routines. Populated later. */; - const kvvfsInternal = Object.assign(Object.create(null),{ - pFileHandles, - cache, - storageForZClass, - KVVfsStorage, - /** - BUG: changing to a page size other than the default, - then vacuuming, corrupts the db. As a workaround, - until this is resolved, we forcibly disable - (pragma page_size=...) changes. - */ - disablePageSizeChange: true - }); - if( kvvfs.log ){ - // this is a test build - kvvfs.internal = kvvfsInternal; - } - - /** - Implementations for members of the object referred to by - sqlite3__wasm_kvvfs_methods(). We swap out some native - implementations with these so that we can use JS Storage for - their backing store. - */ - const methodOverrides = { - - /** - sqlite3_kvvfs_methods's member methods. These perform the - fetching, setting, and removal of storage keys on behalf of - kvvfs. In the native impl these write each db page to a - separate file. This impl stores each db page as a single - record in a Storage object which is mapped to zClass. - - A db's size is stored in a record named kvvfs[-storagename]-sz - and the journal is stored in kvvfs[-storagename]-jrnl. The - [-storagename] part is a remnant of the native impl (so that - it has unique filenames per db) and is only used for - localStorage and sessionStorage. We elide that part (to save - space) from other storage objects but retain it on those two - to avoid invalidating pre-version-2 session/localStorage dbs. - - The interface docs for these methods are in src/os_kv.c's - kvrecordRead(), kvrecordWrite(), and kvrecordDelete(). - */ - recordHandler: { - xRcrdRead: (zClass, zKey, zBuf, nBuf)=>{ - try{ - const jzClass = wasm.cstrToJs(zClass); - const store = storageForZClass(jzClass); - if( !store ) return -1; - const jXKey = jsKeyForStorage(store, zClass, zKey); - kvvfs?.log?.xRcrdRead && warn("xRcrdRead", jzClass, jXKey, nBuf, store ); - const jV = store.storage.getItem(jXKey); - if(null===jV) return -1; - const nV = jV.length /* We are relying 100% on v being - ** ASCII so that jV.length is equal - ** to the C-string's byte length. */; - if( 0 ){ - debug("xRcrdRead", jXKey, store, jV); - } - if(nBuf<=0) return nV; - else if(1===nBuf){ - wasm.poke(zBuf, 0); - return nV; - } - if( nBuf+1{ - try { - const store = storageForZClass(zClass); - const jxKey = jsKeyForStorage(store, zClass, zKey); - const jData = wasm.cstrToJs(zData); - kvvfs?.log?.xRcrdWrite && warn("xRcrdWrite",jxKey, store); - store.storage.setItem(jxKey, jData); - store.listeners && notifyListeners('write', store, jxKey, jData); - return 0; - }catch(e){ - error("kvrecordWrite()",e); - return cache.setError(e, capi.SQLITE_IOERR); - } - }, - - xRcrdDelete: (zClass, zKey)=>{ - try { - const store = storageForZClass(zClass); - const jxKey = jsKeyForStorage(store, zClass, zKey); - kvvfs?.log?.xRcrdDelete && warn("xRcrdDelete",jxKey, store); - store.storage.removeItem(jxKey); - store.listeners && notifyListeners('delete', store, jxKey); - return 0; - }catch(e){ - error("kvrecordDelete()",e); - return cache.setError(e, capi.SQLITE_IOERR); - } - } - }/*recordHandler*/, - - /** - Override certain operations of the underlying sqlite3_vfs and - the two sqlite3_io_methods instances so that we can tie - Storage objects to db names. - */ - vfs:{ - /* sqlite3_kvvfs_methods::pVfs's methods */ - xOpen: function(pProtoVfs,zName,pProtoFile,flags,pOutFlags){ - cache.popError(); - let zToFree /* alloc()'d memory for temp db name */; - try{ - if( !zName ){ - zToFree = wasm.allocCString(""+pProtoFile+"." - +(Math.random() * 100000 | 0)); - zName = zToFree; - } - const jzClass = wasm.cstrToJs(zName); - kvvfs?.log?.xOpen && debug("xOpen",jzClass,"flags =",flags); - validateStorageName(jzClass, true); - if( (flags & (capi.SQLITE_OPEN_MAIN_DB - | capi.SQLITE_OPEN_TEMP_DB - | capi.SQLITE_OPEN_TRANSIENT_DB)) - && cache.rxJournalSuffix.test(jzClass) ){ - toss3(capi.SQLITE_ERROR, - "DB files may not have a '-journal' suffix."); - } - let s = storageForZClass(jzClass); - if( !s && !(flags & capi.SQLITE_OPEN_CREATE) ){ - toss3(capi.SQLITE_ERROR, "Storage not found:", jzClass); - } - const rc = originalMethods.vfs.xOpen(pProtoVfs, zName, pProtoFile, - flags, pOutFlags); - if( rc ) return rc; - let deleteAt0 = !!(capi.SQLITE_OPEN_DELETEONCLOSE & flags); - if(wasm.isPtr(arguments[1]/*original zName*/)){ - if(capi.sqlite3_uri_boolean(zName, "delete-on-close", 0)){ - deleteAt0 = true; - } - } - const f = new KVVfsFile(pProtoFile); - util.assert(f.$zClass, "Missing f.$zClass"); - f.addOnDispose(zToFree); - zToFree = undefined; - //debug("xOpen", jzClass, s); - if( s ){ - ++s.refc; - //no if( true===deleteAt0 ) s.deleteAtRefc0 = true; - s.files.push(f); - wasm.poke32(pOutFlags, flags); - }else{ - wasm.poke32(pOutFlags, flags | capi.SQLITE_OPEN_CREATE); - util.assert( !f.$isJournal, "Opening a journal before its db? "+jzClass ); - /* Map both zName and zName-journal to the same storage. */ - const nm = jzClass.replace(cache.rxJournalSuffix,''); - s = newStorageObj(nm); - installStorageAndJournal(s); - s.files.push(f); - s.deleteAtRefc0 = deleteAt0; - kvvfs?.log?.xOpen - && debug("xOpen installed storage handle [",nm, nm+"-journal","]", s); - } - pFileHandles.set(pProtoFile, {store: s, file: f, jzClass}); - s.listeners && notifyListeners('open', s, s.files.length); - return 0; - }catch(e){ - warn("xOpen:",e); - return cache.setError(e); - }finally{ - zToFree && wasm.dealloc(zToFree); - } - }/*xOpen()*/, - - xDelete: function(pVfs, zName, iSyncFlag){ - cache.popError(); - try{ - const jzName = wasm.cstrToJs(zName); - if( cache.rxJournalSuffix.test(jzName) ){ - recordHandler.xRcrdDelete(zName, cache.zKeyJrnl); - }/* - else: historically not done, but maybe otherwise delete - all db pages from storageForZClass(zName)? - */ - return 0; - }catch(e){ - warn("xDelete",e); - return cache.setError(e); - } - }, - - xAccess: function(pProtoVfs, zPath, flags, pResOut){ - cache.popError(); - try{ - const s = storageForZClass(zPath); - const jzPath = s?.jzClass || wasm.cstrToJs(zPath); - if( kvvfs?.log?.xAccess ){ - debug("xAccess",jzPath,"flags =", - flags,"*pResOut =",wasm.peek32(pResOut), - "store =",s); - } - if( !s ){ - // From the API docs: - /** The xAccess method returns [SQLITE_OK] on success or some - ** non-zero error code if there is an I/O error or if the name of - ** the file given in the second argument is illegal. - */ - // However, returning non-0 from here is fatal, so we don't do that. - try{validateStorageName(jzPath)} - catch(e){ - //warn("xAccess is ignoring name validation failure:",e); - wasm.poke32(pResOut, 0); - return 0; - } - } - if( s ){ - const key = s.keyPrefix+ - (cache.rxJournalSuffix.test(jzPath) ? "jrnl" : "1"); - const res = s.storage.getItem(key) ? 0 : 1; - /* This res value looks completely backwards to me, and - is the opposite of the native kvvfs's impl, but it's - working, whereas reimplementing the native one - faithfully does not. Read the lib-level code of where - this is invoked, my expectation is that we set res to 0 - for not-exists. */ - //warn("access res",jzPath,res); - wasm.poke32(pResOut, res); - }else{ - wasm.poke32(pResOut, 0); - } - return 0; - }catch(e){ - error('xAccess',e); - return cache.setError(e); - } - }, - - xRandomness: function(pVfs, nOut, pOut){ - const heap = wasm.heap8u(); - let i = 0; - const npOut = Number(pOut); - for(; i < nOut; ++i) heap[npOut + i] = (Math.random()*255000) & 0xFF; - return nOut; - }, - - xGetLastError: function(pVfs,nOut,pOut){ - const e = cache.popError(); - debug('xGetLastError',e); - if(e){ - const scope = wasm.scopedAllocPush(); - try{ - const [cMsg, n] = wasm.scopedAllocCString(e.message, true); - wasm.cstrncpy(pOut, cMsg, nOut); - if(n > nOut) wasm.poke8(wasm.ptr.add(pOut,nOut,-1), 0); - debug("set xGetLastError",e.message); - return (e.resultCode | 0) || capi.SQLITE_IOERR; - }catch(e){ - return capi.SQLITE_NOMEM; - }finally{ - wasm.scopedAllocPop(scope); - } - } - return 0; - } - - }/*.vfs*/, - - /** - kvvfs has separate sqlite3_api_methods impls for some of the - methods depending on whether it's a db or journal file. Some - of the methods use shared impls but others are specific to - either db or journal files. - */ - ioDb:{ - /* sqlite3_kvvfs_methods::pIoDb's methods */ - xClose: function(pFile){ - cache.popError(); - try{ - const h = pFileHandles.get(pFile); - kvvfs?.log?.xClose && debug("xClose", pFile, h); - if( h ){ - pFileHandles.delete(pFile); - const s = h.store;//storageForZClass(h.jzClass); - s.files = s.files.filter((v)=>v!==h.file); - if( --s.refc<=0 && s.deleteAtRefc0 ){ - deleteStorage(s); - } - originalMethods.ioDb/*same for journals*/.xClose(pFile); - h.file.dispose(); - s.listeners && notifyListeners('close', s, s.files.length); - }else{ - /* Can happen if xOpen fails */ - } - return 0; - }catch(e){ - error("xClose",e); - return cache.setError(e); - } - }, - - xFileControl: function(pFile, opId, pArg){ - cache.popError(); - try{ - const h = pFileHandles.get(pFile); - util.assert(h, "Missing KVVfsFile handle"); - kvvfs?.log?.xFileControl && debug("xFileControl",h,'op =',opId); - if( opId===capi.SQLITE_FCNTL_PRAGMA - && kvvfsInternal.disablePageSizeChange ){ - /* pArg== length-3 (char**) */ - //const argv = wasm.cArgvToJs(3, pArg); // the easy way - const zName = wasm.peekPtr(wasm.ptr.add(pArg, wasm.ptr.size)); - if( "page_size"===wasm.cstrToJs(zName) ){ - kvvfs?.log?.xFileControl - && debug("xFileControl pragma",wasm.cstrToJs(zName)); - const zVal = wasm.peekPtr(wasm.ptr.add(pArg, 2*wasm.ptr.size)); - if( zVal ){ - /* Without this, pragma page_size=N; followed by a - vacuum breaks the db. With this, it continues - working but does not actually change the page - size. */ - kvvfs?.log?.xFileControl - && warn("xFileControl pragma", h, - "NOT setting page size to", wasm.cstrToJs(zVal)); - h.file.$szPage = -1; - return 0/*corrupts: capi.SQLITE_NOTFOUND*/; - }else if( h.file.$szPage>0 ){ - kvvfs?.log?.xFileControl && - warn("xFileControl", h, "getting page size",h.file.$szPage); - wasm.pokePtr(pArg, wasm.allocCString(""+h.file.$szPage) - /* memory now owned by the library */); - return 0;//capi.SQLITE_NOTFOUND; - } - } - } - const rc = originalMethods.ioDb.xFileControl(pFile, opId, pArg); - if( 0==rc && capi.SQLITE_FCNTL_SYNC===opId ){ - h.store.listeners && notifyListeners('sync', h.store, false); - } - return rc; - }catch(e){ - error("xFileControl",e); - return cache.setError(e); - } - }, - - xSync: function(pFile,flags){ - cache.popError(); - try{ - const h = pFileHandles.get(pFile); - kvvfs?.log?.xSync && debug("xSync", h); - util.assert(h, "Missing KVVfsFile handle"); - const rc = originalMethods.ioDb.xSync(pFile, flags); - if( 0==rc && h.store.listeners ) notifyListeners('sync', h.store, true); - return rc; - }catch(e){ - error("xSync",e); - return cache.setError(e); - } - }, - - - }/*.ioDb*/, - - ioJrnl:{ - /* sqlite3_kvvfs_methods::pIoJrnl's methods. Those set to true - are copied as-is from the ioDb objects. Others are specific - to journal files. */ - xClose: true, - }/*.ioJrnl*/ - }/*methodOverrides*/; - - - try { - util.assert( cache.buffer.n>1024*129, "Heap buffer is not large enough" - /* Native is SQLITE_KVOS_SZ is 133073 as of this writing */ ); - for(const e of Object.entries(methodOverrides.recordHandler)){ - // Overwrite kvvfsMethods's callbacks - const k = e[0], f = e[1]; - recordHandler[k] = f; - if( 0 ){ - // bug: this should work - kvvfsMethods.installMethod(k, f); - }else{ - kvvfsMethods[kvvfsMethods.memberKey(k)] = - wasm.installFunction(kvvfsMethods.memberSignature(k), f); - } - } - for(const e of Object.entries(methodOverrides.vfs)){ - // Overwrite some pVfs entries and stash the original impls - const k = e[0], f = e[1], km = pVfs.memberKey(k), - member = pVfs.structInfo.members[k] - || util.toss("Missing pVfs.structInfo[",k,"]"); - originalMethods.vfs[k] = wasm.functionEntry(pVfs[km]); - pVfs[km] = wasm.installFunction(member.signature, f); - } - for(const e of Object.entries(methodOverrides.ioDb)){ - // Similar treatment for pVfs.$pIoDb a.k.a. pIoDb... - const k = e[0], f = e[1], km = pIoDb.memberKey(k); - originalMethods.ioDb[k] = wasm.functionEntry(pIoDb[km]) - || util.toss("Missing native pIoDb[",km,"]"); - pIoDb[km] = wasm.installFunction(pIoDb.memberSignature(k), f); - } - for(const e of Object.entries(methodOverrides.ioJrnl)){ - // Similar treatment for pVfs.$pIoJrnl a.k.a. pIoJrnl... - const k = e[0], f = e[1], km = pIoJrnl.memberKey(k); - originalMethods.ioJrnl[k] = wasm.functionEntry(pIoJrnl[km]) - || util.toss("Missing native pIoJrnl[",km,"]"); - if( true===f ){ - /* use pIoDb's copy */ - pIoJrnl[km] = pIoDb[km] || util.toss("Missing copied pIoDb[",km,"]"); - }else{ - pIoJrnl[km] = wasm.installFunction(pIoJrnl.memberSignature(k), f); - } - } - }finally{ - kvvfsMethods.dispose(); - pVfs.dispose(); - pIoDb.dispose(); - pIoJrnl.dispose(); - } - - /* - That gets all of the low-level bits out of the way. What follows - are the public API additions. - */ - - /** - Clears all storage used by the kvvfs DB backend, deleting any - DB(s) stored there. - - Its argument must be the name of a kvvfs storage object: - - - 'session' - - 'local' - - '' - see below. - - A transient kvvfs storage object name. - - In the first two cases, only sessionStorage resp. localStorage is - cleared. An empty string resolves to both 'local' and 'session' - storage. - - Returns the number of entries cleared. - - As of kvvfs version 2: - - This API is available in Worker threads but does not have access - to localStorage or sessionStorage in them. Prior versions did not - include this API in Worker threads. - - Differences in this function in version 2: - - - It accepts an arbitrary storage name. In v1 this was a silent - no-op for any names other than ('local','session',''). - - - It throws if a db currently has the storage opened UNLESS the - storage object is localStorage or sessionStorage. That version 1 - did not throw for this case was due to an architectural - limitation which has since been overcome, but removal of - JsStorageDb.prototype.clearStorage() would be a backwards compatibility - break, so this function permits wiping the storage for those two - cases even if they are opened. Use with care. - */ - const sqlite3_js_kvvfs_clear = function callee(which){ - if( ''===which ){ - return callee('local') + callee('session'); - } - const store = storageForZClass(which); - if( !store ) return 0; - if( store.files.length ){ - if( globalThis.localStorage===store.storage - || globalThis.sessionStorage===store.storage ){ - /* backwards compatibility: allow these to be cleared - while opened. */ - }else{ - /* Interestingly, kvvfs recovers just fine when the storage is - wiped, so long as the db is not in use and its schema is - recreated before it's used, but client apps should not have - to be faced with that eventuality mid-query (where it - _will_ cause failures). Therefore we disallow it when - storage handles are opened. Kvvfs version 1 could not - detect this case - see the if() block above. - */ - toss3(capi.SQLITE_ACCESS, - "Cannot clear in-use database storage."); - } - } - const s = store.storage; - const toRm = [] /* keys to remove */; - let i, n = s.length; - //debug("kvvfs_clear",store,s); - for( i = 0; i < n; ++i ){ - const k = s.key(i); - //debug("kvvfs_clear ?",k); - if(!store.keyPrefix || k.startsWith(store.keyPrefix)) toRm.push(k); - } - toRm.forEach((kk)=>s.removeItem(kk)); - //alertFilesToReload(store); - return toRm.length; - }; - - /** - This routine estimates the approximate amount of - storage used by the given kvvfs back-end. - - Its arguments are as documented for sqlite3_js_kvvfs_clear(), - only the operation this performs is different. - - The returned value is twice the "length" value of every matching - key and value, noting that JavaScript stores each character in 2 - bytes. - - The returned size is not authoritative from the perspective of - how much data can fit into localStorage and sessionStorage, as - the precise algorithms for determining those limits are - unspecified and may include per-entry overhead invisible to - clients. - */ - const sqlite3_js_kvvfs_size = function callee(which){ - if( ''===which ){ - return callee('local') + callee('session'); - } - const store = storageForZClass(which); - if( !store ) return 0; - const s = store.storage; - let i, sz = 0; - for(i = 0; i < s.length; ++i){ - const k = s.key(i); - if(!store.keyPrefix || k.startsWith(store.keyPrefix)){ - sz += k.length; - sz += s.getItem(k).length; - } - } - return sz * 2 /* because JS uses 2-byte char encoding */; - }; - - /** - Exports a kvvfs storage object to an object, optionally - JSON-friendly. - - Usages: - - thisfunc(storageName); - thisfunc(options); - - In the latter case, the options object must be an object with - the following properties: - - - "name" (string) required. The storage to export. - - - "decodePages" (bool=false). If true, the .pages result property - holdes Uint8Array objects holding the raw binary-format db - pages. The default is to use kvvfs-encoded string pages - (JSON-friendly). - - - "includeJournal" (bool=false). If true and the db has a current - journal, it is exported as well. (Kvvfs journals are stored as a - single record within the db's storage object.) - - The returned object is structured as follows... - - - "name": the name of the storage. This is 'local' or 'session' - for localStorage resp. sessionStorage, and an arbitrary name for - transient storage. This propery may be changed before passing - this object to sqlite3_js_kvvfs_import() in order to - import into a different storage object. - - - "timestamp": the time this function was called, in Unix - epoch milliseconds. - - - "size": the unencoded db size. - - - "journal": if options.includeJournal is true and this db has a - journal, it is stored as a string here, otherwise this property - is not set. - - - "pages": An array holding the raw encoded db pages in their - proper order. - - Throws if this db is not opened. - - The encoding of the underlying database is not part of this - interface - it is simply passed on as-is. Interested parties are - directed to src/os_kv.c in the SQLite source tree, with the - caveat that that code also does not offer a public interface. - i.e. the encoding is a private implementation detail of kvvfs. - The format may be changed in the future but kvvfs will continue - to support the current form. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_export = function callee(...args){ - let opt; - if( 1===args.length && 'object'===typeof args[0] ){ - opt = args[0]; - }else if(args.length){ - opt = Object.assign(Object.create(null),{ - name: args[0], - //decodePages: true - }); - } - const store = opt ? storageForZClass(opt.name) : null; - if( !store ){ - toss3(capi.SQLITE_NOTFOUND, - "There is no kvvfs storage named",opt?.name); - } - //debug("store to export=",store); - const s = store.storage; - const rc = Object.assign(Object.create(null),{ - name: store.jzClass, - timestamp: Date.now(), - pages: [] - }); - const pages = Object.create(null); - let xpages; - const keyPrefix = store.keyPrefix; - const rxTail = keyPrefix - ? /^kvvfs-[^-]+-(\w+)/ /* X... part of kvvfs-NAME-X... */ - : undefined; - let i = 0, n = s.length; - for( ; i < n; ++i ){ - const k = s.key(i); - if( !keyPrefix || k.startsWith(keyPrefix) ){ - let kk = (keyPrefix ? rxTail.exec(k) : undefined)?.[1] ?? k; - switch( kk ){ - case 'jrnl': - if( opt.includeJournal ) rc.journal = s.getItem(k); - break; - case 'sz': - rc.size = +s.getItem(k); - break; - default: - kk = +kk /* coerce to number */; - if( !util.isInt32(kk) || kk<=0 ){ - toss3(capi.SQLITE_RANGE, "Malformed kvvfs key: "+k); - } - if( opt.decodePages ){ - const spg = s.getItem(k), - n = spg.length, - z = cache.memBuffer(0), - zDec = cache.memBuffer(1), - heap = wasm.heap8u()/* MUST be inited last*/; - let i = 0; - for( ; i < n; ++i ){ - heap[wasm.ptr.add(z, i)] = spg.codePointAt(i) & 0xff; - } - heap[wasm.ptr.add(z, i)] = 0; - //debug("Decoding",i,"page bytes"); - const nDec = kvvfsDecode( - z, zDec, cache.buffer.n - ); - //debug("Decoded",nDec,"page bytes"); - pages[kk] = heap.slice(Number(zDec), wasm.ptr.addn(zDec, nDec)); - }else{ - pages[kk] = s.getItem(k); - } - break; - } - } - } - if( opt.decodePages ) cache.memBufferFree(1); - /* Now sort the page numbers and move them into an array. In JS - property keys are always strings, so we have to coerce them to - numbers so we can get them sorted properly for the array. */ - Object.keys(pages).map((v)=>+v).sort().forEach( - (v)=>rc.pages.push(pages[v]) - ); - return rc; - }/* sqlite3_js_kvvfs_export */; - - /** - The counterpart of sqlite3_js_kvvfs_export(). Its - argument must be the result of that function() or - a compatible one. - - This either replaces the contents of an existing transient - storage object or installs one named exp.name, setting - the storage's db contents to that of the exp object. - - Throws on error. Error conditions include: - - - The given storage object is currently opened by any db. - Performing this page-by-page import would invoke undefined - behavior on them. - - - Malformed input object. - - If it throws after starting the import then it clears the storage - before returning, to avoid leaving the db in an undefined - state. It may throw for any of the above-listed conditions before - reaching that step, in which case the db is not modified. If - exp.name refers to a new storage name then if it throws, the name - does not get installed. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_import = function(exp, overwrite=false){ - if( !exp?.timestamp - || !exp.name - || undefined===exp.size - || !Array.isArray(exp.pages) ){ - toss3(capi.SQLITE_MISUSE, "Malformed export object."); - }else if( !exp.size - || (exp.size !== (exp.size | 0)) - //|| (exp.size % cache.fixedPageSize) - || exp.size>=0x7fffffff ){ - toss3(capi.SQLITE_RANGE, "Invalid db size: "+exp.size); - } - - validateStorageName(exp.name); - let store = storageForZClass(exp.name); - const isNew = !store; - if( store ){ - if( !overwrite ){ - //warn("Storage exists:",arguments,store); - toss3(capi.SQLITE_ACCESS, - "Storage '"+exp.name+"' already exists and", - "overwrite was not specified."); - }else if( !store.files || !store.jzClass ){ - toss3(capi.SQLITE_ERROR, - "Internal storage object", exp.name,"seems to be malformed."); - }else if( store.files.length ){ - toss3(capi.SQLITE_IOERR_ACCESS, - "Cannot import db storage while it is in use."); - } - sqlite3_js_kvvfs_clear(exp.name); - }else{ - store = newStorageObj(exp.name); - //warn("Installing new storage:",store); - } - //debug("Importing store",store.poolEntry.files.length, store); - //debug("object to import:",exp); - const keyPrefix = kvvfsKeyPrefix(exp.name); - let zEnc; - try{ - /* Force the native KVVfsFile instances to re-read the db - and page size. */; - const s = store.storage; - s.setItem(keyPrefix+'sz', exp.size); - if( exp.journal ) s.setItem(keyPrefix+'jrnl', exp.journal); - if( exp.pages[0] instanceof Uint8Array ){ - /* raw binary pages */ - //debug("pages",exp.pages); - exp.pages.forEach((u,ndx)=>{ - const n = u.length; - if( 0 && cache.fixedPageSize !== n ){ - util.toss3(capi.SQLITE_RANGE,"Unexpected page size:", n); - } - zEnc ??= cache.memBuffer(1); - const zBin = cache.memBuffer(0), - heap = wasm.heap8u()/*MUST be inited last*/; - /* Copy u to the heap and encode the heap copy via C. This - is _presumably_ faster than porting the encoding algo to - JS. */ - heap.set(u, Number(zBin)); - heap[wasm.ptr.addn(zBin,n)] = 0; - const rc = kvvfsEncode(zBin, n, zEnc); - util.assert( rc < cache.buffer.n, - "Impossibly long output - possibly smashed the heap" ); - util.assert( 0===wasm.peek8(wasm.ptr.add(zEnc,rc)), - "Expecting NUL-terminated encoded output" ); - const jenc = wasm.cstrToJs(zEnc); - //debug("(un)encoded page:",u,jenc); - s.setItem(keyPrefix+(ndx+1), jenc); - }); - }else if( exp.pages[0] ){ - /* kvvfs-encoded pages */ - exp.pages.forEach((v,ndx)=>s.setItem(keyPrefix+(ndx+1), v)); - } - if( isNew ) installStorageAndJournal(store); - }catch{ - if( !isNew ){ - try{sqlite3_js_kvvfs_clear(exp.name);}catch(ee){/*ignored*/} - } - }finally{ - if( zEnc ) cache.memBufferFree(1); - } - return this; - }; - - /** - If no kvvfs storage exists with the given name, one is - installed. If one exists, its reference count is increased so - that it won't be freed by the closing of a database or journal - file. - - Throws if the name is not valid for a new storage object. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_reserve = function(name){ - let store = storageForZClass(name); - if( store ){ - ++store.refc; - return; - } - validateStorageName(name); - installStorageAndJournal(newStorageObj(name)); - }; - - /** - Conditionally "unlinks" a kvvfs storage object, reducing its - reference count by 1. - - This is a no-op if name ends in "-journal" or refers to a - built-in storage object. - - It will not lower the refcount below the number of - currently-opened db/journal files for the storage (so that it - cannot delete it out from under them). - - If the refcount reaches 0 then the storage object is - removed. - - Returns true if it reduces the refcount, else false. A result of - true does not necessarily mean that the storage unit was removed, - just that its refcount was lowered. Similarly, a result of false - does not mean that the storage is removed - it may still have - opened handles. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_unlink = function(name){ - const store = storageForZClass(name); - if( !store - || kvvfsIsPersistentName(store.jzClass) - || isBuiltinName(store.jzClass) - || cache.rxJournalSuffix.test(name) ) return false; - if( store.refc > store.files.length || 0===store.files.length ){ - if( --store.refc<=0 ){ - /* Ignoring deleteAtRefc0 for an explicit unlink */ - deleteStorage(store); - } - return true; - } - return false; - }; - - /** - Adds an event listener to a kvvfs storage object. The idea is - that this can be used to asynchronously back up one kvvfs storage - object to another or another channel entirely. (The caveat in the - latter case is that kvvfs's format is not readily consumable by - downstream code.) - - Its argument must be an object with the following properties: - - - storage: the name of the kvvfs storage object. - - - reserve [=false]: if true, sqlite3_js_kvvfs_reserve() is used - to ensure that the storage exists if it does not already. - If this is false and the storage does not exist then an - exception is thrown. - - - events: an object which may have any of the following - callback function properties: open, close, write, delete. - - - decodePages [=false]: if true, write events will receive each - db page write in the form of a Uint8Array holding the raw binary - db page. The default is to emit the kvvfs-format page because it - requires no extra work, we already have it in hand, and it's - often smaller. It's not great for interchange, though. - - - includeJournal [=false]: if true, writes and deletes of - "jrnl" records are included. If false, no events are sent - for journal updates. - - Passing the same object to sqlite3_js_kvvfs_unlisten() will - remove the listener. - - Each one of the events callbacks will be called asynchronously - when the given storage performs those operations. They may be - asynchronous functions but are not required to be (the events are - fired async either way, but making the event callbacks async may - be advantageous when multiple listeners are involved). All - exceptions, including those via Promises, are ignored but may (or - may not) trigger warning output on the console. - - Each callback gets passed a single object with the following - properties: - - .type = the same as the name of the callback - - .storageName = the name of the storage object - - .data = callback-dependent: - - - 'open' and 'close' get an integer, the number of - currently-opened handles on the storage. - - - 'write' gets a length-two array holding the key and value which - were written. The key is always a string, even if it's a db page - number. For db-page records, the value's type depends on - opt.decodePages. All others, including the journal, are strings. - (The journal, being a kvvfs-specific format, is delivered in - that same JSON-friendly format.) More details below. - - - 'delete' gets the string-type key of the deleted record. - - - 'sync' gets a boolean value: true if it was triggered by db - file's xSync(), false if it was triggered by xFileControl(). The - latter triggers before the xSync() and also triggers if the DB - has PRAGMA SYNCHRONOUS=OFF (in which case xSync() is not - triggered). - - The key/value arguments to 'write', and key argument to 'delete', - are in one of the following forms: - - - 'sz' = the unencoded db size as a string. This specific key is - key is never deleted, so is only ever passed to 'write' events. - - - 'jrnl' = the current db journal as a kvvfs-encoded string. This - journal format is not useful anywhere except in the kvvfs - internals. These events are not fired if opt.includeJournal is - false. - - - '[1-9][0-9]*' (a db page number) = Its type depends on - opt.decodePages. These may be written and deleted in arbitrary - order. - - Design note: JS has StorageEvents but only in the main thread, - which is why the listeners are not based on that. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_listen = function(opt){ - if( !opt || 'object'!==typeof opt ){ - toss3(capi.SQLITE_MISUSE, "Expecting a listener object."); - } - let store = storageForZClass(opt.storage); - if( !store ){ - if( opt.storage && opt.reserve ){ - sqlite3_js_kvvfs_reserve(opt.storage); - store = storageForZClass(opt.storage); - util.assert(store, - "Unexpectedly cannot fetch reserved storage " - +opt.storage); - }else{ - toss3(capi.SQLITE_NOTFOUND,"No such storage:",opt.storage); - } - } - if( opt.events ){ - (store.listeners ??= []).push(opt); - } - }; - - /** - Removes the kvvfs event listeners for the given options - object. It must be passed the same object instance which was - passed to sqlite3_js_kvvfs_listen(). - - This has no side effects if opt is invalid or is not a match for - any listeners. - - Return true if it unregisters its argument, else false. - - Added in version 3.52.0. - */ - const sqlite3_js_kvvfs_unlisten = function(opt){ - const store = storageForZClass(opt?.storage); - if( store?.listeners && opt.events ){ - const n = store.listeners.length; - store.listeners = store.listeners.filter((v)=>v!==opt); - const rc = n>store.listeners.length; - if( !store.listeners.length ){ - // to speed up downstream checks for listeners - store.listeners = undefined; - } - return rc; - } - return false; - }; - - sqlite3.kvvfs.reserve = sqlite3_js_kvvfs_reserve; - sqlite3.kvvfs.import = sqlite3_js_kvvfs_import; - sqlite3.kvvfs.export = sqlite3_js_kvvfs_export; - sqlite3.kvvfs.unlink = sqlite3_js_kvvfs_unlink; - sqlite3.kvvfs.listen = sqlite3_js_kvvfs_listen; - sqlite3.kvvfs.unlisten = sqlite3_js_kvvfs_unlisten; - sqlite3.kvvfs.exists = (name)=>!!storageForZClass(name); - sqlite3.kvvfs.estimateSize = sqlite3_js_kvvfs_size; - sqlite3.kvvfs.clear = sqlite3_js_kvvfs_clear; - - - if( globalThis.Storage ){ - /** - Prior to version 2, kvvfs was only available in the main - thread. We retain that for the v1 APIs, exposing them only in - the main UI thread. As of version 2, kvvfs is available in all - threads but only via its v2 interface (sqlite3.kvvfs). - - These versions have a default argument value of "" which the v2 - versions lack. - */ - capi.sqlite3_js_kvvfs_size = (which="")=>sqlite3_js_kvvfs_size(which); - capi.sqlite3_js_kvvfs_clear = (which="")=>sqlite3_js_kvvfs_clear(which); - } - - if(sqlite3.oo1?.DB){ - /** - Functionally equivalent to DB(storageName,'c','kvvfs') except - that it throws if the given storage name is not one of 'local' - or 'session'. - - As of version 3.46, the argument may optionally be an options - object in the form: - - { - filename: 'session'|'local', - ... etc. (all options supported by the DB ctor) - } - - noting that the 'vfs' option supported by main DB - constructor is ignored here: the vfs is always 'kvvfs'. - */ - const DB = sqlite3.oo1.DB; - sqlite3.oo1.JsStorageDb = function( - storageName = sqlite3.oo1.JsStorageDb.defaultStorageName - ){ - const opt = DB.dbCtorHelper.normalizeArgs(...arguments); - opt.vfs = 'kvvfs'; - if( 0 ){ - // Current tests rely on these, but that's arguably a bug - if( opt.flags ) opt.flags = 'cw'+opt.flags; - else opt.flags = 'cw'; - } - switch( opt.filename ){ - /* sqlite3_open(), in these builds, recognizes the names - below and performs some magic which we want to bypass - here for sanity's sake. */ - case ":sessionStorage:": opt.filename = 'session'; break; - case ":localStorage:": opt.filename = 'local'; break; - } - const m = /(file:(\/\/)?)([^?]+)/.exec(opt.filename); - validateStorageName( m ? m[3] : opt.filename); - DB.dbCtorHelper.call(this, opt); - }; - sqlite3.oo1.JsStorageDb.defaultStorageName - = cache.storagePool.session ? 'session' : nameOfThisThreadStorage; - const jdb = sqlite3.oo1.JsStorageDb; - jdb.prototype = Object.create(DB.prototype); - jdb.clearStorage = sqlite3_js_kvvfs_clear; - /** - DEPRECATED: the inherited method of this name (as opposed to - the "static" class method) is deprecated with version 2 of - kvvfs. This function will, for backwards comaptibility, - continue to work with localStorage and sessionStorage, but will - throw for all other storage because they are opened. Version 1 - was not capable of recognizing that the storage was opened so - permitted wiping it out at any time, but that was arguably a - bug. - - Clears this database instance's storage or throws if this - instance has been closed. Returns the number of - database pages which were cleaned up. - */ - jdb.prototype.clearStorage = function(){ - return jdb.clearStorage(this.affirmOpen().dbFilename(), true); - }; - /** Equivalent to sqlite3_js_kvvfs_size(). */ - jdb.storageSize = sqlite3_js_kvvfs_size; - /** - Returns the _approximate_ number of bytes this database takes - up in its storage or throws if this instance has been closed. - */ - jdb.prototype.storageSize = function(){ - return jdb.storageSize(this.affirmOpen().dbFilename(), true); - }; - }/*sqlite3.oo1.JsStorageDb*/ - - if( sqlite3.__isUnderTest && sqlite3.vtab ){ - /** - An eponymous vtab for inspecting the kvvfs state. This is only - intended for use in testing and development, not part of the - public API. - */ - const cols = Object.assign(Object.create(null),{ - rowid: {type: 'INTEGER'}, - name: {type: 'TEXT'}, - nRef: {type: 'INTEGER'}, - nOpen: {type: 'INTEGER'}, - isTransient: {type: 'INTEGER'}, - dbSize: {type: 'INTEGER'} - }); - Object.keys(cols).forEach((v,i)=>cols[v].colId = i); - - const VT = sqlite3.vtab; - const ProtoCursor = Object.assign(Object.create(null),{ - row: function(){ - return cache.storagePool[this.names[this.rowid]]; - } - }); - Object.assign(Object.create(ProtoCursor),{ - rowid: 0, - names: Object.keys(cache.storagePool) - .filter(v=>!cache.rxJournalSuffix.test(v)) - }); - const cursorState = function(cursor, reset){ - const o = (cursor instanceof capi.sqlite3_vtab_cursor) - ? cursor - : VT.xCursor.get(cursor); - if( reset || !o.vTabState ){ - o.vTabState = Object.assign(Object.create(ProtoCursor),{ - rowid: 0, - names: Object.keys(cache.storagePool) - .filter(v=>!cache.rxJournalSuffix.test(v)) - }); - } - return o.vTabState; - }; - - const dbg = 1 ? ()=>{} : (...args)=>debug("vtab",...args); - - const theModule = function f(){ - return f.mod ??= new sqlite3.capi.sqlite3_module().setupModule({ - catchExceptions: true, - methods: { - xConnect: function(pDb, pAux, argc, argv, ppVtab, pzErr){ - dbg("xConnect"); - try{ - const xcol = []; - Object.keys(cols).forEach((k)=>{ - xcol.push(k+" "+cols[k].type); - }); - const rc = capi.sqlite3_declare_vtab( - pDb, "CREATE TABLE ignored("+xcol.join(',')+")" - ); - if(0===rc){ - const t = VT.xVtab.create(ppVtab); - util.assert( - (t === VT.xVtab.get(wasm.peekPtr(ppVtab))), - "output pointer check failed" - ); - } - return rc; - }catch(e){ - return VT.xError('xConnect', e, capi.SQLITE_ERROR); - } - }, - xCreate: wasm.ptr.null, // eponymous only - //xCreate: true, // copy xConnect, i.e. also eponymous only - xDisconnect: function(pVtab){ - dbg("xDisconnect",...arguments); - VT.xVtab.dispose(pVtab); - return 0; - }, - xOpen: function(pVtab, ppCursor){ - dbg("xOpen",...arguments); - VT.xCursor.create(ppCursor); - return 0; - }, - xClose: function(pCursor){ - dbg("xClose",...arguments); - const c = VT.xCursor.unget(pCursor); - delete c.vTabState; - c.dispose(); - return 0; - }, - xNext: function(pCursor){ - dbg("xNext",...arguments); - const c = VT.xCursor.get(pCursor); - ++cursorState(c).rowid; - return 0; - }, - xColumn: function(pCursor, pCtx, iCol){ - dbg("xColumn",...arguments); - //const c = VT.xCursor.get(pCursor); - const st = cursorState(pCursor); - const store = st.row(); - util.assert(store, "Unexpected xColumn call"); - switch(iCol){ - case cols.rowid.colId: - capi.sqlite3_result_int(pCtx, st.rowid); - break; - case cols.name.colId: - capi.sqlite3_result_text(pCtx, store.jzClass, -1, capi.SQLITE_TRANSIENT); - break; - case cols.nRef.colId: - capi.sqlite3_result_int(pCtx, store.refc); - break; - case cols.nOpen.colId: - capi.sqlite3_result_int(pCtx, store.files.length); - break; - case cols.isTransient.colId: - capi.sqlite3_result_int(pCtx, !!store.deleteAtRefc0); - break; - case cols.dbSize.colId: - capi.sqlite3_result_int(pCtx, storageGetDbSize(store)); - break; - default: - capi.sqlite3_result_error(pCtx, "Invalid column id: "+iCol); - return capi.SQLITE_RANGE; - } - return 0; - }, - xRowid: function(pCursor, ppRowid64){ - dbg("xRowid",...arguments); - const st = cursorState(pCursor); - VT.xRowid(ppRowid64, st.rowid); - return 0; - }, - xEof: function(pCursor){ - const st = cursorState(pCursor); - dbg("xEof?="+(!st.row()),...arguments); - return !st.row(); - }, - xFilter: function(pCursor, idxNum, idxCStr, - argc, argv/* [sqlite3_value* ...] */){ - dbg("xFilter",...arguments); - const st = cursorState(pCursor, true); - return 0; - }, - xBestIndex: function(pVtab, pIdxInfo){ - dbg("xBestIndex",...arguments); - //const t = VT.xVtab.get(pVtab); - const pii = new capi.sqlite3_index_info(pIdxInfo); - pii.$estimatedRows = cache.storagePool.size; - pii.$estimatedCost = 1.0; - pii.dispose(); - return 0; - } - } - })/*setupModule*/; - }/*theModule()*/; - - sqlite3.kvvfs.create_module = function(pDb, name="sqlite_kvvfs"){ - return capi.sqlite3_create_module(pDb, name, theModule(), - wasm.ptr.null); - }; - - }/* virtual table */ - - -})/*globalThis.sqlite3ApiBootstrap.initializers*/; + delete sqlite3.capi.sqlite3_kvvfs_methods; + delete sqlite3.capi.KVVfsFile; +}); /* The OPFS SAH Pool VFS parts are elided from builds targeting node.js. diff --git a/src/bin/sqlite3-opfs-async-proxy.js b/src/bin/sqlite3-opfs-async-proxy.js index e09bbbd..d136eab 100644 --- a/src/bin/sqlite3-opfs-async-proxy.js +++ b/src/bin/sqlite3-opfs-async-proxy.js @@ -62,7 +62,7 @@ if( !vfsName ){ VFS or both the "opfs" and "opfs-wl" VFSes. */ const workerId = (Math.random() * 10000000) | 0; -const isWebLocker = 'opfs-wl'===urlParams.get('vfs'); +const isWebLocker = 'opfs-wl'===vfsName; const wPost = (type,...args)=>postMessage({type, payload:args}); const installAsyncProxy = function(){ const toss = function(...args){throw new Error(args.join(' '))}; diff --git a/src/bin/sqlite3.mjs b/src/bin/sqlite3.mjs index 4f4fa6c..8936330 100644 --- a/src/bin/sqlite3.mjs +++ b/src/bin/sqlite3.mjs @@ -27,9 +27,9 @@ /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** ** Emscripten SDK: 5.0.5 */ @@ -92,7 +92,7 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR /** This file was preprocessed using: - ./c-pp -o ./bld/pre-js.esm.js -Dtarget:es6-module -DModule.instantiateWasm api/pre-js.c-pp.js + ./c-pp -o ./bld/pre-js.esm.js -Dtarget:es6-module -Dsqlite3.wasm.base64=./jswasm/sqlite3.wasm -DModule.instantiateWasm api/pre-js.c-pp.js */ (function(Module){ const sIMS = @@ -154,12 +154,17 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR It's disabled in the (unsupported/untested) node builds because node does not do fetch(). */ - Module['instantiateWasm'] = function callee(imports,onSuccess){ + Module['instantiateWasm'] = function callee(imports, onSuccess){ if( this.emscriptenInstantiateWasm instanceof Function ){ /* See [tag:locateFile]. Same story here */ return this.emscriptenInstantiateWasm(imports, onSuccess); } const sims = this; + const finalThen = (arg)=>{ + arg.imports = imports; + sims.instantiateWasm = arg; /* used by sqlite3-api-prologue.c-pp.js */ + onSuccess(arg.instance, arg.module); + }; const uri = Module.locateFile( sims.wasmFilename, ( ('undefined'===typeof scriptDirectory/*var defined by Emscripten glue*/) @@ -167,11 +172,6 @@ var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIR ); sims.debugModule("instantiateWasm() uri =", uri, "sIMS =",this); const wfetch = ()=>fetch(uri, {credentials: 'same-origin'}); - const finalThen = (arg)=>{ - arg.imports = imports; - sims.instantiateWasm = arg /* used by sqlite3-api-prologue.c-pp.js */; - onSuccess(arg.instance, arg.module); - }; const loadWasm = WebAssembly.instantiateStreaming ? async ()=> WebAssembly @@ -4099,11 +4099,11 @@ var _sqlite3_status64, _sqlite3_db_status, _sqlite3_vfs_find, _sqlite3_initialize, - _sqlite3_malloc, - _sqlite3_free, _sqlite3_vfs_register, _sqlite3_vfs_unregister, + _sqlite3_malloc, _sqlite3_malloc64, + _sqlite3_free, _sqlite3_realloc, _sqlite3_realloc64, _sqlite3_value_text, @@ -4126,6 +4126,11 @@ var _sqlite3_status64, _sqlite3_column_type, _sqlite3_errmsg, _sqlite3_deserialize, + _sqlite3_backup_init, + _sqlite3_backup_step, + _sqlite3_backup_finish, + _sqlite3_backup_remaining, + _sqlite3_backup_pagecount, _sqlite3_clear_bindings, _sqlite3_value_blob, _sqlite3_value_bytes, @@ -4363,11 +4368,11 @@ function assignWasmExports(wasmExports) { _sqlite3_db_status = Module['_sqlite3_db_status'] = wasmExports['sqlite3_db_status']; _sqlite3_vfs_find = Module['_sqlite3_vfs_find'] = wasmExports['sqlite3_vfs_find']; _sqlite3_initialize = Module['_sqlite3_initialize'] = wasmExports['sqlite3_initialize']; - _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; - _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_vfs_register = Module['_sqlite3_vfs_register'] = wasmExports['sqlite3_vfs_register']; _sqlite3_vfs_unregister = Module['_sqlite3_vfs_unregister'] = wasmExports['sqlite3_vfs_unregister']; + _sqlite3_malloc = Module['_sqlite3_malloc'] = wasmExports['sqlite3_malloc']; _sqlite3_malloc64 = Module['_sqlite3_malloc64'] = wasmExports['sqlite3_malloc64']; + _sqlite3_free = Module['_sqlite3_free'] = wasmExports['sqlite3_free']; _sqlite3_realloc = Module['_sqlite3_realloc'] = wasmExports['sqlite3_realloc']; _sqlite3_realloc64 = Module['_sqlite3_realloc64'] = wasmExports['sqlite3_realloc64']; _sqlite3_value_text = Module['_sqlite3_value_text'] = wasmExports['sqlite3_value_text']; @@ -4390,6 +4395,11 @@ function assignWasmExports(wasmExports) { _sqlite3_column_type = Module['_sqlite3_column_type'] = wasmExports['sqlite3_column_type']; _sqlite3_errmsg = Module['_sqlite3_errmsg'] = wasmExports['sqlite3_errmsg']; _sqlite3_deserialize = Module['_sqlite3_deserialize'] = wasmExports['sqlite3_deserialize']; + _sqlite3_backup_init = Module['_sqlite3_backup_init'] = wasmExports['sqlite3_backup_init']; + _sqlite3_backup_step = Module['_sqlite3_backup_step'] = wasmExports['sqlite3_backup_step']; + _sqlite3_backup_finish = Module['_sqlite3_backup_finish'] = wasmExports['sqlite3_backup_finish']; + _sqlite3_backup_remaining = Module['_sqlite3_backup_remaining'] = wasmExports['sqlite3_backup_remaining']; + _sqlite3_backup_pagecount = Module['_sqlite3_backup_pagecount'] = wasmExports['sqlite3_backup_pagecount']; _sqlite3_clear_bindings = Module['_sqlite3_clear_bindings'] = wasmExports['sqlite3_clear_bindings']; _sqlite3_value_blob = Module['_sqlite3_value_blob'] = wasmExports['sqlite3_value_blob']; _sqlite3_value_bytes = Module['_sqlite3_value_bytes'] = wasmExports['sqlite3_value_bytes']; @@ -4822,9 +4832,9 @@ Module.runSQLite3PostLoadInit = async function( /* @preserve ** This code was built from sqlite3 version... ** -** SQLITE_VERSION "3.53.4" -** SQLITE_VERSION_NUMBER 3053004 -** SQLITE_SOURCE_ID "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc" +** SQLITE_VERSION "3.54.1" +** SQLITE_VERSION_NUMBER 3054001 +** SQLITE_SOURCE_ID "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76" ** ** Emscripten SDK: 5.0.5 */ @@ -5601,7 +5611,11 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( lead bytes of that buffer do not hold a SQLite3 database header, else it returns without side effects. - Added in 3.44. + Added in 3.44. As of 3.54 in SEE builds it performs only a + rudimentary length check and does not fail for invalid header + bytes, under the assumption that the input may be an encrypted + db. We cannot unambiguously distinguish an encrypted db from + garbage bytes. */ affirmDbHeader: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -5621,7 +5635,8 @@ globalThis.sqlite3ApiBootstrap = async function sqlite3ApiBootstrap( database. It only examines the size and header, but further checks may be added in the future. - Added in 3.44. + Added in 3.44. See notes in affirmDbHeader() regarding SEE + builds. */ affirmIsDb: function(bytes){ if(bytes instanceof ArrayBuffer) bytes = new Uint8Array(bytes); @@ -7069,7 +7084,7 @@ globalThis.sqlite3ApiBootstrap.defaultConfig = Object.create(null); */ globalThis.sqlite3ApiBootstrap.sqlite3 = undefined; globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - sqlite3.version = {"libVersion": "3.53.4", "libVersionNumber": 3053004, "sourceId": "2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","downloadVersion": 3530400,"scm":{ "sha3-256": "bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc","branch": "branch-3.53","tags": "release version-3.53.4","datetime": "2026-07-24T19:02:57.525Z"}}; + sqlite3.version = {"libVersion": "3.54.1", "libVersionNumber": 3054001, "sourceId": "2026-10-16 14:45:20 555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","downloadVersion": 3540100,"scm":{ "sha3-256": "555e07ef33f69a0957d24d8e555b702464a131d6f1607f4c3c1e4551e8e6ca76","branch": "branch-3.54","tags": "release version-3.54.1","datetime": "2026-10-16T14:45:20.546Z"}}; }); /** 2022-07-08 @@ -9641,7 +9656,7 @@ globalThis.WhWasmUtilInstaller ./c-pp -o js/jaccwabyt.js -@policy=error jaccwabyt/jaccwabyt.c-pp.js - by libcmpp 2.x 2fc4afc31f6505c27b9c34988973a2bd9b157d559247cdd26868ae75632c3a5e @ 2025-11-16 23:03:27.352 UTC + by libcmpp 2.0.x 4539e17f451054d2aeb6a5ffe3891af087fd8fa6cfae4e31d02e1fddfec69d46 @ 2026-09-30 09:12:44.230 UTC */ 'use strict'; globalThis.Jaccwabyt = @@ -9953,8 +9968,8 @@ function StructBinderFactory(config){ and unmaps obj from its native resources. */ const __freeStruct = function(ctor, obj, m){ const ii = getInstanceHandle(obj, false); - if( !ii ) return; - rmInstanceHandle(obj); + if( !ii || ii.isDisposing ) return; + ii.isDisposing = true; if( !m && !(m = ii.p) ){ console.warn("Cannot(?) happen: __freeStruct() found no instanceInfo"); return; @@ -9981,6 +9996,7 @@ function StructBinderFactory(config){ m,'threw. NOT propagating it.',e); } } + rmInstanceHandle(obj); delete obj.ondispose; if(ctor.debugFlags.__flags.dealloc){ log("debug.dealloc:",(ii.ownsPointer?"":"EXTERNAL"), @@ -10906,6 +10922,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Please keep these sorted by function name! ["sqlite3_aggregate_context","void*", "sqlite3_context*", "int"], /* sqlite3_auto_extension() has a hand-written binding. */ + ["sqlite3_backup_init", "sqlite3_backup*", "sqlite3*", "string", "sqlite3*", "string"], + ["sqlite3_backup_step", "int", "sqlite3_backup*", "int"], + ["sqlite3_backup_finish", "int", "sqlite3_backup*"], + ["sqlite3_backup_remaining", "int", "sqlite3_backup*"], + ["sqlite3_backup_pagecount", "int", "sqlite3_backup*"], /* sqlite3_bind_blob() and sqlite3_bind_text() have hand-written bindings to permit more flexible inputs. */ ["sqlite3_bind_double","int", "sqlite3_stmt*", "int", "f64"], @@ -11613,6 +11634,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /*a class which no value can ever be an instance of*/ }; wasm.xWrap.argAdapter('sqlite3_filename', __xArgPtr) + ('sqlite3_backup*', __xArgPtr) ('sqlite3_context*', __xArgPtr) ('sqlite3_value*', __xArgPtr) ('void*', __xArgPtr) @@ -11664,6 +11686,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __xRcPtr = wasm.xWrap.resultAdapter('*'); wasm.xWrap.resultAdapter('sqlite3*', __xRcPtr) + ('sqlite3_backup*', __xRcPtr) ('sqlite3_context*', __xRcPtr) ('sqlite3_stmt*', __xRcPtr) ('sqlite3_value*', __xRcPtr) @@ -12817,8 +12840,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const __doesNotOwnHandle = new Set(); /** - Map of DB instances to objects, each object being a map of Stmt - wasm pointers to Stmt objects. + Map of DB instances to objects, each object being a map of + sqlite3_stmt wasm pointers to Stmt objects. */ const __stmtMap = new WeakMap(); @@ -13300,7 +13323,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const stmt = db.prepare(sql); try { const rc = stmt.bind(bind).step() ? stmt.get(...getArgs) : undefined; - stmt.reset(/*for INSERT...RETURNING locking case*/); + stmt.reset(/*for INSERT...RETURNING locking case + https://sqlite.org/forum/forumpost/c411b3a9143d02dce */); return rc; }finally{ stmt.finalize(); @@ -13316,6 +13340,57 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ sql, bind, rowMode, returnValue: 'resultRows' }); + /** + Internal impl of DB.Stmt APIs which fetch a column. The caller is + required to have validated the ndx value before calling this (see + affirmColIndex()). The purpose of this impl is to speed up such + operations which loop, to avoid having to validate the index on + each iteration. The arguments are as documented for Stmt.get() + with the exception that ndx must be an in-range interger (that + function handles the other cases and proxies them to this one). + */ + const __stmtGetColumn = (stmt, ndx, asType)=>{ + switch(undefined===asType + ? capi.sqlite3_column_type(stmt.pointer, ndx) + : asType){ + case capi.SQLITE_NULL: return null; + case capi.SQLITE_INTEGER:{ + if(wasm.bigIntEnabled){ + const rc = capi.sqlite3_column_int64(stmt.pointer, ndx); + if(rc>=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ + return Number(rc).valueOf(); + } + return rc; + }else{ + const rc = capi.sqlite3_column_double(stmt.pointer, ndx); + if(rc>Number.MAX_SAFE_INTEGER || rc{ - if(s && s.pointer){ + for(const s of Object.values(__stmtMap.get(this))){ + if(s?.pointer){ try{s.finalize()} - catch(e){/*ignore*/} + catch(ex){/*ignore*/} } - }); + } __ptrMap.delete(this); __stmtMap.delete(this); if( !__doesNotOwnHandle.delete(this) ){ capi.sqlite3_close_v2(pDb); } - if(this.onclose && (this.onclose.after instanceof Function)){ + if(this.onclose?.after instanceof Function){ try{this.onclose.after(this)} catch(e){/*ignore*/} } @@ -13975,8 +14050,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ selectValues: function(sql,bind,asType){ const stmt = this.prepare(sql), rc = []; try { + affirmColIndex(stmt, 0); stmt.bind(bind); - while(stmt.step()) rc.push(stmt.get(0,asType)); + while(stmt.step()) rc.push( + __stmtGetColumn(stmt, 0, asType) + ); stmt.reset(/*for INSERT...RETURNING locking case*/); }finally{ stmt.finalize(); @@ -14400,6 +14478,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ also called, otherwise any existing bindings, along with any memory allocated for them, are retained. + Clients must not use capi.sqlite3_reset() with this object + because this method does book-keeping specific to this class, + e.g. the pieces which ensure that the column-fetching methods + throw when called without a corresponding step(). + In versions 3.42.0 and earlier, this function did not throw if sqlite3_reset() returns non-0, but it was discovered that throwing (or significant extra client-side code) is necessary @@ -14416,6 +14499,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ checkSqlite3Rc(this.db, rc); return this; }, + + /** + Works like reset() except that it returns the underlying + C-level result code instead of throwing if that code represents + an error. + + Clients must not use capi.sqlite3_reset() for this purpose + because this method (like reset()) does book-keeping specific + to this class. + + Throws if an exec() is underway. + + The use case this addresses is when a step() fails due to, + e.g., a locking error: a following reset() will report that + locking error by throwing and that's sometimes inconvenient. + + Added in 3.54. + */ + resetNoThrow: function(alsoClearBinds){ + affirmNotLockedByExec(this,'reset()'); + if(alsoClearBinds) this.clearBindings(); + const rc = capi.sqlite3_reset(affirmStmtOpen(this).pointer); + __stmtMayGet.delete(this); + return rc; + }, + /** Binds one or more values to its bindable parameters. It accepts 1 or 2 arguments: @@ -14633,14 +14742,16 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ an exception is thrown. By default it will determine the data type of the result - automatically. If passed a second argument, it must be one - of the enumeration values for sqlite3 types, which are - defined as members of the sqlite3 module: SQLITE_INTEGER, - SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, - except for undefined, will trigger an exception. Passing - undefined is the same as not passing a value. It is legal - to, e.g., fetch an integer value as a string, in which case - sqlite3 will convert the value to a string. + automatically. If passed a second argument, it must be one of + the enumeration values for sqlite3 types, which are defined as + members of the sqlite3.capi namespace: SQLITE_INTEGER, + SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB. Any other value, except + for undefined, will trigger an exception. Passing undefined is + the same as not passing a value. It is legal to, e.g., fetch an + integer value as a string, in which case sqlite3 will convert + the value to a string. + + Blobs are returned as Uint8Array instances. If ndx is an array, this function behaves a differently: it assigns the indexes of the array, from 0 to the number of @@ -14652,7 +14763,27 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ the values of their corresponding result columns and returns that object. - Blobs are returned as Uint8Array instances. + Performance note: this class does not cache its column names + because a reprepare may change them and we have(?) no(?) way of + hooking into that to invalidate the cache. A side effect of + that is that this function, when ndx is an object, has to copy + those names from the WASM side on each call. When fetching many + objects, DB.exec() can do so more efficiently by caching those + names for the duration of the query. In large result sets the + runtime difference is human-perceivable. + + Behavior change notice: prior to 3.54, the asType argument was + ignored when ndx is an array or object, the justification being + that we're generally fetching rows of mixed data types. As of + 3.54, it still behaves that way when passed the undefined value + resp. is not passed a value, but will coerce each column to the + request type of it is not the undefined value. It is not + believed that this change adversely affects any existing + client-level code because this argument was ignored and + applications passing a non-undefined value were not necessarily + getting back what they had specified (or did so only because + all of the data was of that type, in which case the new + behavior is identical for those queries). Potential TODO: add type ID SQLITE_JSON, which fetches the result as a string and passes it (if it's not null) to @@ -14667,69 +14798,22 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ let i = 0; const n = this.columnCount; while(i=Number.MIN_SAFE_INTEGER && rc<=Number.MAX_SAFE_INTEGER){ - /* Coerce "normal" number ranges to normal number values, - and only return BigInt-type values for numbers out of this - range. */ - return Number(rc).valueOf(); - } - return rc; - }else{ - const rc = capi.sqlite3_column_double(this.pointer, ndx); - if(rc>Number.MAX_SAFE_INTEGER || rc cache.storagePool[store.jzClass] = @@ -16732,6 +16836,35 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ const pFileHandles = new Map(); + /** + Map of filename to lock objects with this structure: + + {.lockType: int, .nShared: int} + + Used by xLock(), xUnlock(), and xCheckReservedLock(). Modelled + after the "same-process, same-file, different-db-handle" locking + in os_unix.c. + */ + const mapPathToLocks = new Map(); + + /** + Main xUnlock() impl for kvvfs, also used by xClose(). Expects an + xOpen()-created file handle object and the second argument to + xUnlock(). It returns void. + */ + const unlockFile = function(fh, lockType){ + if(fh.lockType<=lockType) return; + const lk = mapPathToLocks.get(fh.jzClass); + if(fh.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + mapPathToLocks.delete(fh.jzClass); + } + fh.lockType = lockType; + }; + /** Original WASM functions for methods we partially override. */ @@ -16816,29 +16949,25 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ else if(1===nBuf){ wasm.poke(zBuf, 0); return nV; - } - if( nBuf+1 nV + 1 ){ + nBuf = nV + 1; } if( 0 ){ debug("xRcrdRead", nBuf, zClass, wasm.cstrToJs(zClass), wasm.cstrToJs(zKey), nV, jV, store); } - const zV = cache.memBuffer(0); - //if( !zV ) return -3 /*OOM*/; + const nCopy = nV0, }/*.vfs*/, @@ -17056,6 +17199,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ kvvfs?.log?.xClose && debug("xClose", pFile, h); if( h ){ pFileHandles.delete(pFile); + unlockFile(h, capi.SQLITE_LOCK_NONE); const s = h.store;//storageForZClass(h.jzClass); s.files = s.files.filter((v)=>v!==h.file); if( --s.refc<=0 && s.deleteAtRefc0 ){ @@ -17134,6 +17278,82 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } }, + xLock: function(pFile, iLock){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + if( capi.SQLITE_LOCK_NONE!==iLock ){ + /* Tells the impl to re-read its size. */ + originalMethods.ioDb.xLock(pFile, iLock); + } + /** + This impl is based off of the one in the opfs-sahpool VFS + impl which, in turn, is based off of the impl in + os_unix.c. + */ + if(h.lockType>=iLock) return 0; + let lk = mapPathToLocks.get(h.jzClass); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + mapPathToLocks.set(h.jzClass, lk); + } + if(h.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || iLock>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(iLock===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = iLock; + }else if(iLock===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(h.lockType===capi.SQLITE_LOCK_RESERVED){ + h.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = iLock; + } + h.lockType = iLock; + return 0; + }catch(e){ + error("xLock", e); + return cache.setError(e); + } + }, + + xUnlock: function(pFile, iLock){ + cache.popError(); + try{ + if( capi.SQLITE_LOCK_NONE===iLock ){ + /* Tells the impl to re-read its size on the next op. */ + originalMethods.ioDb.xUnlock(pFile, iLock); + } + const h = pFileHandles.get(pFile); + unlockFile(h, iLock); + return 0; + }catch(e){ + error("xUnlock", e); + return cache.setError(e); + } + }, + + xCheckReservedLock: function(pFile, pOut){ + cache.popError(); + try{ + const h = pFileHandles.get(pFile); + const lk = mapPathToLocks.get(h.jzClass); + wasm.poke32(pOut, + (!!lk && lk.lockType>capi.SQLITE_LOCK_SHARED) + ? 1 : 0) + return 0; + }catch(e){ + error("xCheckReservedLock", e); + return cache.setError(e); + } + }, + }/*.ioDb*/, @@ -17142,6 +17362,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ are copied as-is from the ioDb objects. Others are specific to journal files. */ xClose: true, + xLock: true, + xUnlock: true, + xCheckReservedLock: true, }/*.ioJrnl*/ }/*methodOverrides*/; @@ -18371,11 +18594,15 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way, the resolved value of the returned Promise is the number of bytes written to the target file. - It very specifically requires the input to be an SQLite3 - database and throws if that's not the case. It does so in - order to prevent this function from taking on a larger scope - than it is specifically intended to. i.e. we do not want it to - become a convenience for importing arbitrary files into OPFS. + It very specifically requires the input to be an SQLite3 database + and throws if that's not the case. It does so in order to + prevent this function from taking on a larger scope than it is + specifically intended to. i.e. we do not want it to become a + convenience for importing arbitrary files into OPFS. Caveat: as + of 3.54 in SEE builds, the "is this a db?" check is necessarily + lax to account for SEE-encrypted databases not having a legible + header. In such builds, only the db size is relevant for the + check. This routine rewrites the database header bytes in the output file (not the input array) to force disabling of WAL mode. @@ -18857,6 +19084,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ so would need to pass it to the async proxy. That would make it inordinately expensive considering that it's just a hint. + + See: forum:a2f573b00cda1372 */ wasm.poke(pOut, 0, 'i32'); return 0; @@ -19298,7 +19527,7 @@ const initS11n = function(){ //| capi.SQLITE_OPEN_DELETEONCLOSE | capi.SQLITE_OPEN_MAIN_DB; const pOut = wasm.scopedAlloc(8); - const dbFile = "/sanity/check/file"+randomFilename(8); + const dbFile = "/sanity/check/file"+opfsUtil.randomFilename(8); const zDbFile = wasm.scopedAllocCString(dbFile); let rc; state.s11n.serialize("This is ä string."); @@ -19387,7 +19616,7 @@ const initS11n = function(){ state.sabFileBufView = new Uint8Array(state.sabIO, 0, state.fileBufferSize); state.sabS11nView = new Uint8Array(state.sabIO, state.sabS11nOffset, state.sabS11nSize); opfsVfs.initS11n(); - delete opfsVfs.initS11n; + opfsVfs.initS11n = null; if(options.sanityChecks){ warn("Running sanity checks because of opfs-sanity-check URL arg..."); sanityCheck(); @@ -19653,6 +19882,9 @@ globalThis.sqlite3ApiBootstrap.initializersAsync.push(async (sqlite3)=>{ - Also because of that, it does not require the SharedArrayBuffer, so can function without the COOP/COEP HTTP response headers. + - Also because of that, this one is much faster and the performance + gap increases as the job sizes increase. + - It can hypothetically support Safari 16.4+, whereas the "opfs" VFS requires v17 due to a subworker/storage bug in 16.x which makes it incompatible with that VFS. @@ -19757,7 +19989,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Logging verbosity 3+ == everything, 2 == warnings+errors, 1 == errors only. */ verbosity: 2, - forceReinitIfPreviouslyFailed: false + forceReinitIfPreviouslyFailed: false, + preserveOnInitFailure: false }); /** Logging routines, from most to least serious. */ @@ -19794,7 +20027,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xCheckReservedLock'); pool.storeErr(); - wasm.poke32(pOut, 1); + const file = pool.getOFileForS3File(pFile); + wasm.poke32( + pOut, + pool.hasReservedLock(file.path) ? 1 : 0 + /* As forum:b2fbb61642 elaborates on why we cannot simply + check file.lockType>=capi.SQLITE_LOCK_RESERVED + here. Summary: xOpen() has long allowed multiple handles to + the same filename and we need to check if any of them have + a lock to avoid a specific corruption case which that forum + thread demonstrates. */ + ); return 0; }, xClose: function(pFile){ @@ -19804,6 +20047,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ if(file) { try{ pool.log(`xClose ${file.path}`); + pool.unlockFile(file, capi.SQLITE_LOCK_NONE); pool.mapS3FileToOFile(pFile, false); file.sah.flush(); if(file.flags & capi.SQLITE_OPEN_DELETEONCLOSE){ @@ -19835,8 +20079,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ pool.log(`xLock ${lockType}`); pool.storeErr(); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; - return 0; + return pool.lockFile(file, lockType); }, xRead: function(pFile,pDest,n,offset64){ const pool = getPoolForPFile(pFile); @@ -19890,7 +20133,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const pool = getPoolForPFile(pFile); pool.log('xUnlock'); const file = pool.getOFileForS3File(pFile); - file.lockType = lockType; + pool.unlockFile(file, lockType); return 0; }, xWrite: function(pFile,pSrc,n,offset64){ @@ -19991,6 +20234,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ ? pool.getPath(zName) : getRandomName(); let sah = pool.getSAHForPath(path); + if(sah && (flags & capi.SQLITE_OPEN_CREATE) + && (flags & capi.SQLITE_OPEN_EXCLUSIVE)){ + toss('file already exists:', path); + } if(!sah && (flags & capi.SQLITE_OPEN_CREATE)) { // File not found so try to create it. if(pool.getFileCount() < pool.getCapacity()) { @@ -20057,7 +20304,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Inherit certain VFS members from the default VFS, if available. */ opfsVfs.$xRandomness = dVfs.$xRandomness; - opfsVfs.$xSleep = dVfs.$xSleep; dVfs.dispose(); } if(!opfsVfs.$xRandomness && !vfsMethods.xRandomness){ @@ -20070,9 +20316,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return i; }; } - if(!opfsVfs.$xSleep && !vfsMethods.xSleep){ - vfsMethods.xSleep = (pVfs,ms)=>0; - } + /** + This VFS's xSleep() must be a no-op. In this environment, + only db handles within the same thread can ever come into + contention, and that contention cannot be resolved if + one of the handles sleeps in that same thread. + See also: forum:3f0794c5d8 + */ + vfsMethods.xSleep = (pVfs,ms)=>0; sqlite3.vfs.installVfs({ vfs: {struct: opfsVfs, methods: vfsMethods} }); @@ -20080,8 +20331,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ }; /** - Class for managing OPFS-related state for the - OPFS SharedAccessHandle Pool sqlite3_vfs. + Class for managing OPFS-related state for the OPFS + SharedAccessHandle Pool sqlite3_vfs. This class is + internal-use-only, never exposed to the client. OpfsSAHPoolUtil + is the public-facing part. */ class OpfsSAHPool { /* OPFS dir in which VFS metadata is stored. */ @@ -20103,7 +20356,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ /* Set of currently-unused SAHs. */ #availableSAH = new Set(); /* Maps (sqlite3_file*) to xOpen's file objects. */ - #mapS3FileToOFile_ = new Map(); + #mapS3FileToOFile = new Map(); + /* Maps client-side file names to the lock state of the files + opened via this pool: {nShared, lockType}, modelled after + os_unix.c:unixInodeInfo. */ + #mapPathToLock = new Map(); /* Maps SAH to an abstract File Object which contains various metadata about that handle. */ @@ -20119,6 +20376,9 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ // Logging verbosity. See optionDefaults.verbosity. #verbosity; + /** + Options are documented in installOpfsSAHPoolVfs(). + */ constructor(options = Object.create(null)){ this.#verbosity = options.verbosity ?? optionDefaults.verbosity; this.vfsName = options.name || optionDefaults.name; @@ -20145,6 +20405,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ warn(...args){this.#logImpl(1, ...args)}; error(...args){this.#logImpl(0, ...args)}; + /* Design note: at the time this method was added, the developer + was unaware that getter syntax was an option: get vfs(){...} */ getVfs(){return this.#cVfs} /* Current pool capacity. */ @@ -20179,22 +20441,32 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } /** - Reduce capacity by n, but can only reduce up to the limit - of currently-available SAHs. Returns a Promise which resolves - to the number of slots really removed. + Reduce capacity by n, but can only reduce up to the limit of + currently-available SAHs. Returns a Promise which resolves to + the number of slots really removed. Throws if removal of an + OPFS filesystem entry fails for any reason, in which case the + VFS itself is left in a well-defined state, possibly partially + reduced in capacity compared to before this call, but the file + which was unable to be removed is in an undefined state. It may + be orphaned and/or later recycled. + + As of 3.54, throws if n is an invalid value. Prior to that + an invalid value could cause it to remove all entries. */ async reduceCapacity(n){ + if(!Number.isSafeInteger(n) || n < 0){ + toss('Invalid capacity reduction:', n); + } let nRm = 0; for(const ah of Array.from(this.#availableSAH)){ if(nRm === n || this.getFileCount() === this.getCapacity()){ break; } const name = this.#mapSAHToName.get(ah); - //this.#unmapFileObject(ah); ah.close(); - await this.#dhOpaque.removeEntry(name); this.#mapSAHToName.delete(ah); this.#availableSAH.delete(ah); + await this.#dhOpaque.removeEntry(name); ++nRm; } return nRm; @@ -20210,6 +20482,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ this.#mapSAHToName.clear(); this.#mapFilenameToSAH.clear(); this.#availableSAH.clear(); + this.#mapS3FileToOFile.clear(); + this.#mapPathToLock.clear(); } /** @@ -20219,8 +20493,8 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ throws, this.$error will contain the corresponding Error object. - If it throws, it releases any SAHs which it may have - acquired before the exception was thrown, leaving the VFS in a + If it throws, it waits for every pending acquisition to settle, + then releases all SAHs it acquired, leaving the VFS in a well-defined but unusable state. If clearFiles is true, the client-stored state of each file is @@ -20234,27 +20508,31 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ files.push([name,h]); } } - return Promise.all(files.map(async([name,h])=>{ - try{ - const ah = await h.createSyncAccessHandle() - this.#mapSAHToName.set(ah, name); - if(clearFiles){ - ah.truncate(HEADER_OFFSET_DATA); - this.setAssociatedPath(ah, '', 0); + const results = await Promise.allSettled(files.map(async([name,h])=>{ + const ah = await h.createSyncAccessHandle() + this.#mapSAHToName.set(ah, name); + if(clearFiles){ + ah.truncate(HEADER_OFFSET_DATA); + this.setAssociatedPath(ah, '', 0); + }else{ + const path = this.getAssociatedPath(ah); + if(path){ + this.#mapFilenameToSAH.set(path, ah); }else{ - const path = this.getAssociatedPath(ah); - if(path){ - this.#mapFilenameToSAH.set(path, ah); - }else{ - this.#availableSAH.add(ah); - } + this.#availableSAH.add(ah); } - }catch(e){ - this.storeErr(e); - this.releaseAccessHandles(); - throw e; } })); + const failure = results.find((r)=>'rejected'===r.status) + /* If any failures are found then clean up and re-throw the + first one. We "could" record them all but we can only throw + one of them (or an exception wrapping all of them, which + seems unnecessary). */; + if( failure ){ + this.storeErr(failure.reason); + this.releaseAccessHandles(); + throw failure.reason; + } } /** @@ -20307,8 +20585,12 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ into the given SAH. If path is an empty string then the file is disassociated from the pool but its previous name is preserved in the metadata. + + If nameToRemove is truthy then it must be the "old" name when path + is falsy. This function removes the mapping of that name to an + SAH. */ - setAssociatedPath(sah, path, flags){ + setAssociatedPath(sah, path, flags, nameToRemove){ const enc = textEncoder.encodeInto(path, this.#apBody); if(HEADER_MAX_PATH_SIZE <= enc.written + 1/*NUL byte*/){ toss("Path too long:",path); @@ -20325,6 +20607,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ const digest = this.computeDigest(this.#apBody, flags); //console.warn("setAssociatedPath(",path,") digest",digest); sah.write(this.#apBody, {at: 0}); + if(nameToRemove){ + /* The placement of this is very specific: between the above + write and the digest. If the above write fails, + nameToRemove remains in the mapping pool. If it succeeds, + nameToRemove is no longer available and needs to be removed + from the SAH mapping. If the write() _below_ fails, that + leaves us with a consistent world view. + + Discussion: bugs:432f260aa787a53 */ + this.#mapFilenameToSAH.delete(nameToRemove); + } sah.write(digest, {at: HEADER_OFFSET_DIGEST}); sah.flush(); @@ -20414,9 +20707,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ deletePath(path) { const sah = this.#mapFilenameToSAH.get(path); if(sah) { - // Un-associate the name from the SAH. - this.#mapFilenameToSAH.delete(path); - this.setAssociatedPath(sah, '', 0); + this.setAssociatedPath(sah, '', 0, path); } return !!sah; } @@ -20461,7 +20752,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ xOpen file object. */ getOFileForS3File(pFile){ - return this.#mapS3FileToOFile_.get(pFile); + return this.#mapS3FileToOFile.get(pFile); } /** Maps or unmaps (if file is falsy) the given (sqlite3_file*) @@ -20469,10 +20760,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ */ mapS3FileToOFile(pFile,file){ if(file){ - this.#mapS3FileToOFile_.set(pFile, file); + this.#mapS3FileToOFile.set(pFile, file); setPoolForPFile(pFile, this); }else{ - this.#mapS3FileToOFile_.delete(pFile); + this.#mapS3FileToOFile.delete(pFile); setPoolForPFile(pFile, false); } } @@ -20530,7 +20821,6 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return true; } - /** "Pauses" this VFS by unregistering it from SQLite and relinquishing all open SAHs, leaving the associated files @@ -20552,7 +20842,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ @see unpauseVfs() */ pauseVfs(){ - if(this.#mapS3FileToOFile_.size>0){ + if(this.#mapS3FileToOFile.size>0){ sqlite3.SQLite3Error.toss( capi.SQLITE_MISUSE, "Cannot pause VFS", this.vfsName,"because it has opened files." @@ -20623,7 +20913,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ util.affirmDbHeader(chunk); checkedHeader = true; } - sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + const n = sah.write(chunk, {at: HEADER_OFFSET_DATA + nWrote}); + if( n!==chunk.byteLength ){ + toss("Expected to write "+chunk.byteLength+ + "bytes but wrote"+n+"."); + } nWrote += chunk.byteLength; } if( nWrote < 512 || 0!==nWrote % 512 ){ @@ -20631,7 +20925,7 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ } if( !checkedHeader ){ const header = new Uint8Array(20); - sah.read( header, {at: 0} ); + sah.read( header, {at: HEADER_OFFSET_DATA} ); util.affirmDbHeader( header ); } sah.write(new Uint8Array([1,1]), { @@ -20649,24 +20943,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ importDb(name, bytes){ if( bytes instanceof ArrayBuffer ) bytes = new Uint8Array(bytes); else if( bytes instanceof Function ) return this.importDbChunked(name, bytes); + util.affirmIsDb(bytes); const sah = this.#mapFilenameToSAH.get(name) || this.nextAvailableSAH() || toss("No available handles to import to."); const n = bytes.byteLength; - if(n<512 || n%512!=0){ - toss("Byte array size is invalid for an SQLite db."); - } - const header = "SQLite format 3"; - for(let i = 0; i < header.length; ++i){ - if( header.charCodeAt(i) !== bytes[i] ){ - toss("Input does not contain an SQLite database header."); - } - } const nWrote = sah.write(bytes, {at: HEADER_OFFSET_DATA}); if(nWrote != n){ this.setAssociatedPath(sah, '', 0); toss("Expected to write "+n+" bytes but wrote "+nWrote+"."); }else{ + sah.truncate(HEADER_OFFSET_DATA + n + /* Ensure no trailing junk when overwriting an + existing file with a shorter one. */); sah.write(new Uint8Array([1,1]), {at: HEADER_OFFSET_DATA+18} /* force db out of WAL mode */); this.setAssociatedPath(sah, name, capi.SQLITE_OPEN_MAIN_DB); @@ -20674,8 +20963,72 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return nWrote; } - }/*class OpfsSAHPool*/; + /** + Returns true if any (sqlite3_file*) currently opened by this + pool using the given client-provided file name (as distinct from + its opaque name) holds a RESERVED or greater lock, else false. + */ + hasReservedLock(filename){ + const lk = this.#mapPathToLock.get(filename); + return !!lk && lk.lockType>capi.SQLITE_LOCK_SHARED; + } + + /** + Implements xLock() for the given xOpen-generated file object. + This pool holds its SAHs exclusively, so its xOpen() represent + the only connections to a given file. The locks are held + separately from their file object in the same thread the same + way in which os_unix.c:unixLock() distinguishes multiple + connections of a single process which share an inode: a lock + which conflicts with another connection's lock fails with + SQLITE_BUSY, and a failed attempt to get from RESERVED to + EXCLUSIVE leaves a PENDING lock, which admits no new SHARED + locks. + */ + lockFile(file, lockType){ + if(file.lockType>=lockType) return 0; + let lk = this.#mapPathToLock.get(file.path); + if(!lk){ + lk = Object.assign(Object.create(null),{ + nShared: 0, lockType: capi.SQLITE_LOCK_NONE + }); + this.#mapPathToLock.set(file.path, lk); + } + if(file.lockType!==lk.lockType + && (lk.lockType>=capi.SQLITE_LOCK_PENDING + || lockType>capi.SQLITE_LOCK_SHARED)){ + return capi.SQLITE_BUSY; + } + if(lockType===capi.SQLITE_LOCK_SHARED){ + ++lk.nShared; + if(lk.lockType===capi.SQLITE_LOCK_NONE) lk.lockType = lockType; + }else if(lockType===capi.SQLITE_LOCK_EXCLUSIVE && lk.nShared>1){ + if(file.lockType===capi.SQLITE_LOCK_RESERVED){ + file.lockType = lk.lockType = capi.SQLITE_LOCK_PENDING; + } + return capi.SQLITE_BUSY; + }else{ + lk.lockType = lockType; + } + file.lockType = lockType; + return 0; + } + /** Implements xUnlock() for the given xOpen file object. */ + unlockFile(file, lockType){ + if(file.lockType<=lockType) return; + const lk = this.#mapPathToLock.get(file.path); + if(file.lockType>capi.SQLITE_LOCK_SHARED){ + lk.lockType = capi.SQLITE_LOCK_SHARED; + } + if(lockType===capi.SQLITE_LOCK_NONE && 0===--lk.nShared + /* Maintenance reminder: the && ordering is significant */){ + this.#mapPathToLock.delete(file.path); + } + file.lockType = lockType; + } + + }/*class OpfsSAHPool*/; /** A OpfsSAHPoolUtil instance is exposed to clients in order to @@ -20829,9 +21182,19 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ option is truthy _and_ the previous attempt to initialize this VFS with the same `name` failed, the VFS will attempt to initialize a second time instead of returning the cached - failure. See discussion at: + failure. See discussion at + - `preserveOnInitFailure`: (default=`false`) If truthy, + initialization failure unregisters and disposes of the VFS and + releases acquired handles without also deleting its storage. This + does not undo changes already made during initialization, + including `clearOnInit`. Otherwise, initialization failure + invokes this.removeVfs(), which attempts to delete the + pool. Retrying a cached initialization failure requires + `forceReinitIfPreviouslyFailed`. See discussion at + . + Peculiarities of this VFS vis a vis other SQLite VFSes: @@ -20868,16 +21231,17 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ - byteArray exportFile(name) - Synchronously reads the contents of the given file into a Uint8Array - and returns it. This will throw if the given name is not currently - in active use or on I/O error. Note that the given name is _not_ - visible directly in OPFS (or, if it is, it's not from this VFS). + Synchronously reads the contents of the given file into a + Uint8Array and returns it. This will throw if the given name is + not currently in active use or on I/O error. Because of how this + VFS maps names to storage, the given name is _not_ visible + directly in OPFS (or, if it is, it's not from this VFS). - number getCapacity() - Returns the number of files currently contained - in the SAH pool. The default capacity is only large enough for one - or two databases and their associated temp files. + Returns the number of files currently contained in the SAH + pool. The default capacity is only large enough for one or two + databases and their associated temp files. - number getFileCount() @@ -20894,11 +21258,14 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ Imports the contents of an SQLite database, provided as a byte array or ArrayBuffer, under the given name, overwriting any existing content. Throws if the pool has no available file slots, - on I/O error, or if the input does not appear to be a - database. In the latter case, only a cursory examination is made. + on I/O error, or if the input does not appear to be a database. + In the latter case, only a cursory examination is made to + determine whether the input is a db (and only in non-SEE builds, + as we cannot distinguish encrypted DBs from garbage input). + Results are undefined if the given db name refers to an opened - db. Note that this routine is _only_ for importing database - files, not arbitrary files, the reason being that this VFS will + db. This routine is _only_ for importing database files, not + arbitrary files, the reason being that this VFS will automatically clean up any non-database files so importing them is pointless. @@ -20913,7 +21280,10 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ called this way is the size of the resulting database. On success this routine rewrites the database header bytes in the - output file (not the input array) to force disabling of WAL mode. + output file (not the input array) to force disabling of WAL mode, + (A) for historical reasons and (B) getting WAL to work in this + build requires doing a (pragma locking_mode=exclusive) on the db + before using it. On a write error, the handle is removed from the pool and made available for re-use. @@ -21029,6 +21399,24 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ return (initPromises[vfsName] = Promise.reject(new Error("Missing required OPFS APIs."))); } + /** + An interal detail of OpfsSAHPool, called only by initPromises(). + + Unregisters and disposes of OpfsSAHPool thePool, releasing all + of its SAHs without deleting its files. Used when + initialization fails and the preserveOnInitFailure option is + set. This is a no-op if thePool.getVfs().pointer is falsy. Returns the + undefined value. + */ + const unregisterVfs = (thePool)=>{ + const cVfs = thePool.getVfs(); + if( cVfs?.pointer ){ + capi.sqlite3_vfs_unregister(cVfs.pointer); + cVfs.dispose(); + thePool.releaseAccessHandles(); + } + }; + /** Maintenance reminder: the order of ASYNC ops in this function is significant. We need to have them all chained at the very @@ -21066,7 +21454,11 @@ globalThis.sqlite3ApiBootstrap.initializers.push(function(sqlite3){ thePool.log("VFS initialized."); return poolUtil; }).catch(async (e)=>{ - await thePool.removeVfs().catch(()=>{}); + if( options.preserveOnInitFailure ){ + unregisterVfs(thePool); + }else{ + await thePool.removeVfs().catch(()=>{}); + } throw e; }); }).catch((err)=>{ diff --git a/src/bin/sqlite3.wasm b/src/bin/sqlite3.wasm index 2ea991b7bc2ad85a684f012a793985b0c5b9a721..2be0556ad829aa59bdcd3a19a688f38d131cf633 100644 GIT binary patch delta 363538 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

Cl5C)x(o_tQ& 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 K;Nr^%tULg%!|AjD delta 354086 zcmb5X37izg88%+k-P3dR%=8=!d$K*l;i906awuq|*8nPNJfkt{axKCxu&^wO2Ixf* z5ihV2@J6Fz6cjv(Cn_q&3*!+?G@|i7F&d+Zk?(n`XJ(P)_y4~C;%;}>@zz`KU2j#l zpS?2VjzvQ(F@E-RDTI)(g-%~?)mfV7iE)O9AL%V0(mxvFEsDhQGtcNF7f2743s?|V z6};2t&6D%S>7KVhjFaBRk0(g~WbJNg`Y-D>eqa4c+&!cZQ_nqP;mMPlJ6gt15~iOs zj*#X(XBaCa>b?$54qEuL%#q%Qx%YF4gef&MEJY}!OI_Nb;*SxQsYECt^_0-%-g{S9 zi+J2H?0CHtMjVZe9!-bIkYVehQu0R#(=4s*SAx-cfibPoUkYRu` z(`c{9JVRvn(Pc=WGsX_ZNg&{$|2$Hyg`}oip^(%CVBlUzzyMUC>pF)66kWF~SjHk$ zYo?SK5Yq_hdPwJdgk)ol1IYS%Y1_O}KYGNl>h(rlI(_>ZB9zVQdL*KUBBOwZ2*ok5 z5%OORAL5x>Sl8oW33>n$kTv!FFcnS4v`_^>hmCMdnlTxQgrsSPO<|7#!f_2P(OxFf zp_my4NkmBY!|cqE5zIu>q?Q6YsZk$_(>2pDjBr(~sw$=+=GZ`w z#SAkXk|Haraql5(Kg!_-C33Uo$G)bJ+^f$(pO?&V=HOwRzN1O$&TOw64u7Zv+}Ymhx%hlCiE z0Yif*g)oYeG7w2ulhOfC7nY_2m_f4f4_O_GT3Hzd%6g0frJ3{#lZaR;*qfo2dYg4hSb0pSCpqwxeS!#o9a%!J-5*eeT0%P0UDS_HHTfhndiw2)sNuk}oj2h-GKgj5uOY{eXiFk}_9!|;v>#Y99i z42(i`w0-+&$ z88Z{p3=cDnK&miH05w1X^bQ$@1qMqI!Q>!fLJQTh35rk=ks-~nB4Jaj4S|(L7!s@L z;fSumC;>$v4MPAL8ZrZo28O^1RL@`lkR~!5#6uyF!LtWpGmRYD;Xg2kmLL*}P!^!q zAgg6&Obr?iXeiP!Y6S3dq0m9-uZfIE8~L%BOg;k>0O$tv7o-Ka5NueM${YbURwM^# zVHv?3(JP{eVL@CxD7aB8Bas+nA(lsHi!vc%f|SCVe zvTTzKw*qSm>`alS@WJ$ek^n-CLSm4J$sUDx0b;A$dL$Ef_KL*3NN7M9Sfhmzt2Hdr z9TN=YA{flD(o*yYRceMF>d~VI#1*XU0Y;-PbQI{OnKcmE;3q9aCW8Sj19lM-rVBG8 zM1Ht{4hRbbwK5POh!ISP0fz$J!A*isr60?GDd998&6<#r#6QDG@((5g`HY0Zm@^fX z+=1A}Bs+%u`ec=70+_D;sX{6G!Z~o>7{>tV`4dJj{-}|uy08n-EL=3Y4G26GGeYu6 z3A+UYz}AF^R#L{&F?bc|7`lXEi(=v!<$4TL>ivIFzD7ypSTR|OL6Yi zYcFMxz$p#2#~Qt)h)dg``x05$gaa!h1WA#?{2}_Gnn+E=stswDrg@Mj{=o2)HplhC zJ&ho!6^R^=`NE%r3>L&J5`o9n!jJ>VlWl4ha5%6ZP+9Oe7T2R83Ab>0Q@5DP>*wmj@^7lD0TGSzn(V za!UV(WbY)D9o$XU^#+sr!3hBmIBMm>M1p=eC6md1P?Uy-l&&`<5@^sT(TAZ+Dgi5q zE{7zOW|9*)0qUu|sQ8uKSIUDiI07Ca4hg3X89DXPLoMxRq25pu2|hrilzxO#^4B9r zo(8{Ygyc-|F9T%qq`Uc|#&~$e;Klw)=?A>z>{-*McD5YQJbnDMY3&n5lT|91+|kk^ z4$GAu&zd|NA>Nr&XLq)Ah*3RuFP<}_TrtKjRRr*c4i;lmr6NR#YK)`OCj zQ+hsY{IoeO&7CcCJH_O3VaNCxliH`xXqi1*%q+v2-Ptj9;`EtfR(U{_%uq$MD@x$z zbWClYIlg23^cEt0Zg%(b3GMCETE@>13(^Obif6ZUOdUUM>bWiA5?LO7W=9J^v^1Z! zzqnkMi32Lk6wCahvptVmE)yjH9WAq4I>i;;&06NROcZ`Mu!-%{=1iZ_JatB=SRu=p zPo6p>7;I}wsdq%pM9pd+po{{ zsJUO3IW-Z}?P#7bb;hKrGtQhXy8M@N6{nrAmB$KbKjECtmf7M$t()(PC6n6cOqkXp zF4oGd3z~B#m+lDzh2Z<;{>X|-Z<$u+M$ltsJF3BrIyX+x;Ia>w3J= z&3Fnzz|}wdgQ|LXZ)s)iQdQ*AU%Po%Dg#m9-UEo@(2nj2s-`8OeP@rxicjx$Pf0aC zx1}T8uBQB+|3X#0eBb}Ps+ar#_f@q(vt_RMs2fZ-yFT^Z>dM1E>lX9bozpv;r_OGf zJ9FCjsWZgq-8iY5Qu!C%z*PB!IkV3ZU-~yz=T6z#%?VXCyK{W!oY~?lEnXrruHx_A zfB_S-(=w@< z*&XmT;sU*F6S}Ksw45y#`@gBF^DflOHUQ=nqSra4y#rRcLu}M{xBq8SiSPMI(X^>; zE#m&}{^;A@454nBF?(wJ4Do>XqdIcdwu~dCd1}dsc1M%a)dst~?EtRXpzBRa+yU z_n)h+@?PwoV^LGZAG_zMiaMsuZdL|UywZ(}s+k0jJ$1&!PVs8@NNp|WoZa3rsag4z z*Sb5D$^&hFy;$K-tV{3nC%vpt6WgcHoCc37-smRAw5b!$YUxl!{1ob^q{sNBd6qTkC5E zeBX^&XUF)73b9>!*$0EP)2DVePib#&gM;2!-=lh=QP!1?_G!~5jGx#RRG;U+Q(x8d ze4{Lnl-8o}zt~SZJ#&{BWo<#Z@*0==2Rk)mE;Duy77#ay%Z+jjGi@p`5X+2msM9{P zWrkSZ4U5m5*fsw3PK|!8QRA<1Dnl%}&VR$Hsky-@t8d^rI@^P3i8X#I@5med#=PUL z?FPsw4U#7wFv=pqB9Ij#@nCm5m`WwE4;y8Ap=k2dX)UVwk)ISZ8`(Z%+BxDeqq?ku z5L~owpV>Lpe<>f4oBi$i+RDev{bnP?gqdibG3D z-st2)FZ~Up(x2D6QWJmn&+T11va@5lc;Bckj#}zBbA0E-DdZ98JzacYl#J(|_2NVS zi$dklkN&Fx1GkPADDuZ;0+;&2Nlc&Fd5-wRKe%_D{M0|ScfI@!xH$52|C-)ahkRj_ z!i1vsC^W`*bdqa3jgqn6vr=LDmH$=my!ZDq9l9H-XyNNJ^|~wCXNrISkK&na;s>K- z?RIMokMf`YQBH^OV-azGd7lbxm*L;mr(SmXTl>`3E)10j*bQmw4A`Jfah`u;zic9S z2&jF5@AR#ei}ANQbbweE>fs;Sw}&B?hkD_r%D=p?sb8V)EBy_9!@3`;L3vM8&3}de zRo{vbk+~9gRdS^t?^i3Y@f-Rfc0{K{zp8LB%Ju%#ezmnX{13zsn@t?w3HiUVUp?gi z@qU#RYeQvwI=g*N$HbPYlf(x9i+(lw#!#)lvtLCV{-?9Oqea{us^)VvSUcT=A@Srl z?-kSU4Qj%(=D;$F`}`$))z;o$9=^HxZ0rIwx6GI`y}5NZy`R5%ubKlkg-R?aHh>Oc zZ6|&oDywbK5#`DSiU<8il_bY{j23O z{=EKGHCsbv-x(k@Yck@Y&i1yJ8UFHyp3!FbOGd(f02+1jIsc3PwfgfIgc ziF;j#@I~QGk^3WyBiBc6h`bT`bL20Pr=oXRk9gLj*5}sWWB-hO7yCZ;V{BKfD?a%0 z_*L<1;MHw<^d*`5?3eAY z?QiUV*x%a!w7;|OP2ZQkKm9;@Q+iwa&GcL8zos{*A5TA#eloo!{Z#tH^vCH>(*H^? z&b*&qow+WvCUbXYS@!bmSqtTP@_c!LTr4k?OXNjzsV6U%e+ex%FErl_?FhXS`djGz z&&+X?HRes`Z_S&{Tg+R{wdQT+@66lH zJIrOtiTSCyGxAmB?~$(~-$ecq`8M*;$aj(NBmau*igZO6 zM$e0$AH5*DIC^1pN%W%V(&)v}OQM%XFN-dVu8dw4z1oXj7yUNzUE+ttkBME0g~{`h z=O-5>7bh=FE=ev;UYxund1>;pqr_l74bU^2+4OXb zevo}Cw>9}}@(;=9lFujKNWPhTEBSWvo#cnfkCGoJKTUp?{5<(Z^2_AThjdG)bi97 zsjE}hrPic=o4Pr5OX}9t+SKn-ccj*()~D`F-Idyqx;u4G>fY3SsRvTOPd%7=DD`ma zk<_E9$5NY9kEfnUJ(YSUwKerz>V?#csV%8(saH~eO}(4?Tk5^k`>797AErJ|eUkb# z^?B;c)K{smQw!}2?8Wxw_Hz3!+uLAowC}d>wePooZ$D^1WIt>_Vt<pGhbxB&U};kN9NniKQrHDzRz5d^|LFoS7ujcS7ldcugYGX zy(W8Y_PXr#*&DKJvNvXL%KkQcbN1Hk+U&aQ`s|(AyRsXy8?$$3@5$bmy+8Xvc2oBE z*$1-^WgpHyl6^G0Is16_iR_cvE!m~Hi*uLcPQEnvS?=@P&YY#)rN^GWYv1>=@nK(` zi>HLU^DfgB?v^*AKg31+L@7N-xUpXtBi$#qNV{Ju?nqZSTFoewJXI<|6Ri_H{euP# z)NZ=gpE9Vw{phoDs1`xZo6k!}x7+<22ko!DzQuoS(0FahQ~rVbk4MVj>iz5TuWCaz zfp%i3wjG;HPI##Hsup)dgSJB}ghwT!{tf#NthAzWM{5$pbm8b|Br#xXA?9xK>kg=r zoBUx19FhCzsZhaa(B>gWoew(+v{~`Azv6&n(jQ@j&j{LdBdtTV)yAq_$7;Rea#Vsv zId}Ebe(m6&X=r`g;QqW^ICxO-l#l(q5HUtN5rTSu@XW+&17LvKPJ;9&3@O;V0XGQT zUom9B9?f1D@}j-Qn3qpD24D%!VvT>t(1NwhXc8y0sK36%e`Dy+PWj*=8FF|0AmasL zH^yBNKThgkKm#aZ56WW-4WJS3K!OJCP24$JYf!v{#fBpRO|o)}=4fpotRmzVzkOJ< zT{z+OcMiN5_v;QkT6^X`|KA4|!aKeKLBXLu2Myu0e|^wC4Noc}H)s)iGkEC8 z2CdQ_8r;;{Tcg39Wk2TMdC>ldFy1-nc>6Q$7oaDGeou4c(Z)#s?Sp#^QMi1h9f2Bk zyFFmG1KHTFL732dwLv}*gY6-TmwlLj*>DFK-Zi`~_M?vNPsp47x&Qj`Mihoe4Ay?s z{X<6N<4cK|)}T4|Qh(}*nm7PKC>0?8@)0LSH%Hi2+Ryl(ji`}N`jLb8sa9?DksAIv zVxUO7%j7IFz+UJdeei_;Ifuat@&DT#2xRvuL=PDx*ZLz48Kr&nw13_qCu^HG_2b0xIUn_zT!@^oWwX>6uW2CKAG>EF(4nm882x6>@G%o@O=f>_g-3 z>UUFa1RPc!(Y`_3M2U89R?Xcm<8VCO7CeX}6Eg0uc_!p36^avngLbfctpW&zDaeGT zN;&46(%n`b6L)GDRa=nm^8rNJS^z8GgE7d9BHHf5s;YyS0zM(VD&6fHX;0o1FemPg zOFYw!+9Ta8DO7;K4%Kq*qCbUP z3v3jwb#x73pbqUv0XobR+Wzov3iPLt-YWz$7mLgQ) zE4gG=nBKU;ogQy7(Vna-K;=ARkG}Fe&fi#+M2)lCy%W2Ru_xoBz7=E zU{qoXI)KyxYw}u3n z0rVEGoog$IKBUZNHz0=K(Hb970w`Y3+gWCVmSA8%_+e-)ESJ|Vr zf!-y*RXsB7p;rTh-P%XQs{q*k8J@&Z6c|UWw~x$|P4QnSpA*QCqBa_>D9LGFDhCB8 zg(^o)&|R^?8Doa-B|!&W#J%`Lsd+j^aE;MwBzL=*=5Bi;)LMWdHfXl{#m&-& zUfQFGoorR|0^>{JctHt3wY%-P5M=+#Po;fLj`M%@xsZEp`ANi2RnsYGY5+>zgWCgd zDSCkjBcbrvIhApgk6f{NC=MWU)q$Mn@D)aL4RDnxq&fwFOOHUeiX}KLZQF zp#C~Uk1phd;2GTWUvUeO4evr~=z;&^=7)fzYzMm)w8OJQ&shWjaTh1knI1nY0HP}W z=}m?4$}B*@9kI5c!7oyx=}sl2Xq`fTEKtOqLpvVVMwUQgq>}?HzOG=*Cy$0u7vS7z zrvMA8KvDB|Hudm;Y*7?t(WFs@H5f*AEa(`l%y5A;m%qxjuU3U?nLDpPxWX*c}Xs8!D zT#J(cDQG(e&l8)%4U%Xj=sJi=Tk5O0Vsq6ri2|i-!V^yfro9= z+-1iH^B3R`ebMgPr6~p&MWU<0l$~e4fc7LPDNp_@f)e7>e&12`#}-L*(f)e1XD*QQ zU^h0%wnC(j&=A866cw&EtB@tZG#X@3L*#9AH(KL}*COsV7!lc#uf^?wt@$3hzj9PV z!!x-+sigg4&Vg>KNkAN-`}VPp%){gi6qv`VaoJGSLCTA=L>6?8Lv7YvFAo=#kK)(D zZzX;qfB77KGx)8*Z`^lBcl55v#~eMMv0`*3IV-|T$_n#RX_;|%K;H6SAAS0yJeck7 zlC!{veMcuWNA-i>8lBJ`Bd=K@GAfJlZTq;jaPydKn3I)G7?aHdpaA+xrn>MmcT9~V zDPM;d^qM?Ib1EF&Up=O;Sz#Ff< z=&c1E4#1IwgiwEgFuSWzF(zTJ8lMeSd)@7;1`0iy=8+ei9toL|2#)08m`V+yTdvGU zK{DRPH4oHCb{4ALf7}RyLw2BZBt;m(G^k6`MqQ;nVK?0B&YcCUBdw^Euz-s2q|V%OZvI4uQMujIsXTfWy|s0Sn+~yzbPkjRPXc4hFRq!cc*v+k*x~x_TRI3x1knU6^ZZ!Tdt6wU7YZK-=C5sq$_)q0QFJP#x*k|d$c6^K&^%$X#}J*oNxFtW3;>b-2S-+TYCgfb zi)BQ4I@Cy?)<$77&{%KF!{_ED2G?okNISS{Xr>b@jY~l-Fxp3ZN@+p1Iu;Oeb%4-O znTKUp;#-Wd6)VuZp*Wuu8WY{zD91V0sdnGqwMw7W(E&>hN`&0USNb=P?eB3im_tt` z8$TDtpL}n}M(7CSaS_KPDjZvlHB>WL62Sx3rl_({$oIA?p!<7B=03Vm6_{m|Qim(0 z-K5-EJpx<7g^_2|#)jgMlfJ{nu|;vg3<7hen&-Mr&4~pr{xCe4Q!vm04PlSm&GLwZ z25QOyu!@HJn0F-1R6v{nBt*$Udn~L;O5HWaP|uCLr_;bkT(DZfA~ThhR@Tfu3DAr7 ztcV)eqAY6^@~a)5NI4ahUTA_ze&N43ii2p+fthP_9s8G@JpEDtScgs5*XQe-B&5#+ z&V*w-VhG3z8AG4-R9~mp2{pLZFDO7=hG_OYwTO1=?31}#94K<^LlPoPMSus5Da6`Z zofx3^YLbg7u1>GDZ7_&x1s3oC{IpNR^gmvqJFvrs>w!NOkW-U{MS!H!j2A+xNr+9z z!O$q^UwBMM0;^&SmcXjCL9<3V@ea&e9Mi!9pak9|;O3B`091=p4pCwhnz*-5QP~pQ zyqGImXm2P`M?F2K(J@?9zz1n1$8us`CqI;5>E?sZrR0n)t!QG4XF~?k&@6{wgc0r}b7`={#DtHovYlQ_b=+s!~-{|#u2en1R z2B4c^;5N(A%m%^8$a(oXAVpbIPlcenI}$5V(6Qce=H+2Pn&kX^FSMgy4FOyxf#?wy z2bP$>C)MN&c+NM0{tjUEatg;0eqJ$+CZM2WJvn;)ynNnqfP`}dZXLp%7r>=XC*6uM z2yZcHeje;$Xu-Tfucp{MKr?Fc^0tTZv4uC--he>DH zO`2es7ntE}ocJO%7qEvGXjAQ2{>{ht@#=S*Lmi-ofH!6Uc|8tcg5lJ!ZDs5S*$c=@ zrGu;kd$=0X7b6>vv$oaIgDPzv2UpWARblG8*O37AV~Ik@^@1t|!TpD727BtJX1TBW zGO(Q?G#lhLvUF_CZ~=qsZrA}IpaBnaUOZqA$wi-jQqCLh~;J^|a-cM2A z0~+W-S_QD&y~=Z^lhYVG)aC0rTZ2;P_AgB`U(cd?#LKO;M8Zla6|Zm+4kXg0z>4Z6 z{ZS`Y?DZ?EpFm80DuI<(`hg6ioRu&${=yS0CoIz7MTk;^_8Dv=Z&?r1ZUh-CgHfl^ z%ET6Irek11{qvGRu;62qZW57H*-8X9g2@HwS<3(Si9;zgm*4=}6R&6xQK!}ZH9??7Bxr$- zj^2jzfZGBjoP^QPbXmxH{rRfFBaz@%j!BO|^p8Vr+>G>R#w zWG3SQgw9YGxL_U9s2sL3J>-*~m+&E620=N?T7FrxH+aq&8sFKhNvdp*cgOd^v+JWEg$35lkVBGT%C(_cmgn7 z9$iz2<-@GPLo1_Zj12$QeYMry%|q_c-A5yBag3R9VwkfN^ZTDtZ}$2naUhX%ZKt{>pLTP3opz`xb|SIt0Vo<4 zz^%l$={?Z}i~XMP5R)>b-Fm0qx}OvyB+RvPMVP{|rEZW5c3bN zMvz4Tbg_&>jN!^SVmm_t;VhMw;EE{uDEvtu1vdqjnogR(hu0L+{<2?T1??CEMbbS8 zB*XkoC5d^nNg@aUFcVAVHfV~fFX|b9qpDHBi9=FIHQj+$!TCe0P)s5&nAfyJpAS9) zaRmEHJKS_W4Mb|7LR z)15T5x%#IA|8!6wv)_C&8ndPxF(fmco~>>68BXsB07@}WgFF7qr{+zQ)HVI@POYyj z(-3%YsaTEywNW}4=%HG+C;5697MMRQk?z88rBkVv ze_XX0?m>!;O7*(_Lv?aL!pkNUmIr)UfMr9Vd}8p_AdpTiMdgxX9__gU>Bwr~zfNg_$D zo|w~e!t0#)`g!vZ9zjp30mXQm+OD+*OHs9OE5t^j2pL~(AP8e2CEqJCWeV1 z`i7{jMfyF8fHMj;5pLKX$2J0{AtZ&O$6WC0oO9^^uDz*r6IuUaO9>Mp{Y>90gg@`j`-_O-%G~) z*G}KpV=2bP${9Mw>`;ge2Rr%?F`5G%t4s`tYA7^eLD4amT2zG)F-h)+qMEJZNGU;6 zO!ByZ;epk@yCa9S!)Q(;NNtA!$eZm!mcgR2puFl(f{5%~8`xC@OcSJf(gUbzz(Ro@ z=t7@^-y@0uipV1>3-JFb9H*yRdMO+LDr}6b1CotSSj_@%5VN3ksAi*J#rJ96S62I{ zHaq#GLT{kE4@YR^=tm(^1b(F~fqzZ&oEco#Td;?4zz!$@I|szodJo-c@DO<+SLr&6 za2%?VhS*dSv9Mfs%mD9lTWhzr7Q|PKDIj$N6NXU1-+62g4^F?#2lPVbhv`cs3rPAX zco&Zsba;G>1v%up&%}l-{yJ7MbOg_cYl)%?U0_MIz*3amkgPy3ga9Fe+$HuYxJ4Nh zI(^H{Fs>Q^quRrQ07;`*ayjYWI4Lj3`%g}4@UI-dubkj-89&r&DrkuE!tsJ;kMqq5 zKbM#IV<+q@C;R74c+%g$rCy%wAKxviTlpz$$R?{t@~^B36Xi{}NK9udWb@s^x4T`erg+?65+dlRD z*ku~CKze+L@Ta!+=>_22bij(5VUiKwM_^`(YJj!K-_*Ld_an%n6i`uX&;4viYg#Bz zg^yI>D>?<_g!mi)f}Vm6NZ=u{1NKIUzDLHRKn$_St8?_e?Kn53^u@KRTmA74D_I`iy`0jM4TlO1lxCNrWfc zpYgAsF~Zw|T{P|wLfVjZ#S7G`FfGCoJ|o{c zjGNJp+J%3W(A)vAHthOCur&&!%hrIhT~#-5PZ%xfv^~|3wai%!P{ml59f+5gtKDxD zHnh7O-k`>JNtP;%-L8!$lPTbDT!lR}6tv9xQKbPLwWNTJ7j5pMjb^JOl=0#0iZeVO zRj?yuZW&G9LEzA#ft%(&FHZ19K9>Zfhl zc+VNLK9aJ-A2WMzYX?%TAS>|PvC^MEyE$DfpnpO+OFy68U&E!c^M;xoOK}heZBw&? zMLZ)Vr0LFbcP#b)*g3%4iT71KtiiQ)%D-wVg#(>vEg*zszN+ggT_qeqFXW!VqY$h` zlgwj-C?A2Ihun7rylZkYd4-4*JqgicxT$&p92DSTZUv1fDBr>GN?$jx z5cAj$OUktc9&dpIg|&4I?@1lsL5v(nd zPk{ZVY1g=gp<%`Z{LtZ0OsNWcS<54wllGr z0bv{rjG)~?AQ*AG)UE+gvCl5RJqC#c6a43PQIlnl^*=t#k#qgn*=NXRe=7c-<8M8? zSFe9vA?51a+sPi9=ZV}#5Q zph{8N?%hkV@9lqmPQLb|=R!d~5%!DbHV5p|D$%xjtKWET&ff5>8cHqAHBRWnbN4-9 z)4Qp>4w8<92q8Cts19QVB+*^l-kxO$pu5PUF;^LHIuJy?@7zJvpFI_V5RpDSSz<#d zxINs*-SqAizsVm8s5A()2T)kR?W1(654gzkh`V}g5n0{6_xTWlX1Fb+7fj@?*I|Tl zzv+4U+Di}^*fY52j3)F0sxK@ABpJeh(;hI?9z$@A?f_4q_m`h&Htb3`Skkk^S0%+B zXxpIG;&{?)zbVuLOU#&(O)b8;L>_qFP4D{Ic}owx7$0V!gmz)|r1b%gDo$~?ZG`2}H@{E#`agiX_6&dh{2I#QALb9$Fr2pFn7!^d@&Y^*cC&+> zb|kgv_~EUf?DYGS+lPprwP@!xFq_r<}74bS?=dHu9&|KOkF z)eKy@R@!@2yUF+o2v9&;2Q~|oH3Ae0A^QdBysb$2@e2QOufE^XFIe3UkK!Phb40w3 z{GtL&;0JObAh9?3X4n4SZW8W3{gzOxO82r4aHBW{)>kGqO~Twi_;Ilo7m($1*f;6^ z{e3)9%%DAvniIj>?I?103Z8fwKp7~Lfc$ja<<|oO@}{EUWCqIu=l;-XKBAi6Nw|H? z(Z<>v8|Xl`o0wQ#;0Rbi_W?>W_RZsU{QMRH;Nftv$12pS3~ zlx1Im6_vX*=KgUj8*XF6YCPuwBWU6N5oKL|%fh`WBg+>KrNlhD@RSj&%aREQG)@25 zNz-)m-2}w@`E;R%dx?WhC3_J_65LCBk$>8GeMA3d^LrMbcckpU>AA8^DNja;-3A46 z>CYhDyq)iVfBw+S{VWV@0`i@XyY4yPU6e~dq}slR3F|KJ=lhcvjgX7{n-&e5Ty_J{ zgf$mJu;2`S!|(yN8R8C=1J17o6M_`dH|{3Q@G}q|cgI&W3Tj|l_?_8m+7iY-f`a<+ zyZ)gU9J%+V9E#P+CPZuz5rB!0Ec1{S0K#T}m0i{Nv_8<^aY3E7bF07WfD@c06yW0`c{!?ryHUp=GE za%l9rLTo`Hic>?hR!WGlt`P3?8!#_LT3=Qpo{0VgM$nWH{BxGnrN%N1FH2BY__r+i zB|hfx!;*t~T?s{?Eu-0It`}VnQFXFZ$PC)SOcb z6Rv5v%(@R=QraDUdTC?bY8ihwDy^a-g_R-+`zk2Ei{o`?ES>IMEuraH7Xs$PQia&$ z(@<@LhNS>clAM84D>Tr!y$=XbzqhJg1@sW`-`9W&s&k?bt+>1|@*ZQwqe2~1(Ph8S-pADL_rBS#@(CE5N z5M=v$bOGX2HHT~9+%#k=>>K=FTvF$)p)TMsjUxx+{H}WXE_kx=thx&!K^7Cdg&TJ4)~qzk8+ z(acgnrG29xyL4c$t-+LGeuVv7%mg|G`mhvREL;7PF6}RG_PtBbsawG<8b{~WJQ}P< zGe;f$LwJ}r{ff&5Rg!}=yl^NZ$sNU_KK3pC8JCT5Z|4M!kebd+*jM-;TsAg#o3tk=7x+7W#N`bYH&e~*+odYH1JVYY zeTzT$@_diQ+aq>Aduest4=P6mu<8#n*xI^ya!&cb81H#M=G-%uW6@I_$Hb!mnm6DLS z!|M7={TKW}@-{?N1Lo*@{UK}80n4-BwSwm8A8+OV8ebv&a-7j7RDzJBj`>$c( zRl6%Wh<&d=bHxB}-QO7ADcRA|NO?2uahp~=iUxEaf?N$n2{3^r1#0u4F`oUXbT1xrvu`IHlL5?rnTKErTCGFX@dL2x=xGl;&^3Mlj6S?TnOb5kpBOg|F0gD+1aIb`eh<-;g zqSwfdH=!UT+jd-=)P~#UyI&YFOxwn1tSrF9A1}l?2fynE2O0vxAOQJ7wk6Zp0EpuA zKOmfD#bQZ(T~1js%)VgmC!v@;8wmsJ-ueV!sjXc9msjoU;e1LQDHM?hiO?8pY0LxJ zPwc|F|GI;J-`b!fX2+fu!~c7+@r*77ZuM)kP{@_W13@8*aJq~pAQpcF#vGVC(vK~Iy5e3=7hVZ1cn(pu7^;mcRMXBoC9RWqzbxrYvT3RqXESpco8*i4&G0YCk3siwdIs8E z>i56^bVKGDOrVEUt^^|}gr9o>ML4*LC&l4vpU=X$5l3 zx%x+6H>BwnjRzIXwS@=+I#j`pIuT~oXyfoc4b2p^2U~D%aJrdK4hjhd7W5Q<%XP+?rxYnTj5|kJ4{DZ(@WnAAwIgSQ$Fo%W+t8?T+(5M#I z?YP$Cx&^7MKDchhwXZ%h>SRB02Z$IdjhH#D}@gJhMXeiF z59pQ6lW*k2re@czSwX^kN>9En?2BAK$&nQX42vbwhJQR(#FXW#v9kvB{4xAG== zt-M-R;io5mdaOb$+jq5GDPvd4E9DC5%PZt^`KY`EFY=y`w|f`LE{RR}dA~XLoVnB5 zTBlB(GPz~a#0lfaHAl}l{j^hmdD02T9euPo>ZmcJM?ETkepr(`^3X#@9CYB&A%hPX z^eE&7s$s+6936)%GERVlaT^%WBDl5N+}!kaeCa6o9qz*hzH^|E(LV$DtFX^+9Ppum=nUS#?I-@zYUhgcUQb-WeLCL_`gR#$oytc&|n$(qErBZy1b|wAZU3E0AR3g0pxONz4o*@L6IT zEnX^s{6Lf-{1(T6IiaMg^;BdyK2_#GP?c~4lEqvMcjAnJp5P)SggHy134^g19U+zO zTgZik=tizr3jkw3iJ$@FBen$c$lG+by4Sw0;(rxMyKAtD3AwP;*Q*s9j3`yT2dx;Q zGph4oTmZch2O*G_dx!8nnEPd=^c{k9Fg7@{6bug!alM)iDh#sM{sZ=fLwO4(<3|+( z-wh*&5Jc%L4(D0-1kLT|ke42;8IT0){@sd7-a}aTsZ!5COOPW1Ss^P?uk5+7?k)GK z#=xwwn;GeI0R_dMdt~Bfw0EE5b|UFr1a#gOc=-}2WzT@Q5|i9;kwIS&z#=${`%g!C z31mX>;ZzbIZp|?cklOJqlkPGF$-29Y2SgM7A^^tj-1s19Y~<1$S-32O*LA`*g)lL| zYcV*Tufs)=*9u|-Ql1DQgARj%OL#;Nc_112>(veUM8Cm<{Jju331yhU9v(+M;n zst*BGzQTzWHj%eiX^D;K4Y_AOY+~W695qsC2;r^u|IeV^t}bam4@NL*2=l2t0z5TK z@e&6}hbqRE)H|US^8{dmyX#AR)(8(S%|W_jJ#Yz7DPo4u0cYRJtfAs#s==(4;VTYr z-SHEIcWVIRVTo@V&0M^wRnXF`z1rQS}aR;>oQcE8!UNmhqN=RVPHzG zIxB$?7I8XtV7pA4Ox0pSf#F360`0{*6N<={o#Kpzpm{gmL<$K$7Ia0d?jb#F7O^PW z0Yj-6bd$7hHooXb`~!r%wp({8@<130_ehy~D-c z`cHa;8$oYf_4d%6o!C8$+rdyN90s!H6=0MHYjaOZtOhTg#H^>ATeVPNS3azrC&C?QTknqjwofAJ&$su4sbh*fp;N33(QSi zhrJ@4K?m)rle+x^PAuXN>qaGL(FY1FA*|~F-|(PewC=Z1d6nO2QUZ3%PX|}3joB!6 zlQVlFvpc8RS3}waXN~c95V@{6uVNd`{SXT@O-L-D8=XNT&d)b8mxbF!xI@oDIDqb+ z0E>q(cM#st;hRxf(`LkN&Y<}y8F_MzGYE&*3xoXQZqFXsh$gev&ky?I4JRB+|5(tu z0^;JJ6n9JV`-Al2S18|K6*hSQ34n{8{V^`BTcdyH?LEA*s2Af9`$ZnT;VVV-K@qrf zVf~hpygLDuvB2AGJasPJCx!h|(SQ`oXzCMd;On8TPy+ze0uc)sO>0@?tw(i&X|vrv z;MI*7+5SPZZtQMQtWPT?MlF{AX5v-_6XcCJIeQy)>U?RfEcLPQN>*7(OF~pgsWK%r z(OFPq+63gbJzYRY!kBJhkjm>|Kbot|KS>CVf(c^sl)NlfJjV*`n`RY~rP7xrgwR?6 z6c}qDk$|mNuru0$^}n(RaaS2uSLC67jHW=5E^Sta$Fz*dXWfmf@j>ypEAv^@Fxuj~ zd|CGn6l0AO$D$sxZLLzAh`Y}So`ro<;A0gyH^!_jw@deh4pS1suoX+Np9rzdtF#R( zm}j67S;EC`&>QUp2-zztB^9kk|eTc7mcB@{$u!U$0+h{PS{ zMtN=fIKS7!Z;{EZl>DFs^m*RL+m0yuo_tdcGYNrFd1IxETJn*ASAAp)(x0f zmYf9bJ?k2^_sjJO#^#`VQt%EHr<(-yhG{r?P{@FkiPl0|AzpmR>gBM? z(xreNH=}ohrbIwEnPR98z-fQbUDX~;NfvWO1gloqoGmyi7%7o>Xoo#S#vF*s-CP^i zfi#lp#Z^^-gTtkY<)~0)R(Ba!)ZIqf)$BipF-cXTh;d3#1hIoxQ^jgQfsh5varJ5L zdmD83^9_pV0@25S(KW5Dg9KEvNjnb6foMv|=$)kU5gf5(y1=#F#@Y=LPRRl;N^)j1 z_itVOleR#h8|?y;1Zsh!1_XD}bJY4$CyAibx(dBXrcysOIS)}F0@9)v35*y#5Iilc zAVrSh<%A~h0-8|l&M;(|!Yx+bY*Wd47rqH+BC+g)!h~ma;!F%&Xb#-c&r)U)%avJ) zl^_Fv={(D=fGA8XI(;}_zMV(hMklT$mRzeCv=h6{utbl9znhs<_FmPD;)E0UZZrXO z(i&Z~VirGem1_;^K2@%6nH^0flLua{N*QmB^ zfqad!l(Q1cq~-77Ub@-Q4Wd{^Go%U?2ke_X)qA(1z?olBYNjSx>U){AD8!)tI5nAK z7M9TfGG%Z=n!4#8l&rrr=y8go6nzK;yc>cSXeL3Nr$C6}6}k1W#iQ_h3xV@QOYYqMgrTx6{w^UY0yUUWerFVZYzmGEt1K8+dZ}iSa?!PGUSg* zcuhGw6{2A|ayZIxIZB0Rh{op!xL_i{28aeQBkD+tj*~TNPI#pU#NK@lS4;NP!9JX^ zmPmlY9pH4b=3z>s62Dk%DpoE>;fiYEH#D)b@ISNK*CClWIN0@^O_31gGBm>2jNJgt{H$;`oc_=q%wpEf< z7!NA|q^mV<1*qjc54ZpDIal?}#xBEp5)zC?Trhxqf2zar2?C$lPodhyU zS#Y*Pod)FlLvSm?eGnL33djmN(1E4LeE4F4P9Eb`_^Jm6OT$0rfyx6f0+xi5SDIwM z9!7Xswl$2i8%b^pCs5a&2Yab6QLic^s=NMy8jqa?C%l=4e<&{2#sB}|K}jjEpafP9 zFi$i<)>6RfRza0*F4_EmfBHb-(ViB~sahZ+kYGQW#x5Ss;tH9^C=V7{i@0_J45o{D z2O`WxuS!;<>mZS(!mz!v%1cTei*ge<3y$}5j9^{ZZB~@{6^bsK=MA_Gf>%R_i%MLu zXT&F!h|t|ywUXWsC&XtyTjg~l29byMqiL|3#S-JEt_ctjzi=117Vk7-0+7430l+Zm z6uQL{r~GkN9MOXky0ASNNpu*KVzz1xwvZ7eusIKWN1WccZ$h|0A+R?frh_@rnJ&rU z$PvIPjzX}I1VY#XVJy0GgKuO9l0!lCU-|tY4`If7x}gg|vY^ZV>M%q@Do{@?p(EOGaT-H5b>I-Y>P|dus(m#l!5V>u-96#p$Q7puN=BSe ze_%RHZ%`tSge20;c(P8QQBdzKxLKZ@Bl>U!un(>V1q3;jIaSF)cx(@gw8avKo*dK? z6ka1+5l9;}sT(Y%4lm~P*BxjbcEOxQ!*r)a8>Rb7X3FwwGd2UB&~v7f=o&G5#2i=| zi~;qOR)Au7Hw_eR(2hzAPB?&lK0mY)jK&w)n$O2r3O7;#Xz}2M`-2MAS4*oIRsZGO zK-0uR#iKs7HsqT613~M9FSKANfyL`RVGn!bixpXjNFNGf1L{X5JgW;xs!5fixBnUi z)8W|zrIriP8YA@KNC3hSYALq1Q_Ee#NN|CvrT%TknOTM`x9NL9=0HxIv&Q$_`0g&a zKU7<%gNc-jqCv55@~a-%%OiX=xlM0X(&k`yZ~%@^tI6o34UP#s3}p#aO;XjCb*tL4 zK-E+m>Kcq(iAzD!FYr;&vMx!LQBvJafP#)BLIc88NTZT)X5Ns1!%1bBG??lCB2NXS-_Qe_9I$b5T)Z3+9Gj6FLCv2*m%3TJ|cPXo6}3#XdAB zihhdfg0_`PiP^$bx>N?&#EEYntVLmEo`(c@m==5I_VzHhP%(xepK?K#9Cz5Of;y8a zl?tg!1<%oeFyc3Yrvz~K9hbo%%sM0>32>k?lfh(g(CK+{3sIs6W1=Xf6ui&?Qt{mg zXgv0mU)7w3-9*X0S5tFuuqRWDgtFHKK$riM4lp*2#9y;lW0RCb!Hm>&4Eih_{=vjN zMt>phWOQk2FK6w?jQYA@64YLfTl|y@vYr?w?DVj&)e*pxyO32R_});UBKDsd*9#N{ zh4x?Qp7Gm7Bj19v<76X5cL`V)>|uc~YjnVdcZFkM2K@}$T@+(Aj5k7p zgsB(96NtwY2E ztT9s!Mu%A>bU2n0g-C=_jrWEL27|UahigjwiH{|z#=cv(&h|GvS?iq@NC|M=GpyknDm^OE0i?m- zMsDcASYV!RpH};2d=1O~6sMp-YnbJ+_!IsG{jdAxn}+>Kk+~rBYzi*c`uG?E*(mLg z01o^HXY9{q!B&L|?&0=x=;r@wOMg!Zyon8hvv?%!eT0!6*0}+q*cMb1DT;4k!Qmlf zjs2!t>2zA>kYXxaQ_TCxyb7?~O8GE39O4J|oTaPrEtTM?Dh?&#{bX-6Q%{)i&%tP#VY^M||jN^D1#k8CG z4uiC}nmB}rvW|rMb{XPhoV-&d9tg!4HVlCThKS&pG6jn^!+9YSrwl4)zVdtFF7`o9 zK&gQt+bI#{e)l8wY$r}_Ah9}){rQG3nqV2r>Eb0bwMr{_6o{OCKVHB}7(p!*S%pZS zfp0~N41IPG9x4VZQ>t{{eirHk{@{I{04NcY_Co3_sKRl;D^LfeIG?7ZXos{P!`>2Q zVkqmOyI>t&fo2aNve~Rg8W!Ut{(LK3?G_J7t4(dpon_eC#iuPS4pQxE@q%gp0b+yC zB~V{TH6$hR=?icZ!EFtC(3`r!mMgeMJ5MT`AO|iupt|EvYJ-}=sB$n7e5D4jQ$tl% zBpDRKgF=?6TG)@qaZ-d%>S)%?VRTDHk%VAHoIXxp`y!)YlGPx3VlH|>!8c>s-W}TH zHKIYs;p(Fkzr+~IoZ%6{$zc4iS?x9cW6x9s%OVxxBH~r4Axk+sjD(c4T0PL1a}}XI z&*(r`%Q>}!i?=#d$e@g{iuHg75hpuxIPfxD;N!@_xXS11#m&7^^cjK^eO1Y(vK_Yl z6ka!_Y65qJ0zojR>;w0jtPa|H6$0*%<<-`XKn|hDpb?J;AVuAYoQC_|u6m}{8(P=f zKWaR}-Ju)--r}N<4+Nx=f&h2LL>(g|%ue}0HG6WnxTVOL7xKeM3N407wFXNkv9 zgwuFzqRpBCud7J6d#7U))43yda-y}^flJ-ia*hSOhz842*#Ee~3?}ctaUwcxM2CBA)_h_#1Na|PJD;#OU8QoGFv)W;Ha2|l`gJSL3WWyZ0IGdW)@Wk<4fYN>Rx zH8r3D`vkp;TYpCbfU3ksAeJ?-_k|!Cqna%Uf1%*2f{~mvXhHuw8hJwBnR38e&TY-@%ib{Two7SR>?1SsM;wULfuVc_zZ?1?re35~#1#dcrJ91SY&KMz=GejZ)MSW*`_V%De?<9Wh;>>~ zmI6nB$Y?jU$H{D)XQ2T+Ztn;us96|>LX&{bK%m2{A_cKDuXV!oyts=fd~lK)Za&D| z*zaIli~FG1>qBU!jnq$u8CI4}gs3YpJu=oWS$`m4KYv)Zn1tjJTcixc#1gKa|S7#M*D-X z)l&9FMRQc7EMp`^FCbVz%%Z5Jm#D@yV+5pAt3$LXzMAUl$p2y{tfha26b0N+ULaDC zgO%2iZJPZEd_}ht1UAV3P6FY$l`ui^o=3{i!r!^A!UK~bA4Ca78aWNfoWMk7M8>HA zoe~I|L19#mlc5IXdRy_TBB&tuNf$u3KtMx-tQ0NQesb^#$>4?~HKi|9YEFQjC&2RF9^QfDFsTV9BWY8S!W^mt=F&rp@$Ks{~qG(PyFk z9FbB2hy|eveSs{3d+gtj#n~JbmGwsnty+8zZuPkO#10RLNn&l`6~x#~;u78SC^Rn5 zt$(Z*1x4g}?DS=ot_Yf4gVmEj6UvCi5Bj1VH+jiaCV>|)2@GkHKonHm!~_s9jvwRk zm8T{eHYL&D!I=cu2dPI`Sv7fRhQ#6y)K}|h@Q>KB6vKXk+&d;qbElAhzDR4#J>+iE zT1%f(+qFyBpW+Y*a_`^iJWqtr5aSdg&h}A9cc&1scLot<2{8lhiMPTS$lt4v#WGVH z304Lh;3Teo7NT8L23yO4QGv>Tj5aF%1={?;w<7X}5^-PsJr0xO5W1o+v1NaJ`v;Q5 z(=l|_0SKnZ$}=aQfNnte#~muAeO!h!_>+OlIdS9U4o`O$zuxhi;KNKVS(_w31x zwsnjL!C1XJsfob`iUVP26XVemi-+OXc+3oG&cm>fLAV%1@PYM!-D;&lu))?JiA7=@ z2SR+IvUw_1Xn%&ZAJswfJLEbzqcib@kX<=8Zt{X|4h|1t_G$?Nox&{>eE9YlLo%cV zJK*K5aabPjk*%@Z%H1&twwjg2L6k=GulT7{2vJf54haarfE1l-4nnVjK(G^1geEzT ztlOVMH-0iUHa_tDU-QTJD$4V>2mZ9n8SH{u!~TMYN{1^OitHHOyXr-zsreu*q%pSa zS7Zr9`z*#ahz*fJq`9_lh}Y1ypD?$RI)LUe#zO+_!HxJ(Uk59i%-B0I?+F!Ez)NMxxMu7HJTC z>^CvqQnW(!KMpD}T#O6G#Qacn1|%O;`bGo(q-H@6Hfj{KGYE7jDgmwm{|{2cXN(d^ zST^>sg#Hc+q#hupE=>`3eSkHn2@zvgT%l*MWx#T{07Q-oMDU6s5Me|GDKR_#4`1g2 zCslR+{W*7LcXoGX;ezx!J0QI*ihy9@QdI1{8;#LuK#dra7^BXjsMt}|V;5T_3W`R> zF0t2$Ep|o4L}Q5s6(h>~{XOT-vZ()8KJLuid+xdCJm=}pbDlG`akBum7FVi9R9k?W z@~+~^VIl_<_mh9DSPI5TQ<6eYGg+5(w4H^4XpqJDGdYg-XRT{C;%&0A_O7ZE^M<|F zi@2qW@5*!0`Zn!@KNEre=jQm^OYk#}+~!4Wh%gCnKuf3nxjayMrKoQsMrnafOgt&* z3Td*mq{DB7TySEwK_*ZuOlDZ7xDlhOX7Za?f=Mm4)v@>%vo2yH zh2gM5TE(U;b4l@cfn>R~aK)}La&#WWf6lCF^`%leoYpp1(*=-M%t!Jr6Mtd5Zke{c zPAt}fY<#hazDAS2c>e@x#7g`{KCsI>qcRLlY~Gra5EW43OWwk>>5AiH3(S;873&oF z1CW#3aAOZnUyL)eQSEPwNC*XTHq1)|<96z)mitDaxAAF@hX;di${zc_UXIF8Xrdm1 zDKV82a6yZ~POHsgPly6$po3XK%8WXe*U+}sJ8>KUwA9HI|AHm({9M~%ZQ2gA zw)GN)-HLepYh=-`qeqt&i$x1wU|wnh9RSrzH73KSQA_WBewT1(-K)Uv>9_+JIJ=b+$B8&eOOMzb80&DZ+?*5NCNv{D^XaEBhE&047Y1zv8bc z`mNL^q#^NFiqyIp5Dk0tb0`F`sGbSuMD6l(aSM4AFiUoWs$USV-JnYBkU(lXFzBzv z6!wy$S~2kspb4)t7XtuH?`MXN6bnNS1K&H0wwxc9A!Ze_F{QPN93G{jD08_Jwujq$Nd7oYnx9nJY%=#2 z%f~AhDEcgPG~Nrao_sl_?tLWl2`W=hUL%L5 zMg`yjd{!ETwQ7)wi-wgLpZO<4779v81{Ad3Od?AH2$zP2>6M4Y-)Ld?G?=ph3(P*pG+phG>l4Yh{{Y&6W_H#UvqnSke@k zmI@U>r4$+5jHGTGE0TbS9G;m1QH;+_5nsy6f+rVk%{%Lpnq4=&Tv&uLNx`WbfaCOX zeqmEH>!_eKV_|Gn`r;GwLji%{Jr6Wpq4hGR`vI&)huyUg=vHBMH z+T`!d<=%ce z$G6~97$@qIicL%zU0072D$l8}QSsJzM=Hc%P{0kXL* zmHJAI)I{GC+$#~d!kF;H@fwEQ%K}7OPke*M^yOfJ$-?rij{D=rjymh+yB)Iu#;D`)S-cRSwPlQ)&u69&?3iaS=!$ zL#DWO^+|oA?Xm>~ep#IM)5!>YEE0qROH%9*;C-K$LYTx`lsR>;wsCuMf3~n^1&W0d ze)xNS1~5&C8bt!pgL=?!Q`b@t+rH9+{waU%Qsr&OY(E~nK^FOw{VWeAl{ zikm9pH1%0173Zben<_#=)TCV4>jXZEQLvQETvSeKa#&FQN?@%KN*O0_>Oi_O-L=Qk z$WybgrLNq8V~Us*E>=szmHS5~Xc$4M{kBBhk80GJLovO!pAq0o?fihZK~%3{t_B+@ zs$CG;>8oeesrRNV|EqpW7N-*R&pI^ac?Ilo2bnGAlR>*KqQ1Jr6H2p;0|W%Nn=J!p z-!M*XS*;p=?dYhsJb+pg<&NYod4!wr54V?Q**bp8viTY9pyUlqP)0;YnJ}X^mjn*DN1le*rk!c2ej8`?2+Q#h!(A$Wn z8#PFIfU96sZrive=sl&l<^Mq%VTI@v@NC1ef@mv7*C2?CPpXS=%OL=?32z?--gapm z%vZj}do*?}4*qGMLBo&^#P|%?&Iqmx#oT+zodhLrA)P-++}VOo&Ac~1>{Y34+#2Al z9rskm-K99S%{$QjQe7!zslx#Afhm0qGmvSD6OhWFSNG!Mw)fhnxnw%Nsg9g%lJHZ8 z6S#)hccyWQI7|QL_%He56y6pRPux%0A{uX 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 ^vJfWBob0xTn83=xQ9XrNJnV@E`(a5~BH zo+IFLU1kz1pv10gY=^2ujv&Sg;33hkM)(L zc3ud~?@&AoS||PrxAGfT2jja3F@Ztl1tjHu9$t+%@_0ex?tGE+{Y3f+*XeCsClSRu z_|HVKq%F<_{ZT>=mivH&1#m%}w1a}D@@~j_!0auu{(&)K%V5Gx40n`R$V-?E0B#AF z)?$$Z&vz-ND1ehe@IzQ}*`to7w!(rnLBcI_;RAlNnqXpI0fnW~u`L+>Xl@YNlA55g zo7I_*@JPw97dl#`ttNgW!FW-oWCIBenz=ejk{VDYtP_>J8UGu?^I4!qUTg8yf!0^yFANi#3?5tpl%;66@TL@XC`w+6T2#%jq~wE$*_3=bA57n~R8$bYN&KQo;Gn>PfW-;u zr4gVA=ov&K^oS#=^_!H6W@ND17TJ11N8AZZxpGv6g-CL}#oPM(-{pfXyZehUp(g#w z@i7vQQl-$G4eY(0EY7EQNRA7~q{r(;G?I49n$maWO-?gCS;6&E{?pcuVpgn6BmGrJ zjmjY4q*-(UMU6}}P>ndv=)#VEAR}zyD6(RhUi`1`Et53#zbFKoW0l-r2ufS7hLvmq z?W!S61T4Xk6@{vO;YezFlPf78WD`*TSe!l-)hCWs#)wU1pcul~oBV{jU~ulO#ab#V z1s&@5sS6sqSF#a7D@6&eA^OG;fiNsKC6rMT3`-0^*x4@Ol}9ZaAaaIcMV6tsb?-z* zN-Z*1&kyK6ly^~bFfSiVuc(OADnY}r*k2x09}q98)MtIbO;rw2&vXz+!1lGUO<+{EBA$SD!%9jC1+~?R_a&DWH|w^jGQe zQ6K+g9~9>2(Amr7-V#ELvG>dzN_>xLNY;-8sL1kn?(sCG47~ujr@ycjOYL%lrnp4-=KM%#asB!I-9GU z=#ZEBD-N2Fx}*$j8(oKU^H5;_m)C?Dtg#%FXqxN8vaOOq3_m{6;<79di$(#rX2oLV zrW~X~isZtD57qLgH~v7|9ZXR%+={(60Mf{^ZNyD{^@?fm2FFNRPbc_C=lhKG|NO=z3_h8 zpW76Ss($PZ`C?c4Cz^s*4txAZQ?ONl_e(q7XEq0eIm>(B=Ag0PLmb&)N)H@98!zR8 z%ccJG=3pdMyKiX@X7_zmN*L01ed5`@zOE&hG;UqdF+NS^fMET1VmcxZ{mt^$Z*zJp z?gXxxaJ4_OCD>qqwb5wP@x)EbE%cn`tNlYQ!LZ0$#1r5oX&s@+tLIujY6U1(`(FKn zpESHCGn7@|R>uOgKxLM}mJ%rwhtNQ~ zO_{%Gu0MrRJBa+J#hnL2hPd zpz~gAGCHqDS*k|lTjJl=D&6ic9vsZt;jyH4nGk}X0L<#0vCW;2oBAEzgZ;y_bxHmc zCry(1q_(*fy&K&l1*fH`v{EH&x;^EOIUtzT^wBD{lP)LwOE6a~+xw>vz}NKUM@pYk zWqPJLuYBfT71jpCJ=_Le6TfXsXRpdIw7Sw5nDivsC?DSi<;jQhOWAhbl24ZW4B2|5 z3uECLXiud)sPJ0jTMFHyoaV}B_o%4k4hIIC_Wkocin>x+U+e;3RyGd(h5H9hq*C0x ze=v};r_b#l6oSbc6#`M2LwYiU+wOHF*#@*&Kg@*m{Vn6 z{u2jh#mO$w%R==aem|=dZSI^LwDh_=Eeyh=0*z-u+_xtOBS$?1l?U+(S}n2U6t=mN z7nd(379TQ0rZvfxoGnD<=~+{P;d7tD*UgOO_IZl;e7aN{7fj_BOF_DX|Im!K6_i!Hmijmy+cS4v^IFQGR*I*E*Px za(f?27}#}w=>|c2%?-i_3c~n1HwaoNH2J~?!SGFQw430OaEwts&k`rgRv4!1&(2B5 zx145YJ7u~um}Z)7PPfA⪼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 B0FVFx From 6c2fb488ce96296afbd7766862b109512f7d4751 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Sat, 17 Oct 2026 08:53:22 +0200 Subject: [PATCH 4/5] chore: updated types --- src/index.d.ts | 131 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 129 insertions(+), 2 deletions(-) diff --git a/src/index.d.ts b/src/index.d.ts index f0ff34a..4b7db9e 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -353,6 +353,17 @@ export class PreparedStatement { */ reset(alsoClearBinds?: boolean): this; + /** + * Resets the statement and returns the SQLite result code instead of throwing + * for a SQLite error. Retains bindings unless `alsoClearBinds` is truthy. + * Still throws if finalized or locked by a Database.exec() callback. + * Preserves OO1 bookkeeping; use this instead of calling sqlite3_reset() + * directly on an OO1 statement. + * + * @since SQLite 3.54 + */ + resetNoThrow(alsoClearBinds?: boolean): Sqlite3Result; + /** * Steps the statement one time. If the result indicates that a row of data is * available, a truthy value is returned. If no row of data is available, a @@ -1539,6 +1550,8 @@ export class WasmAllocError extends Error { /** Exception class used primarily by the oo1 API. */ export class SQLite3Error extends Error { constructor(message: string); + /** Creates an error with the given SQLite result code and its error text. */ + constructor(resultCode: number); resultCode: number; } @@ -2232,6 +2245,22 @@ export type Sqlite3Static = { */ clearOnInit?: boolean; + /** + * Defaults to false. Retry initialization after a previously cached failure + * instead of returning that failure again. + */ + forceReinitIfPreviouslyFailed?: boolean; + + /** + * Defaults to false. On initialization failure, unregister the VFS and + * release acquired handles without deleting the pool's storage. This does + * not undo changes already made, including clearOnInit. Retrying a cached + * failure also requires forceReinitIfPreviouslyFailed. + * + * @since SQLite 3.54 + */ + preserveOnInitFailure?: boolean; + /** * (default=6) Specifies the default capacity of the VFS. * @@ -3647,6 +3676,43 @@ export type CAPI = { sqlite3_module: typeof sqlite3_module; sqlite3_index_info: typeof sqlite3_index_info; + /** + * Starts copying a database between distinct connections. Schema names are + * usually "main". Returns 0 on failure; inspect the destination's error code + * and message. On success, call sqlite3_backup_finish() exactly once, even + * when stepping fails. Do not otherwise use the destination connection until + * the backup has been finished. + * + * See https://sqlite.org/c3ref/backup_finish.html + * @since SQLite Wasm 3.54 + */ + sqlite3_backup_init: ( + dest: DbPtr, + destName: string | WasmPointer, + source: DbPtr, + sourceName: string | WasmPointer, + ) => WasmPointer; + + /** + * Copies up to pageCount pages, or all remaining pages if negative. Returns + * SQLITE_DONE when complete, SQLITE_OK when more pages remain, or an error + * code. SQLITE_BUSY and SQLITE_LOCKED can be retried later. + */ + sqlite3_backup_step: (backup: WasmPointer, pageCount: number) => Sqlite3Result; + + /** + * Releases and invalidates a backup handle, rolling back an incomplete copy. + * Returns SQLITE_OK or a prior fatal backup error; SQLITE_OK alone does not + * indicate that all pages were copied. + */ + sqlite3_backup_finish: (backup: WasmPointer) => Sqlite3Result; + + /** Returns the pages remaining as of the most recent backup_step() call. */ + sqlite3_backup_remaining: (backup: WasmPointer) => number; + + /** Returns the total source pages as of the most recent backup_step() call. */ + sqlite3_backup_pagecount: (backup: WasmPointer) => number; + /** * Returns a string corresponding to the {@link CAPI#SQLITE_VERSION} macro. * This function is provided for use in DLLs. @@ -4414,9 +4480,13 @@ export type CAPI = { | CAPI['SQLITE_LIMIT_VARIABLE_NUMBER'] | CAPI['SQLITE_LIMIT_TRIGGER_DEPTH'] | CAPI['SQLITE_LIMIT_WORKER_THREADS'] - | CAPI['SQLITE_LIMIT_PARSER_DEPTH'], + | CAPI['SQLITE_LIMIT_PARSER_DEPTH'] + /** SQLITE_LIMIT_SCHEMA: maximum number of schema objects (since 3.54). */ + | 13 + /** SQLITE_LIMIT_TRIGGER_STEPS: maximum statements per trigger (since 3.54). */ + | 14, newVal: number, - ) => Sqlite3Result; + ) => number; /** * Compiles a prepared statement. @@ -4644,6 +4714,13 @@ export type CAPI = { */ sqlite3_bind_null: (stmt: StmtPtr, idx: number) => Sqlite3Result; + /** + * Binds a BLOB of n bytes filled with zeroes at the 1-based parameter index. + * A negative length produces an empty BLOB. + * See https://sqlite.org/c3ref/bind_blob.html + */ + sqlite3_bind_zeroblob: (stmt: StmtPtr, idx: number, n: number) => Sqlite3Result; + /** * Bind a `TEXT` value to a parameter in a prepared statement. * @@ -6407,6 +6484,22 @@ export type CAPI = { esc: number, ) => Sqlite3Result; + /** + * Configures a virtual table from its xCreate() or xConnect() callback. + * The Wasm binding always requires three arguments. Pass 0 for options that + * ignore the third argument; CONSTRAINT_SUPPORT uses it as an enable flag. + * See https://sqlite.org/c3ref/vtab_config.html + */ + sqlite3_vtab_config: ( + db: DbPtr, + op: + | CAPI['SQLITE_VTAB_CONSTRAINT_SUPPORT'] + | CAPI['SQLITE_VTAB_INNOCUOUS'] + | CAPI['SQLITE_VTAB_DIRECTONLY'] + | CAPI['SQLITE_VTAB_USES_ALL_SCHEMAS'], + value: number, + ) => Sqlite3Result; + /** * Determine The Virtual Table Conflict Policy * @@ -7927,6 +8020,34 @@ export type CAPI = { */ sqlite3_js_db_uses_vfs: (db: DbPtr, vfsName: string, dbName: string) => boolean; + /** + * Calls a synchronous callback up to maxTimes total attempts. Retries when + * it returns SQLITE_BUSY or throws SQLite3Error with that resultCode. + * Returns any other result, propagates other errors, and throws SQLite3Error + * when attempts are exhausted. beforeRetry receives the attempt number + * starting at 2; its return value is ignored. No sleeping is performed. + * Returns undefined if maxTimes permits no attempts. + * + * @since SQLite 3.53 + */ + sqlite3_js_retry_busy: ( + maxTimes: number, + callback: () => T, + beforeRetry?: (attempt: number) => void, + ) => T | undefined; + + /** + * Converts flexible SQL input to a JS string; unsupported inputs yield + * undefined. Arrays are joined without separators, byte buffers are decoded + * as UTF-8, and WASM pointers refer to NUL-terminated strings. + * + * Known upstream issue in 3.54.1: non-string inputs throw ReferenceError + * because the implementation references an undefined variable. + * + * @since SQLite 3.44 + */ + sqlite3_js_sql_to_string: (sql: FlexibleString) => string | undefined; + /** Returns an array of the names of all currently-registered sqlite3 VFSes. */ sqlite3_js_vfs_list: () => string[]; @@ -8413,6 +8534,12 @@ export type CAPI = { SQLITE_DETERMINISTIC: 2048; SQLITE_DIRECTONLY: 524_288; SQLITE_INNOCUOUS: 2_097_152; + /** The function inspects argument subtypes with sqlite3_value_subtype(). */ + SQLITE_SUBTYPE: 1_048_576; + /** The function sets its result subtype with sqlite3_result_subtype(). */ + SQLITE_RESULT_SUBTYPE: 16_777_216; + /** The aggregate internally orders its first argument. */ + SQLITE_SELFORDER1: 33_554_432; SQLITE_VERSION_NUMBER: number; SQLITE_VERSION: string; SQLITE_SOURCE_ID: string; From c4756bbebff463ee9b5a4769f4d9644402493de4 Mon Sep 17 00:00:00 2001 From: Jure Rotar Date: Sat, 17 Oct 2026 08:59:19 +0200 Subject: [PATCH 5/5] chore: removed forceReinitIfPreviouslyFailed from documented options --- src/index.d.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/index.d.ts b/src/index.d.ts index 4b7db9e..f2b03ec 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -2245,12 +2245,6 @@ export type Sqlite3Static = { */ clearOnInit?: boolean; - /** - * Defaults to false. Retry initialization after a previously cached failure - * instead of returning that failure again. - */ - forceReinitIfPreviouslyFailed?: boolean; - /** * Defaults to false. On initialization failure, unregister the VFS and * release acquired handles without deleting the pool's storage. This does