rdkafka 0.25.0-aarch64-linux-gnu → 0.26.0-aarch64-linux-gnu

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/Gemfile +5 -6
  4. data/Gemfile.lint +14 -0
  5. data/Gemfile.lint.lock +123 -0
  6. data/README.md +2 -1
  7. data/Rakefile +21 -21
  8. data/bin/verify_kafka_warnings +2 -0
  9. data/docker-compose-ssl.yml +2 -2
  10. data/docker-compose.yml +2 -2
  11. data/ext/librdkafka.so +0 -0
  12. data/lib/rdkafka/admin/acl_binding_result.rb +4 -4
  13. data/lib/rdkafka/admin/create_acl_handle.rb +4 -4
  14. data/lib/rdkafka/admin/create_acl_report.rb +0 -2
  15. data/lib/rdkafka/admin/create_partitions_handle.rb +5 -5
  16. data/lib/rdkafka/admin/create_topic_handle.rb +5 -5
  17. data/lib/rdkafka/admin/delete_acl_handle.rb +6 -6
  18. data/lib/rdkafka/admin/delete_acl_report.rb +2 -3
  19. data/lib/rdkafka/admin/delete_groups_handle.rb +5 -5
  20. data/lib/rdkafka/admin/delete_topic_handle.rb +5 -5
  21. data/lib/rdkafka/admin/describe_acl_handle.rb +6 -6
  22. data/lib/rdkafka/admin/describe_acl_report.rb +2 -3
  23. data/lib/rdkafka/admin/describe_configs_handle.rb +4 -4
  24. data/lib/rdkafka/admin/describe_configs_report.rb +1 -1
  25. data/lib/rdkafka/admin/incremental_alter_configs_handle.rb +4 -4
  26. data/lib/rdkafka/admin/incremental_alter_configs_report.rb +1 -1
  27. data/lib/rdkafka/admin/list_offsets_handle.rb +36 -0
  28. data/lib/rdkafka/admin/list_offsets_report.rb +51 -0
  29. data/lib/rdkafka/admin.rb +189 -24
  30. data/lib/rdkafka/bindings.rb +121 -84
  31. data/lib/rdkafka/callbacks.rb +53 -10
  32. data/lib/rdkafka/config.rb +20 -20
  33. data/lib/rdkafka/consumer/message.rb +5 -8
  34. data/lib/rdkafka/consumer/partition.rb +2 -2
  35. data/lib/rdkafka/consumer/topic_partition_list.rb +10 -10
  36. data/lib/rdkafka/consumer.rb +208 -18
  37. data/lib/rdkafka/error.rb +25 -14
  38. data/lib/rdkafka/helpers/oauth.rb +0 -1
  39. data/lib/rdkafka/helpers/time.rb +5 -0
  40. data/lib/rdkafka/metadata.rb +16 -16
  41. data/lib/rdkafka/native_kafka.rb +63 -2
  42. data/lib/rdkafka/producer/delivery_handle.rb +5 -5
  43. data/lib/rdkafka/producer/delivery_report.rb +1 -1
  44. data/lib/rdkafka/producer/partitions_count_cache.rb +6 -6
  45. data/lib/rdkafka/producer.rb +117 -57
  46. data/lib/rdkafka/version.rb +3 -3
  47. data/lib/rdkafka.rb +2 -0
  48. data/package-lock.json +331 -0
  49. data/package.json +9 -0
  50. data/rdkafka.gemspec +39 -40
  51. data/renovate.json +21 -0
  52. metadata +8 -2
@@ -6,10 +6,10 @@ module Rdkafka
6
6
  # producing a message.
7
7
  class DeliveryHandle < Rdkafka::AbstractHandle
8
8
  layout :pending, :bool,
9
- :response, :int,
10
- :partition, :int,
11
- :offset, :int64,
12
- :topic_name, :pointer
9
+ :response, :int,
10
+ :partition, :int,
11
+ :offset, :int64,
12
+ :topic_name, :pointer
13
13
 
14
14
  # @return [Object, nil] label set during message production or nil by default
15
15
  attr_accessor :label
@@ -31,7 +31,7 @@ module Rdkafka
31
31
  # For part of errors, we will not get a topic name reference and in cases like this
32
32
  # we should not return it
33
33
  topic,
34
- self[:response] != 0 ? RdkafkaError.new(self[:response]) : nil,
34
+ (self[:response] != 0) ? RdkafkaError.new(self[:response]) : nil,
35
35
  label
36
36
  )
37
37
  end
@@ -30,7 +30,7 @@ module Rdkafka
30
30
  # is present in both places
31
31
  #
32
32
  # We do not remove the original `#topic_name` because of backwards compatibility
33
- alias topic topic_name
33
+ alias_method :topic, :topic_name
34
34
 
35
35
  # @private
36
36
  # @param partition [Integer] partition number
@@ -147,17 +147,17 @@ module Rdkafka
147
147
 
148
148
  if current_info.nil?
149
149
  # Create new entry
150
- @counts[topic] = [monotonic_now, new_count]
150
+ @counts[topic] = [monotonic_now_ms, new_count]
151
151
  else
152
152
  current_count = current_info[1]
153
153
 
154
154
  if new_count > current_count
155
155
  # Update to higher count value
156
- current_info[0] = monotonic_now
156
+ current_info[0] = monotonic_now_ms
157
157
  current_info[1] = new_count
158
158
  else
159
159
  # Same or lower count, update timestamp only
160
- current_info[0] = monotonic_now
160
+ current_info[0] = monotonic_now_ms
161
161
  end
162
162
  end
163
163
  end
@@ -211,15 +211,15 @@ module Rdkafka
211
211
  return unless current_info
212
212
 
213
213
  # Update the timestamp in-place
214
- current_info[0] = monotonic_now
214
+ current_info[0] = monotonic_now_ms
215
215
  end
216
216
 
217
217
  # Check if a timestamp has expired based on the TTL
218
218
  #
219
- # @param timestamp [Float] Monotonic timestamp to check
219
+ # @param timestamp [Integer] Monotonic timestamp in milliseconds to check
220
220
  # @return [Boolean] true if expired, false otherwise
221
221
  def expired?(timestamp)
222
- (monotonic_now - timestamp) * 1_000 > @ttl_ms
222
+ monotonic_now_ms - timestamp > @ttl_ms
223
223
  end
224
224
  end
225
225
  end
@@ -80,25 +80,25 @@ module Rdkafka
80
80
 
81
81
  # If config is empty, we create an empty reference that will be used with defaults
82
82
  rd_topic_config = if config.empty?
83
- nil
84
- else
85
- Rdkafka::Bindings.rd_kafka_topic_conf_new.tap do |topic_config|
86
- config.each do |key, value|
87
- error_buffer = FFI::MemoryPointer.new(:char, 256)
88
- result = Rdkafka::Bindings.rd_kafka_topic_conf_set(
89
- topic_config,
90
- key.to_s,
91
- value.to_s,
92
- error_buffer,
93
- 256
94
- )
95
-
96
- unless result == :config_ok
97
- raise Config::ConfigError.new(error_buffer.read_string)
98
- end
99
- end
100
- end
101
- end
83
+ nil
84
+ else
85
+ Rdkafka::Bindings.rd_kafka_topic_conf_new.tap do |topic_config|
86
+ config.each do |key, value|
87
+ error_buffer = FFI::MemoryPointer.new(:char, 256)
88
+ result = Rdkafka::Bindings.rd_kafka_topic_conf_set(
89
+ topic_config,
90
+ key.to_s,
91
+ value.to_s,
92
+ error_buffer,
93
+ 256
94
+ )
95
+
96
+ unless result == :config_ok
97
+ raise Config::ConfigError.new(error_buffer.read_string)
98
+ end
99
+ end
100
+ end
101
+ end
102
102
 
103
103
  topic_handle = Bindings.rd_kafka_topic_new(inner, topic, rd_topic_config)
104
104
 
@@ -122,6 +122,26 @@ module Rdkafka
122
122
  end
123
123
  end
124
124
 
125
+ # Enable IO event notifications for fiber scheduler integration
126
+ # When delivery confirmations arrive, librdkafka will write to your FD
127
+ #
128
+ # @param fd [Integer] file descriptor to signal (from IO.pipe or eventfd)
129
+ # @param payload [String] data to write to fd (default: "\x01")
130
+ # @return [nil]
131
+ # @raise [ClosedInnerError] when the producer is closed
132
+ def enable_queue_io_events(fd, payload = "\x01")
133
+ @native_kafka.enable_main_queue_io_events(fd, payload)
134
+ end
135
+
136
+ # Enable IO event notifications for background events
137
+ # @param fd [Integer] file descriptor to signal (from IO.pipe or eventfd)
138
+ # @param payload [String] data to write to fd (default: "\x01")
139
+ # @return [nil]
140
+ # @raise [ClosedInnerError] when the producer is closed
141
+ def enable_background_queue_io_events(fd, payload = "\x01")
142
+ @native_kafka.enable_background_queue_io_events(fd, payload)
143
+ end
144
+
125
145
  # Set a callback that will be called every time a message is successfully produced.
126
146
  # The callback is called with a {DeliveryReport} and {DeliveryHandle}
127
147
  #
@@ -236,7 +256,46 @@ module Rdkafka
236
256
  end
237
257
  end
238
258
 
239
- alias queue_length queue_size
259
+ alias_method :queue_length, :queue_size
260
+
261
+ # Polls for events in a non-blocking loop, yielding the count after each iteration.
262
+ #
263
+ # This method processes delivery callbacks in a single GVL/mutex session, which is more
264
+ # efficient than repeated individual polls. It uses non-blocking polls internally
265
+ # (no GVL release between polls).
266
+ #
267
+ # Yields the count of events processed after each poll iteration, allowing the caller
268
+ # to implement timeout or other termination logic by returning `:stop`.
269
+ #
270
+ # @yield [count] Called after each poll iteration
271
+ # @yieldparam count [Integer] Number of events processed in this iteration
272
+ # @yieldreturn [Symbol, Object] Return `:stop` to break the loop, any other value continues
273
+ # @return [nil]
274
+ # @raise [Rdkafka::ClosedProducerError] if called on a closed producer
275
+ #
276
+ # @note This method holds the inner lock until the queue is empty or `:stop` is returned.
277
+ # Other producer operations (produce, close, etc.) will wait until this method returns.
278
+ # @note This method is thread-safe as it uses @native_kafka.with_inner synchronization
279
+ #
280
+ # @example Drain all pending callbacks
281
+ # producer.events_poll_nb_each { |_count| }
282
+ #
283
+ # @example With timeout control
284
+ # deadline = monotonic_now + timeout_ms
285
+ # producer.events_poll_nb_each do |_count|
286
+ # :stop if monotonic_now >= deadline
287
+ # end
288
+ def events_poll_nb_each
289
+ closed_producer_check(__method__)
290
+
291
+ @native_kafka.with_inner do |inner|
292
+ loop do
293
+ count = Rdkafka::Bindings.rd_kafka_poll_nb(inner, 0)
294
+ break if count.zero?
295
+ break if yield(count) == :stop
296
+ end
297
+ end
298
+ end
240
299
 
241
300
  # Partition count for a given topic.
242
301
  #
@@ -310,17 +369,17 @@ module Rdkafka
310
369
 
311
370
  # Get payload length
312
371
  payload_size = if payload.nil?
313
- 0
314
- else
315
- payload.bytesize
316
- end
372
+ 0
373
+ else
374
+ payload.bytesize
375
+ end
317
376
 
318
377
  # Get key length
319
378
  key_size = if key.nil?
320
- 0
321
- else
322
- key.bytesize
323
- end
379
+ 0
380
+ else
381
+ key.bytesize
382
+ end
324
383
 
325
384
  topic_config_hash = topic_config.hash
326
385
 
@@ -337,11 +396,14 @@ module Rdkafka
337
396
  selected_partitioner = @topics_configs.dig(topic, topic_config_hash, :partitioner) || partitioner
338
397
 
339
398
  # If the topic is not present, set to -1
340
- partition = Rdkafka::Bindings.partitioner(
341
- topic_ref,
342
- partition_key,
343
- partition_count,
344
- selected_partitioner) if partition_count.positive?
399
+ if partition_count.positive?
400
+ partition = Rdkafka::Bindings.partitioner(
401
+ topic_ref,
402
+ partition_key,
403
+ partition_count,
404
+ selected_partitioner
405
+ )
406
+ end
345
407
  end
346
408
 
347
409
  # If partition is nil, use RD_KAFKA_PARTITION_UA to let librdafka set the partition randomly or
@@ -351,14 +413,14 @@ module Rdkafka
351
413
  # If timestamp is nil use 0 and let Kafka set one. If an integer or time
352
414
  # use it.
353
415
  raw_timestamp = if timestamp.nil?
354
- 0
355
- elsif timestamp.is_a?(Integer)
356
- timestamp
357
- elsif timestamp.is_a?(Time)
358
- (timestamp.to_i * 1000) + (timestamp.usec / 1000)
359
- else
360
- raise TypeError.new("Timestamp has to be nil, an Integer or a Time")
361
- end
416
+ 0
417
+ elsif timestamp.is_a?(Integer)
418
+ timestamp
419
+ elsif timestamp.is_a?(Time)
420
+ (timestamp.to_i * 1000) + (timestamp.usec / 1000)
421
+ else
422
+ raise TypeError.new("Timestamp has to be nil, an Integer or a Time")
423
+ end
362
424
 
363
425
  delivery_handle = DeliveryHandle.new
364
426
  delivery_handle.label = label
@@ -376,29 +438,27 @@ module Rdkafka
376
438
  :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_KEY, :buffer_in, key, :size_t, key_size,
377
439
  :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_PARTITION, :int32, partition,
378
440
  :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_TIMESTAMP, :int64, raw_timestamp,
379
- :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_OPAQUE, :pointer, delivery_handle,
441
+ :int, Rdkafka::Bindings::RD_KAFKA_VTYPE_OPAQUE, :pointer, delivery_handle
380
442
  ]
381
443
 
382
- if headers
383
- headers.each do |key0, value0|
384
- key = key0.to_s
385
- if value0.is_a?(Array)
386
- # Handle array of values per KIP-82
387
- value0.each do |value|
388
- value = value.to_s
389
- args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_HEADER
390
- args << :string << key
391
- args << :pointer << value
392
- args << :size_t << value.bytesize
393
- end
394
- else
395
- # Handle single value
396
- value = value0.to_s
444
+ headers&.each do |key0, value0|
445
+ key = key0.to_s
446
+ if value0.is_a?(Array)
447
+ # Handle array of values per KIP-82
448
+ value0.each do |value|
449
+ value = value.to_s
397
450
  args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_HEADER
398
451
  args << :string << key
399
452
  args << :pointer << value
400
453
  args << :size_t << value.bytesize
401
454
  end
455
+ else
456
+ # Handle single value
457
+ value = value0.to_s
458
+ args << :int << Rdkafka::Bindings::RD_KAFKA_VTYPE_HEADER
459
+ args << :string << key
460
+ args << :pointer << value
461
+ args << :size_t << value.bytesize
402
462
  end
403
463
  end
404
464
 
@@ -2,9 +2,9 @@
2
2
 
3
3
  module Rdkafka
4
4
  # Current rdkafka-ruby gem version
5
- VERSION = "0.25.0"
5
+ VERSION = "0.26.0"
6
6
  # Target librdkafka version to be used
7
- LIBRDKAFKA_VERSION = "2.12.1"
7
+ LIBRDKAFKA_VERSION = "2.13.2"
8
8
  # SHA256 hash of the librdkafka source tarball for verification
9
- LIBRDKAFKA_SOURCE_SHA256 = "ec103fa05cb0f251e375f6ea0b6112cfc9d0acd977dc5b69fdc54242ba38a16f"
9
+ LIBRDKAFKA_SOURCE_SHA256 = "14972092e4115f6e99f798a7cb420cbf6daa0c73502b3c52ae42fb5b418eea8f"
10
10
  end
data/lib/rdkafka.rb CHANGED
@@ -29,6 +29,8 @@ require "rdkafka/admin/describe_configs_handle"
29
29
  require "rdkafka/admin/describe_configs_report"
30
30
  require "rdkafka/admin/incremental_alter_configs_handle"
31
31
  require "rdkafka/admin/incremental_alter_configs_report"
32
+ require "rdkafka/admin/list_offsets_handle"
33
+ require "rdkafka/admin/list_offsets_report"
32
34
  require "rdkafka/admin/acl_binding_result"
33
35
  require "rdkafka/admin/config_binding_result"
34
36
  require "rdkafka/admin/config_resource_binding_result"
data/package-lock.json ADDED
@@ -0,0 +1,331 @@
1
+ {
2
+ "name": "rdkafka-ruby",
3
+ "version": "1.0.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "rdkafka-ruby",
9
+ "version": "1.0.0",
10
+ "devDependencies": {
11
+ "lostconf": "0.4.0"
12
+ }
13
+ },
14
+ "node_modules/@nodelib/fs.scandir": {
15
+ "version": "2.1.5",
16
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
17
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
18
+ "dev": true,
19
+ "license": "MIT",
20
+ "dependencies": {
21
+ "@nodelib/fs.stat": "2.0.5",
22
+ "run-parallel": "^1.1.9"
23
+ },
24
+ "engines": {
25
+ "node": ">= 8"
26
+ }
27
+ },
28
+ "node_modules/@nodelib/fs.stat": {
29
+ "version": "2.0.5",
30
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
31
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
32
+ "dev": true,
33
+ "license": "MIT",
34
+ "engines": {
35
+ "node": ">= 8"
36
+ }
37
+ },
38
+ "node_modules/@nodelib/fs.walk": {
39
+ "version": "1.2.8",
40
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
41
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
42
+ "dev": true,
43
+ "license": "MIT",
44
+ "dependencies": {
45
+ "@nodelib/fs.scandir": "2.1.5",
46
+ "fastq": "^1.6.0"
47
+ },
48
+ "engines": {
49
+ "node": ">= 8"
50
+ }
51
+ },
52
+ "node_modules/braces": {
53
+ "version": "3.0.3",
54
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
55
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
56
+ "dev": true,
57
+ "license": "MIT",
58
+ "dependencies": {
59
+ "fill-range": "^7.1.1"
60
+ },
61
+ "engines": {
62
+ "node": ">=8"
63
+ }
64
+ },
65
+ "node_modules/chalk": {
66
+ "version": "5.6.2",
67
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
68
+ "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
69
+ "dev": true,
70
+ "license": "MIT",
71
+ "engines": {
72
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
73
+ },
74
+ "funding": {
75
+ "url": "https://github.com/chalk/chalk?sponsor=1"
76
+ }
77
+ },
78
+ "node_modules/commander": {
79
+ "version": "12.1.0",
80
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
81
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
82
+ "dev": true,
83
+ "license": "MIT",
84
+ "engines": {
85
+ "node": ">=18"
86
+ }
87
+ },
88
+ "node_modules/fast-glob": {
89
+ "version": "3.3.3",
90
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
91
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
92
+ "dev": true,
93
+ "license": "MIT",
94
+ "dependencies": {
95
+ "@nodelib/fs.stat": "^2.0.2",
96
+ "@nodelib/fs.walk": "^1.2.3",
97
+ "glob-parent": "^5.1.2",
98
+ "merge2": "^1.3.0",
99
+ "micromatch": "^4.0.8"
100
+ },
101
+ "engines": {
102
+ "node": ">=8.6.0"
103
+ }
104
+ },
105
+ "node_modules/fastq": {
106
+ "version": "1.20.1",
107
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
108
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
109
+ "dev": true,
110
+ "license": "ISC",
111
+ "dependencies": {
112
+ "reusify": "^1.0.4"
113
+ }
114
+ },
115
+ "node_modules/fill-range": {
116
+ "version": "7.1.1",
117
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
118
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
119
+ "dev": true,
120
+ "license": "MIT",
121
+ "dependencies": {
122
+ "to-regex-range": "^5.0.1"
123
+ },
124
+ "engines": {
125
+ "node": ">=8"
126
+ }
127
+ },
128
+ "node_modules/glob-parent": {
129
+ "version": "5.1.2",
130
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
131
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
132
+ "dev": true,
133
+ "license": "ISC",
134
+ "dependencies": {
135
+ "is-glob": "^4.0.1"
136
+ },
137
+ "engines": {
138
+ "node": ">= 6"
139
+ }
140
+ },
141
+ "node_modules/is-extglob": {
142
+ "version": "2.1.1",
143
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
144
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
145
+ "dev": true,
146
+ "license": "MIT",
147
+ "engines": {
148
+ "node": ">=0.10.0"
149
+ }
150
+ },
151
+ "node_modules/is-glob": {
152
+ "version": "4.0.3",
153
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
154
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
155
+ "dev": true,
156
+ "license": "MIT",
157
+ "dependencies": {
158
+ "is-extglob": "^2.1.1"
159
+ },
160
+ "engines": {
161
+ "node": ">=0.10.0"
162
+ }
163
+ },
164
+ "node_modules/is-number": {
165
+ "version": "7.0.0",
166
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
167
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
168
+ "dev": true,
169
+ "license": "MIT",
170
+ "engines": {
171
+ "node": ">=0.12.0"
172
+ }
173
+ },
174
+ "node_modules/lostconf": {
175
+ "version": "0.4.0",
176
+ "resolved": "https://registry.npmjs.org/lostconf/-/lostconf-0.4.0.tgz",
177
+ "integrity": "sha512-VNbUnirRU7uESqMHslIRHTcuyx/rr4OZK+L7EQXtYUe5PorBgqBYvPu+6xOr0CoUy4n34NNUKO6BBH6TgwwGTA==",
178
+ "dev": true,
179
+ "license": "MIT",
180
+ "dependencies": {
181
+ "chalk": "^5.3.0",
182
+ "commander": "^12.1.0",
183
+ "fast-glob": "^3.3.2",
184
+ "micromatch": "^4.0.8",
185
+ "smol-toml": "^1.3.0",
186
+ "yaml": "^2.5.0"
187
+ },
188
+ "bin": {
189
+ "lostconf": "dist/cli.js"
190
+ },
191
+ "engines": {
192
+ "node": ">=18.0.0"
193
+ }
194
+ },
195
+ "node_modules/merge2": {
196
+ "version": "1.4.1",
197
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
198
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
199
+ "dev": true,
200
+ "license": "MIT",
201
+ "engines": {
202
+ "node": ">= 8"
203
+ }
204
+ },
205
+ "node_modules/micromatch": {
206
+ "version": "4.0.8",
207
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
208
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
209
+ "dev": true,
210
+ "license": "MIT",
211
+ "dependencies": {
212
+ "braces": "^3.0.3",
213
+ "picomatch": "^2.3.1"
214
+ },
215
+ "engines": {
216
+ "node": ">=8.6"
217
+ }
218
+ },
219
+ "node_modules/picomatch": {
220
+ "version": "2.3.2",
221
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
222
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
223
+ "dev": true,
224
+ "license": "MIT",
225
+ "engines": {
226
+ "node": ">=8.6"
227
+ },
228
+ "funding": {
229
+ "url": "https://github.com/sponsors/jonschlinkert"
230
+ }
231
+ },
232
+ "node_modules/queue-microtask": {
233
+ "version": "1.2.3",
234
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
235
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
236
+ "dev": true,
237
+ "funding": [
238
+ {
239
+ "type": "github",
240
+ "url": "https://github.com/sponsors/feross"
241
+ },
242
+ {
243
+ "type": "patreon",
244
+ "url": "https://www.patreon.com/feross"
245
+ },
246
+ {
247
+ "type": "consulting",
248
+ "url": "https://feross.org/support"
249
+ }
250
+ ],
251
+ "license": "MIT"
252
+ },
253
+ "node_modules/reusify": {
254
+ "version": "1.1.0",
255
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
256
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
257
+ "dev": true,
258
+ "license": "MIT",
259
+ "engines": {
260
+ "iojs": ">=1.0.0",
261
+ "node": ">=0.10.0"
262
+ }
263
+ },
264
+ "node_modules/run-parallel": {
265
+ "version": "1.2.0",
266
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
267
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
268
+ "dev": true,
269
+ "funding": [
270
+ {
271
+ "type": "github",
272
+ "url": "https://github.com/sponsors/feross"
273
+ },
274
+ {
275
+ "type": "patreon",
276
+ "url": "https://www.patreon.com/feross"
277
+ },
278
+ {
279
+ "type": "consulting",
280
+ "url": "https://feross.org/support"
281
+ }
282
+ ],
283
+ "license": "MIT",
284
+ "dependencies": {
285
+ "queue-microtask": "^1.2.2"
286
+ }
287
+ },
288
+ "node_modules/smol-toml": {
289
+ "version": "1.6.0",
290
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz",
291
+ "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==",
292
+ "dev": true,
293
+ "license": "BSD-3-Clause",
294
+ "engines": {
295
+ "node": ">= 18"
296
+ },
297
+ "funding": {
298
+ "url": "https://github.com/sponsors/cyyynthia"
299
+ }
300
+ },
301
+ "node_modules/to-regex-range": {
302
+ "version": "5.0.1",
303
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
304
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
305
+ "dev": true,
306
+ "license": "MIT",
307
+ "dependencies": {
308
+ "is-number": "^7.0.0"
309
+ },
310
+ "engines": {
311
+ "node": ">=8.0"
312
+ }
313
+ },
314
+ "node_modules/yaml": {
315
+ "version": "2.8.2",
316
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz",
317
+ "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==",
318
+ "dev": true,
319
+ "license": "ISC",
320
+ "bin": {
321
+ "yaml": "bin.mjs"
322
+ },
323
+ "engines": {
324
+ "node": ">= 14.6"
325
+ },
326
+ "funding": {
327
+ "url": "https://github.com/sponsors/eemeli"
328
+ }
329
+ }
330
+ }
331
+ }
data/package.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "rdkafka-ruby",
3
+ "version": "1.0.0",
4
+ "description": "CI dependencies for rdkafka-ruby",
5
+ "private": true,
6
+ "devDependencies": {
7
+ "lostconf": "0.4.0"
8
+ }
9
+ }