From c9b68df371063c9d5493a1e8e9894548e496fb55 Mon Sep 17 00:00:00 2001 From: Inaiat Moraes Date: Mon, 9 Dec 2024 11:04:13 -0300 Subject: [PATCH] chore: add seek and commit method to KafkaStreamReadable --- Cargo.toml | 2 +- example/stream-sample.mjs | 4 +- js-src/kafka-stream-readable.ts | 11 ++- kafka-stream-readable.d.ts | 5 +- kafka-stream-readable.js | 6 ++ package.json | 12 +-- pnpm-lock.yaml | 131 +++++++++++++++++--------------- 7 files changed, 99 insertions(+), 72 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index ff965a8..da59380 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] edition = "2021" name = "kafka-crab-js" -version = "0.0.0" +version = "1.0.0" [lib] crate-type = ["cdylib"] diff --git a/example/stream-sample.mjs b/example/stream-sample.mjs index f0c2ef8..01cb86f 100644 --- a/example/stream-sample.mjs +++ b/example/stream-sample.mjs @@ -1,5 +1,5 @@ import { fakerPT_BR } from '@faker-js/faker' -import { KafkaClient } from '../index.js' +import { KafkaClient, PartitionPosition } from '../index.js' const kafkaClient = new KafkaClient({ brokers: 'localhost:29092', @@ -39,7 +39,7 @@ async function startConsumer(topic) { enableAutoCommit: true, }) - await kafkaStream.subscribe(topic) + await kafkaStream.subscribe([{ topic: 'foo', allOffsets: { position: PartitionPosition.Beginning } }]) let counter = 0 console.log('Starting consumer') diff --git a/js-src/kafka-stream-readable.ts b/js-src/kafka-stream-readable.ts index a30827a..6fe8cc4 100644 --- a/js-src/kafka-stream-readable.ts +++ b/js-src/kafka-stream-readable.ts @@ -1,6 +1,7 @@ import { Readable } from 'stream' -import { KafkaConsumer, TopicPartitionConfig } from './js-binding' +import { CommitMode } from '../js-binding' +import { KafkaConsumer, OffsetModel, TopicPartitionConfig } from './js-binding' /** * KafkaStreamReadable class @@ -28,6 +29,14 @@ export class KafkaStreamReadable extends Readable { await this.kafkaConsumer.subscribe(topics) } + seek(topic: string, partition: number, offsetModel: OffsetModel, timeout?: number | undefined) { + this.kafkaConsumer.seek(topic, partition, offsetModel, timeout) + } + + commit(topic: string, partition: number, offset: number, commit: CommitMode) { + this.kafkaConsumer.commit(topic, partition, offset, commit) + } + /** * Unsubscribe from topics */ diff --git a/kafka-stream-readable.d.ts b/kafka-stream-readable.d.ts index 5999954..c54b9e3 100644 --- a/kafka-stream-readable.d.ts +++ b/kafka-stream-readable.d.ts @@ -1,5 +1,6 @@ import { Readable } from 'stream'; -import { KafkaConsumer, TopicPartitionConfig } from './js-binding'; +import { CommitMode } from '../js-binding'; +import { KafkaConsumer, OffsetModel, TopicPartitionConfig } from './js-binding'; /** * KafkaStreamReadable class * @extends Readable @@ -14,6 +15,8 @@ export declare class KafkaStreamReadable extends Readable { * Subscribes to topics */ subscribe(topics: string | Array): Promise; + seek(topic: string, partition: number, offsetModel: OffsetModel, timeout?: number | undefined): void; + commit(topic: string, partition: number, offset: number, commit: CommitMode): void; /** * Unsubscribe from topics */ diff --git a/kafka-stream-readable.js b/kafka-stream-readable.js index 2898063..8406720 100644 --- a/kafka-stream-readable.js +++ b/kafka-stream-readable.js @@ -27,6 +27,12 @@ class KafkaStreamReadable extends stream_1.Readable { } await this.kafkaConsumer.subscribe(topics); } + seek(topic, partition, offsetModel, timeout) { + this.kafkaConsumer.seek(topic, partition, offsetModel, timeout); + } + commit(topic, partition, offset, commit) { + this.kafkaConsumer.commit(topic, partition, offset, commit); + } /** * Unsubscribe from topics */ diff --git a/package.json b/package.json index 36e30e2..d75cf22 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kafka-crab-js", - "version": "1.0.3", + "version": "1.0.4", "main": "index.js", "types": "index.d.ts", "module": "commonjs", @@ -40,13 +40,13 @@ "url": "https://github.com/inaiat/kafka-crab-js.git" }, "devDependencies": { - "@faker-js/faker": "9.2.0", + "@faker-js/faker": "9.3.0", "@napi-rs/cli": "^2.18.4", - "@types/node": "22.9.0", + "@types/node": "22.10.1", "ava": "6.2.0", - "dprint": "^0.47.5", - "nanoid": "5.0.8", - "typescript": "5.6.3", + "dprint": "^0.47.6", + "nanoid": "5.0.9", + "typescript": "5.7.2", "copyfiles": "^2.4.1", "@types/copyfiles": "^2.4.4", "rimraf": "^6.0.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7573f6b..ebc44f4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@faker-js/faker': - specifier: 9.2.0 - version: 9.2.0 + specifier: 9.3.0 + version: 9.3.0 '@napi-rs/cli': specifier: ^2.18.4 version: 2.18.4 @@ -18,8 +18,8 @@ importers: specifier: ^2.4.4 version: 2.4.4 '@types/node': - specifier: 22.9.0 - version: 22.9.0 + specifier: 22.10.1 + version: 22.10.1 ava: specifier: 6.2.0 version: 6.2.0 @@ -27,62 +27,67 @@ importers: specifier: ^2.4.1 version: 2.4.1 dprint: - specifier: ^0.47.5 - version: 0.47.5 + specifier: ^0.47.6 + version: 0.47.6 nanoid: - specifier: 5.0.8 - version: 5.0.8 + specifier: 5.0.9 + version: 5.0.9 rimraf: specifier: ^6.0.1 version: 6.0.1 typescript: - specifier: 5.6.3 - version: 5.6.3 + specifier: 5.7.2 + version: 5.7.2 packages: - '@dprint/darwin-arm64@0.47.5': - resolution: {integrity: sha512-aVa3F//dkvEeNA7DCSlVcLxB0CV6zXpfbJZ/xsd+xgbayCXFuFr7qt0M6T4WP3gkQn5D7Zu8/pbXfRXQXo9qlQ==} + '@dprint/darwin-arm64@0.47.6': + resolution: {integrity: sha512-DrtKVOH7Ue6QYsqsUfUwBlTkSZNF2j35xqyI6KimUT1ulgUPocLG53JC/Aej9KuSCPmt4M3J40xxPKRgIM4jPA==} cpu: [arm64] os: [darwin] - '@dprint/darwin-x64@0.47.5': - resolution: {integrity: sha512-84lmSLM/idIQ4UBkBHU1chP0WTldRjzLOEN22/XbdB1JGOIVN1pJIIU0lsmVWXaNI4SvGfty+thhGn73SSlQwA==} + '@dprint/darwin-x64@0.47.6': + resolution: {integrity: sha512-p16a4lMbAo4RngbNTAmtREnIRI/cOcZFy5wHPIzbCDnnHI+4UyHiAypTrpF8U8EYx1tw3hgih2MyAuupa9Gfag==} cpu: [x64] os: [darwin] - '@dprint/linux-arm64-glibc@0.47.5': - resolution: {integrity: sha512-Zk7Ut9Trgl2ssGWx0u3YegnRQFXivKaK1fPEimg/uMwdaLtWFGvNs6DACAJk34d883zmDkTQvllqY1kc78CeBg==} + '@dprint/linux-arm64-glibc@0.47.6': + resolution: {integrity: sha512-WHphnk0oXpNzwJ9cjbddOL+hEZkXTvHxcA2pM1h1kWCBa5m+4qh0fg8YCktckMfHx1qdQuZYWRoT4l7yQbzWYA==} cpu: [arm64] os: [linux] - '@dprint/linux-arm64-musl@0.47.5': - resolution: {integrity: sha512-KmCu1yX5+/2MbT9n0iAgSK1gc6sQBcDayq8QRO7TRSs+gTDAZ/yQXHkhLdlk5fWsTR1mDQPVRG+2nAjHDhk8EA==} + '@dprint/linux-arm64-musl@0.47.6': + resolution: {integrity: sha512-/2cSPudajg8J0U69ldNZkJx5QiKZNh+ohNVM9leWZ8v6GXN6sJDHX3T6hzS3ohIb03YOCiLOrJZDy9j3+fSgdQ==} cpu: [arm64] os: [linux] - '@dprint/linux-x64-glibc@0.47.5': - resolution: {integrity: sha512-oBwENMikvcM+eT6JdliMIM+TOiV4VuBJGK+AN1sTOW45VeiYvmzGPOQwCxVeFq4MnZkMfrycC/PAY3C7Vcuh6w==} + '@dprint/linux-riscv64-glibc@0.47.6': + resolution: {integrity: sha512-RMHJ3Zuzpls426upHlAveVwlGMi8oBLzhiCauyC/yWQl3CkGTAYdyhEpGnux0+RxacysfIL2bd8ourx4K0Sx3w==} + cpu: [riscv64] + os: [linux] + + '@dprint/linux-x64-glibc@0.47.6': + resolution: {integrity: sha512-4zbVsx/a8lHkRyAjfW0PNlN5IMwOJfFapgXNYJowWNO7X3j3m1jYJWovjmdZls+d6pDeOHoanMWtq95wd7zTeQ==} cpu: [x64] os: [linux] - '@dprint/linux-x64-musl@0.47.5': - resolution: {integrity: sha512-B1IGyaP0k25JDhqmR/UpvgyNtnclBoXV7ZNQbvygehBkTeC69afwzpUxjQ2pKj2F9bl1Rby//fhsAFOg60PzsA==} + '@dprint/linux-x64-musl@0.47.6': + resolution: {integrity: sha512-0C13t4OVzomgQjvUyD5IrRyjLDhGuOtqMo00uJlwn3QHucfgOBqkjyQ5fq7T6+grBse0m14/EWblvSbYkZpyDw==} cpu: [x64] os: [linux] - '@dprint/win32-arm64@0.47.5': - resolution: {integrity: sha512-tKSPwGWsKc+QAdsx6UQav9AY8WXm+B5Mx23ujliJJMRss6Dnlmg17NjbAnSBSqXSrfqaMeQx6d4gujPpOS3F9A==} + '@dprint/win32-arm64@0.47.6': + resolution: {integrity: sha512-UOkeFMBdGIuGNwfkrJdVM9eNiRMdbZRRGVy0Cdo2AXn/FCDVqZ74KJkvYVcoUE27GCytHi4Sp1s4at7659WCOw==} cpu: [arm64] os: [win32] - '@dprint/win32-x64@0.47.5': - resolution: {integrity: sha512-ljbrGv5rDR00ziBFY6V+qLhtLHm2dsjgiFG9OU7kr3vHEj4eN31nwxU5W2mh0eMoRk7IbcJ5ahTJDLgoYdvfgw==} + '@dprint/win32-x64@0.47.6': + resolution: {integrity: sha512-i9xwXR8V8Jk/wU1gsYKx15eb0ypBRbRZFkHsnHfC0ZBimcfEOibGnGcfv+UCUcumXtnV46TnBqaJW7H70J1J+A==} cpu: [x64] os: [win32] - '@faker-js/faker@9.2.0': - resolution: {integrity: sha512-ulqQu4KMr1/sTFIYvqSdegHT8NIkt66tFAkugGnHA+1WAfEn6hMzNR+svjXGFRVLnapxvej67Z/LwchFrnLBUg==} + '@faker-js/faker@9.3.0': + resolution: {integrity: sha512-r0tJ3ZOkMd9xsu3VRfqlFR6cz0V/jFYRswAIpC+m/DIfAUXq7g8N7wTAlhSANySXYGKzGryfDXwtwsY8TxEIDw==} engines: {node: '>=18.0.0', npm: '>=9.0.0'} '@isaacs/cliui@8.0.2': @@ -121,8 +126,8 @@ packages: '@types/copyfiles@2.4.4': resolution: {integrity: sha512-2PhDCltCORlPrpM3gxZ0XuYaDcCOU46SQ7E89uzgbJ4jhpzpya/ssIY0jBA/gHtvh3SE4dxW8aMitQk0/ewlIw==} - '@types/node@22.9.0': - resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} + '@types/node@22.10.1': + resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} '@vercel/nft@0.27.6': resolution: {integrity: sha512-mwuyUxskdcV8dd7N7JnxBgvFEz1D9UOePI/WyLLzktv6HSCwgPNQGit/UJ2IykAWGlypKw4pBQjOKWvIbXITSg==} @@ -325,8 +330,8 @@ packages: resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} engines: {node: '>=8'} - dprint@0.47.5: - resolution: {integrity: sha512-EAP3OLYZXiW66HKMlhu6Gu0o7mzBVTWyMyuAAgT7dBtMX+W+pPJmIwyRUnTRQNyyFO4S7bAaa21rzIgo97Bg9A==} + dprint@0.47.6: + resolution: {integrity: sha512-vCQC+IMHVZbISA5pxEj+yshQbozmQoVFA4lzcLlqJ8rzIAH8U+1DKvesN/2Uv3Bqz6rMW6W4WY7pYJQljmiZ8w==} hasBin: true eastasianwidth@0.2.0: @@ -598,8 +603,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nanoid@5.0.8: - resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==} + nanoid@5.0.9: + resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==} engines: {node: ^18 || >=20} hasBin: true @@ -842,13 +847,13 @@ packages: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -923,31 +928,34 @@ packages: snapshots: - '@dprint/darwin-arm64@0.47.5': + '@dprint/darwin-arm64@0.47.6': + optional: true + + '@dprint/darwin-x64@0.47.6': optional: true - '@dprint/darwin-x64@0.47.5': + '@dprint/linux-arm64-glibc@0.47.6': optional: true - '@dprint/linux-arm64-glibc@0.47.5': + '@dprint/linux-arm64-musl@0.47.6': optional: true - '@dprint/linux-arm64-musl@0.47.5': + '@dprint/linux-riscv64-glibc@0.47.6': optional: true - '@dprint/linux-x64-glibc@0.47.5': + '@dprint/linux-x64-glibc@0.47.6': optional: true - '@dprint/linux-x64-musl@0.47.5': + '@dprint/linux-x64-musl@0.47.6': optional: true - '@dprint/win32-arm64@0.47.5': + '@dprint/win32-arm64@0.47.6': optional: true - '@dprint/win32-x64@0.47.5': + '@dprint/win32-x64@0.47.6': optional: true - '@faker-js/faker@9.2.0': {} + '@faker-js/faker@9.3.0': {} '@isaacs/cliui@8.0.2': dependencies: @@ -996,9 +1004,9 @@ snapshots: '@types/copyfiles@2.4.4': {} - '@types/node@22.9.0': + '@types/node@22.10.1': dependencies: - undici-types: 6.19.8 + undici-types: 6.20.0 '@vercel/nft@0.27.6': dependencies: @@ -1230,16 +1238,17 @@ snapshots: detect-libc@2.0.3: {} - dprint@0.47.5: + dprint@0.47.6: optionalDependencies: - '@dprint/darwin-arm64': 0.47.5 - '@dprint/darwin-x64': 0.47.5 - '@dprint/linux-arm64-glibc': 0.47.5 - '@dprint/linux-arm64-musl': 0.47.5 - '@dprint/linux-x64-glibc': 0.47.5 - '@dprint/linux-x64-musl': 0.47.5 - '@dprint/win32-arm64': 0.47.5 - '@dprint/win32-x64': 0.47.5 + '@dprint/darwin-arm64': 0.47.6 + '@dprint/darwin-x64': 0.47.6 + '@dprint/linux-arm64-glibc': 0.47.6 + '@dprint/linux-arm64-musl': 0.47.6 + '@dprint/linux-riscv64-glibc': 0.47.6 + '@dprint/linux-x64-glibc': 0.47.6 + '@dprint/linux-x64-musl': 0.47.6 + '@dprint/win32-arm64': 0.47.6 + '@dprint/win32-x64': 0.47.6 eastasianwidth@0.2.0: {} @@ -1471,7 +1480,7 @@ snapshots: ms@2.1.3: {} - nanoid@5.0.8: {} + nanoid@5.0.9: {} node-fetch@2.7.0: dependencies: @@ -1693,9 +1702,9 @@ snapshots: type-fest@0.13.1: {} - typescript@5.6.3: {} + typescript@5.7.2: {} - undici-types@6.19.8: {} + undici-types@6.20.0: {} unicorn-magic@0.1.0: {}