git » sdk » commit 5550289

Make borogove_persistence_Sqlite optional

author Stephen Paul Weber
2026-02-24 14:33:55 UTC
committer Stephen Paul Weber
2026-02-24 14:34:24 UTC
parent e0c152c8211e9bc2eec1aed21166ddf8b4d8c5ff

Make borogove_persistence_Sqlite optional

Makefile +5 -0
npm/package.json +9 -0
npm/persistence.ts +0 -1
optional-sqlite-types.awk +27 -0
optional-sqlite.awk +37 -0

diff --git a/Makefile b/Makefile
index 92e5dc7..6aadff7 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,11 @@ npm/borogove-browser.js:
 	haxe browserjs.hxml
 	sed -i '/;var $$hx_exports = typeof exports != "undefined" ? exports : globalThis;/{N;N;N;d;}' npm/borogove-browser.js
 	sed -i 's/^$$hx_exports[^=]*=\(.*\);$$/export {\1 };/g' npm/borogove-browser.js
+	cd npm && npx cjstoesm borogove-browser.js
+	awk -f optional-sqlite.awk npm/borogove-browser.js
+	mv npm/browser-no-sqlite.js npm/borogove-browser.js
+	awk -f optional-sqlite-types.awk npm/borogove-browser.d.ts
+	mv npm/no-sqlite.d.ts npm/borogove-browser.d.ts
 
 npm/borogove.js:
 	haxe nodejs.hxml
diff --git a/npm/package.json b/npm/package.json
index bda6ec3..78a2b7a 100644
--- a/npm/package.json
+++ b/npm/package.json
@@ -13,6 +13,10 @@
   "browser": {
     "./borogove.js": "./borogove-browser.js"
   },
+  "exports": {
+    ".": "./index.js",
+    "./sqlite-wasm": "./sqlite-wasm.js"
+  },
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1"
   },
@@ -23,6 +27,11 @@
     "@xmpp/debug": "^0.14.0",
     "@xmpp/sasl-scram-sha-1": "^0.14.0"
   },
+  "peerDependenciesMeta": {
+    "@sqlite.org/sqlite-wasm": {
+      "optional": true
+    }
+  },
   "devDependencies": {
     "typescript": "^5.4.5"
   }
diff --git a/npm/persistence.ts b/npm/persistence.ts
index 04070da..abb67fe 100644
--- a/npm/persistence.ts
+++ b/npm/persistence.ts
@@ -3,7 +3,6 @@ export { default as MediaStoreCache } from "./MediaStoreCache.js";
 
 export {
 	borogove_persistence_Dummy as Dummy,
-	borogove_persistence_Sqlite as Sqlite,
 } from "./borogove.js";
 export type {
 	borogove_persistence_KeyValueStore as KeyValueStore,
diff --git a/optional-sqlite-types.awk b/optional-sqlite-types.awk
new file mode 100644
index 0000000..9f8301a
--- /dev/null
+++ b/optional-sqlite-types.awk
@@ -0,0 +1,27 @@
+/^export class borogove_persistence_Sqlite implements borogove_persistence_KeyValueStore, borogove_Persistence[[:space:]]*\{/ {
+    inside = 1
+    brace_count = 0
+
+    n = gsub(/\{/, "{")
+    brace_count += n
+    n = gsub(/\}/, "}")
+    brace_count -= n
+
+    print >> "npm/sqlite-wasm.d.ts"
+    next
+}
+
+inside {
+    print >> "npm/sqlite-wasm.d.ts"
+
+    n = gsub(/\{/, "{")
+    brace_count += n
+    n = gsub(/\}/, "}")
+    brace_count -= n
+
+    if (brace_count == 0) inside = 0
+
+    next
+}
+
+{ print > "npm/no-sqlite.d.ts" }
diff --git a/optional-sqlite.awk b/optional-sqlite.awk
new file mode 100644
index 0000000..a7a3d47
--- /dev/null
+++ b/optional-sqlite.awk
@@ -0,0 +1,37 @@
+BEGIN {
+	skipping = 0
+	extra = 0
+}
+
+/^import \{ sqlite3Worker1Promiser as borogove_persistence_Worker1 \} from "@sqlite\.org\/sqlite-wasm";/ {
+	print > "npm/sqlite-wasm.js"
+	print "var $global = globalThis;" >> "npm/sqlite-wasm.js"
+	next
+}
+
+/^class borogove_persistence_Sqlite {/ {
+	skipping = 1
+}
+
+/borogove_persistence_SqliteDriver.__name__ = "borogove\.persistence\.SqliteDriver";/ {
+	if (skipping) extra = 6
+}
+
+/^export \{ borogove_persistence_Sqlite \};/ {
+	print >> "npm/sqlite-wasm.js"
+	next
+}
+
+skipping {
+	print >> "npm/sqlite-wasm.js"
+
+	if (extra > 0) {
+		extra--
+		if (extra == 0) skipping = 0
+	}
+	next
+}
+
+{
+	print > "npm/browser-no-sqlite.js"
+}