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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +17 -0
- data/Gemfile +5 -6
- data/Gemfile.lint +14 -0
- data/Gemfile.lint.lock +123 -0
- data/README.md +2 -1
- data/Rakefile +21 -21
- data/bin/verify_kafka_warnings +2 -0
- data/docker-compose-ssl.yml +2 -2
- data/docker-compose.yml +2 -2
- data/ext/librdkafka.so +0 -0
- data/lib/rdkafka/admin/acl_binding_result.rb +4 -4
- data/lib/rdkafka/admin/create_acl_handle.rb +4 -4
- data/lib/rdkafka/admin/create_acl_report.rb +0 -2
- data/lib/rdkafka/admin/create_partitions_handle.rb +5 -5
- data/lib/rdkafka/admin/create_topic_handle.rb +5 -5
- data/lib/rdkafka/admin/delete_acl_handle.rb +6 -6
- data/lib/rdkafka/admin/delete_acl_report.rb +2 -3
- data/lib/rdkafka/admin/delete_groups_handle.rb +5 -5
- data/lib/rdkafka/admin/delete_topic_handle.rb +5 -5
- data/lib/rdkafka/admin/describe_acl_handle.rb +6 -6
- data/lib/rdkafka/admin/describe_acl_report.rb +2 -3
- data/lib/rdkafka/admin/describe_configs_handle.rb +4 -4
- data/lib/rdkafka/admin/describe_configs_report.rb +1 -1
- data/lib/rdkafka/admin/incremental_alter_configs_handle.rb +4 -4
- data/lib/rdkafka/admin/incremental_alter_configs_report.rb +1 -1
- data/lib/rdkafka/admin/list_offsets_handle.rb +36 -0
- data/lib/rdkafka/admin/list_offsets_report.rb +51 -0
- data/lib/rdkafka/admin.rb +189 -24
- data/lib/rdkafka/bindings.rb +121 -84
- data/lib/rdkafka/callbacks.rb +53 -10
- data/lib/rdkafka/config.rb +20 -20
- data/lib/rdkafka/consumer/message.rb +5 -8
- data/lib/rdkafka/consumer/partition.rb +2 -2
- data/lib/rdkafka/consumer/topic_partition_list.rb +10 -10
- data/lib/rdkafka/consumer.rb +208 -18
- data/lib/rdkafka/error.rb +25 -14
- data/lib/rdkafka/helpers/oauth.rb +0 -1
- data/lib/rdkafka/helpers/time.rb +5 -0
- data/lib/rdkafka/metadata.rb +16 -16
- data/lib/rdkafka/native_kafka.rb +63 -2
- data/lib/rdkafka/producer/delivery_handle.rb +5 -5
- data/lib/rdkafka/producer/delivery_report.rb +1 -1
- data/lib/rdkafka/producer/partitions_count_cache.rb +6 -6
- data/lib/rdkafka/producer.rb +117 -57
- data/lib/rdkafka/version.rb +3 -3
- data/lib/rdkafka.rb +2 -0
- data/package-lock.json +331 -0
- data/package.json +9 -0
- data/rdkafka.gemspec +39 -40
- data/renovate.json +21 -0
- 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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
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] = [
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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 [
|
|
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
|
-
|
|
222
|
+
monotonic_now_ms - timestamp > @ttl_ms
|
|
223
223
|
end
|
|
224
224
|
end
|
|
225
225
|
end
|
data/lib/rdkafka/producer.rb
CHANGED
|
@@ -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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
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
|
-
|
|
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
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
372
|
+
0
|
|
373
|
+
else
|
|
374
|
+
payload.bytesize
|
|
375
|
+
end
|
|
317
376
|
|
|
318
377
|
# Get key length
|
|
319
378
|
key_size = if key.nil?
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
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
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
|
data/lib/rdkafka/version.rb
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
module Rdkafka
|
|
4
4
|
# Current rdkafka-ruby gem version
|
|
5
|
-
VERSION = "0.
|
|
5
|
+
VERSION = "0.26.0"
|
|
6
6
|
# Target librdkafka version to be used
|
|
7
|
-
LIBRDKAFKA_VERSION = "2.
|
|
7
|
+
LIBRDKAFKA_VERSION = "2.13.2"
|
|
8
8
|
# SHA256 hash of the librdkafka source tarball for verification
|
|
9
|
-
LIBRDKAFKA_SOURCE_SHA256 = "
|
|
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
|
+
}
|