git » sdk » commit 91ce1f9

AsyncIterator for JavaScript

author Stephen Paul Weber
2026-03-04 19:28:09 UTC
committer Stephen Paul Weber
2026-03-04 19:28:26 UTC
parent ba4aceb609842298cbbe5c37037f8ca6bf22e634

AsyncIterator for JavaScript

Makefile +2 -0
borogove/AvailableChatIterator.hx +18 -1
npm/index.ts +1 -0

diff --git a/Makefile b/Makefile
index 6aadff7..e45b7c8 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,7 @@ 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
+	sed -i 's/"\[Symbol.asyncIterator\]"() {/[Symbol.asyncIterator]() {/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
@@ -35,6 +36,7 @@ npm/borogove.js:
 	haxe nodejs.hxml
 	sed -i '/;var $$hx_exports = typeof exports != "undefined" ? exports : globalThis;/{N;N;N;d;}' npm/borogove.js
 	sed -i 's/^$$hx_exports[^=]*=\(.*\);$$/export {\1 };/g' npm/borogove.js
+	sed -i 's/"\[Symbol.asyncIterator\]"() {/[Symbol.asyncIterator]() {/g' npm/borogove.js
 	cd npm && npx cjstoesm borogove.js
 
 npm: npm/borogove-browser.js npm/borogove.js borogove/persistence/IDB.js borogove/persistence/MediaStoreCache.js borogove/persistence/sqlite-worker1.mjs
diff --git a/borogove/AvailableChatIterator.hx b/borogove/AvailableChatIterator.hx
index 1bf1001..0ea3792 100644
--- a/borogove/AvailableChatIterator.hx
+++ b/borogove/AvailableChatIterator.hx
@@ -151,12 +151,29 @@ class AvailableChatIterator {
 	/**
 		Get the next AvailableChat from this iterator
 	**/
+	#if js
+	@:native("[Symbol.asyncIterator]")
+	public function asyncIterator() {
+		return this;
+	}
+
+	public function next(): Promise<{ done: Bool, ?value: AvailableChat }> {
+		return internalNext().then(v -> {
+			return { done: v == null, value: v };
+		});
+	}
+	#else
 	public function next(): Promise<Null<AvailableChat>> {
+		return internalNext();
+	}
+	#end
+
+	private function internalNext(): Promise<Null<AvailableChat>> {
 		if (results.length < 1) return Promise.resolve(null);
 
 		return results.shift().then(available -> {
 			if (available == null || dedup[available.chatId]) {
-				return this.next();
+				return this.internalNext();
 			} else {
 				dedup[available.chatId] = true;
 				return Promise.resolve(available);
diff --git a/npm/index.ts b/npm/index.ts
index 9b13343..f18a5ce 100644
--- a/npm/index.ts
+++ b/npm/index.ts
@@ -9,6 +9,7 @@ export {
 } from "./borogove-enums";
 export {
     borogove_AvailableChat as AvailableChat,
+    borogove_AvailableChatIterator as AvailableChatIterator,
     borogove_Channel as Channel,
     borogove_Chat as Chat,
     borogove_ChatAttachment as ChatAttachment,