summaryrefslogtreecommitdiff
path: root/src/lib/db/utils.ts
diff options
context:
space:
mode:
authorpolwex <polwex@sortug.com>2025-06-02 23:05:36 +0700
committerpolwex <polwex@sortug.com>2025-06-02 23:05:36 +0700
commit904b34de8f7748b7954d88784369b9cae6fa92fb (patch)
tree53bb5cb3377ae40d8bfa44087a0c712edd6c9d02 /src/lib/db/utils.ts
parenta03c92dc82ad527d7da6bbaa3c43000e2e5f0e69 (diff)
all me here should merge
Diffstat (limited to 'src/lib/db/utils.ts')
-rw-r--r--src/lib/db/utils.ts29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/lib/db/utils.ts b/src/lib/db/utils.ts
new file mode 100644
index 0000000..1ac577f
--- /dev/null
+++ b/src/lib/db/utils.ts
@@ -0,0 +1,29 @@
+export async function handleFile(
+ filename: string,
+ func: (line: string, idx: number) => void,
+) {
+ const file = Bun.file(filename);
+ const s = file.stream();
+ const reader = s.getReader();
+ const decoder = new TextDecoder();
+ let leftover = "";
+ let lineCount = 0;
+ while (true) {
+ const { value, done } = await reader.read();
+ if (done) break;
+ const chunk = decoder.decode(value, { stream: true });
+ const lines = (leftover + chunk).split("\n");
+
+ // Process each line except the last (which might be incomplete)
+ for (const line of lines.slice(0, -1)) {
+ lineCount++;
+ func(line, lineCount);
+ }
+
+ // Save the last incomplete line to process in the next iteration
+ leftover = lines[lines.length - 1];
+ }
+
+ // Handle any remaining content after reading all chunks
+ if (leftover) func(leftover, lineCount + 1);
+}