From bcaa2f663aafd5def1d114e2d051d4b7962ec5ad Mon Sep 17 00:00:00 2001 From: robertsLando Date: Thu, 23 Apr 2026 16:20:00 +0200 Subject: [PATCH] fix: lazy-load SqliteProvider to avoid node:sqlite ExperimentalWarning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Eagerly requiring ./lib/providers/sqlite.js pulled in node:sqlite at module load time, emitting `ExperimentalWarning: SQLite is an experimental feature` for every consumer — even those who only use MemoryProvider or RealFSProvider. The warning was especially noisy in SEA/pkg binaries where vfs is loaded unconditionally. Expose SqliteProvider via a lazy getter on module.exports. The first access resolves the module and memoizes the value, so behavior and API shape are preserved; node:sqlite (and its warning) is only loaded when a consumer actually touches vfs.SqliteProvider. --- index.js | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index c3f5471..4854ce4 100644 --- a/index.js +++ b/index.js @@ -4,7 +4,6 @@ const { VirtualFileSystem } = require('./lib/file_system.js'); const { VirtualProvider } = require('./lib/provider.js'); const { MemoryProvider } = require('./lib/providers/memory.js'); const { RealFSProvider } = require('./lib/providers/real.js'); -const { SqliteProvider } = require('./lib/providers/sqlite.js'); /** * Creates a new VirtualFileSystem instance. @@ -31,5 +30,21 @@ module.exports = { VirtualProvider, MemoryProvider, RealFSProvider, - SqliteProvider, }; + +// Lazy-load SqliteProvider so that `node:sqlite` (and its ExperimentalWarning) +// is only required when a consumer actually reads `vfs.SqliteProvider`. +Object.defineProperty(module.exports, 'SqliteProvider', { + enumerable: true, + configurable: true, + get() { + const { SqliteProvider } = require('./lib/providers/sqlite.js'); + Object.defineProperty(module.exports, 'SqliteProvider', { + value: SqliteProvider, + enumerable: true, + configurable: true, + writable: true, + }); + return SqliteProvider; + }, +});