diff --git a/docs/modules/sqlite3.md b/docs/modules/sqlite3.md new file mode 100644 index 0000000..8b78348 --- /dev/null +++ b/docs/modules/sqlite3.md @@ -0,0 +1,39 @@ +--- +description: Modern alternatives to the sqlite3 package for working with SQLite in Node.js +--- + +# Replacements for `sqlite3` + +## `node:sqlite` (native, since Node.js 22.13.0) + +Node.js ships a built-in SQLite module, [`node:sqlite`](https://nodejs.org/api/sqlite.html), which is the preferred option when you can target a recent Node runtime. + +Example: + +```ts +import sqlite3 from 'sqlite3' // [!code --] +import { DatabaseSync } from 'node:sqlite' // [!code ++] + +const db = new sqlite3.Database('app.db') // [!code --] +const db = new DatabaseSync('app.db') // [!code ++] + +db.all('SELECT * FROM users', (err, rows) => {}) // [!code --] +const rows = db.prepare('SELECT * FROM users').all() // [!code ++] +``` + +## `better-sqlite3` + +[`better-sqlite3`](https://github.com/WiseLibs/better-sqlite3) is a popular and actively maintained SQLite library for Node.js. + +Example: + +```ts +import sqlite3 from 'sqlite3' // [!code --] +import Database from 'better-sqlite3' // [!code ++] + +const db = new sqlite3.Database('app.db') // [!code --] +const db = new Database('app.db') // [!code ++] + +db.all('SELECT * FROM users', (err, rows) => {}) // [!code --] +const rows = db.prepare('SELECT * FROM users').all() // [!code ++] +``` diff --git a/manifests/micro-utilities.json b/manifests/micro-utilities.json index a7fa062..5b92d52 100644 --- a/manifests/micro-utilities.json +++ b/manifests/micro-utilities.json @@ -100,7 +100,7 @@ "id": "snippet::has-ansi", "type": "simple", "description": "You can use the `includes` method on the string to check if a specific ANSI byte is present.", - "example": "string.includes(\"\u001B\") || string.includes(\"\u009B\")" + "example": "string.includes(\"\\u001b\") || string.includes(\"\\u009b\")" }, "snippet::has-argv": { "id": "snippet::has-argv", diff --git a/manifests/preferred.json b/manifests/preferred.json index e2e8a9c..d3d421a 100644 --- a/manifests/preferred.json +++ b/manifests/preferred.json @@ -2582,6 +2582,12 @@ "replacements": ["readline.createInterface"], "url": {"type": "e18e", "id": "split"} }, + "sqlite3": { + "type": "module", + "moduleName": "sqlite3", + "replacements": ["node:sqlite", "better-sqlite3"], + "url": {"type": "e18e", "id": "sqlite3"} + }, "stream-buffers": { "type": "module", "moduleName": "stream-buffers", @@ -2922,6 +2928,11 @@ "type": "documented", "replacementModule": "bcryptjs" }, + "better-sqlite3": { + "id": "better-sqlite3", + "type": "documented", + "replacementModule": "better-sqlite3" + }, "betterknown": { "id": "betterknown", "type": "documented", @@ -2959,10 +2970,7 @@ "crypto.timingSafeEqual": { "id": "crypto.timingSafeEqual", "type": "native", - "url": { - "type": "node", - "id": "api/crypto.html#cryptotimingsafeequala-b" - }, + "url": {"type": "node", "id": "api/crypto.html#cryptotimingsafeequala-b"}, "nodeFeatureId": {"moduleName": "crypto", "exportName": "timingSafeEqual"} }, "date-fns": { @@ -3191,11 +3199,7 @@ "type": "documented", "replacementModule": "milliparsec" }, - "mri": { - "id": "mri", - "type": "documented", - "replacementModule": "mri" - }, + "mri": {"id": "mri", "type": "documented", "replacementModule": "mri"}, "nano-staged": { "id": "nano-staged", "type": "documented", @@ -3242,6 +3246,12 @@ "type": "documented", "replacementModule": "node:fs" }, + "node:sqlite": { + "id": "node:sqlite", + "type": "native", + "nodeFeatureId": {"moduleName": "node:sqlite"}, + "url": {"type": "node", "id": "api/sqlite.html"} + }, "node:stream": { "id": "node:stream", "type": "native",