diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml
index 206ae618..c8950783 100644
--- a/.github/workflows/npm-publish.yml
+++ b/.github/workflows/npm-publish.yml
@@ -16,7 +16,7 @@ jobs:
submodules: recursive
- uses: actions/setup-node@v3
with:
- node-version: 18
+ node-version: 20
registry-url: https://registry.npmjs.org/
cache: "npm"
- run: npm ci
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 3a531a38..be635cfc 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -10,13 +10,13 @@ jobs:
build:
strategy:
matrix:
- node: [10, 12, 14, 16, 18, 20]
+ node: [16, 18, 20, 21]
os: [ubuntu-22.04]
include:
# single mac test due to minute multipliers
# https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions
- node: 20
- os: macos-12
+ os: macos-14
# single windows test due to node.js 14 node-gyp / vs 2022 issues
- node: 20
os: windows-2022
@@ -39,5 +39,5 @@ jobs:
run: npm ci
# skipping on windows for now due to Make / mocha exit code issues
- name: Test
- if: runner.os != 'Windows' && matrix.node != 10
+ if: runner.os != 'Windows'
run: npm test
diff --git a/.gitignore b/.gitignore
index fd720f29..afac0505 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ deps/*
.DS_Store
.vscode
+.idea
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index db025fe0..9c916206 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -13,6 +13,7 @@ so if you feel something is missing feel free to send a pull request.
* [Contributor Agreement](#contributor-agreement)
[How Can I Contribute?](#how-can-i-contribute)
+ * [Setting up the repository](#setting-up-the-repository)
* [Reporting Bugs](#reporting-bugs)
* [Suggesting Enhancements](#suggesting-enhancements)
* [Pull Requests](#pull-requests)
@@ -37,6 +38,14 @@ Not currently required.
## How can I contribute?
+### Setting up the repository
+
+To set up the library locally, do the following:
+
+1) Clone this repository.
+2) Install librdkafka with `git submodule update --init --recursive`
+3) Install the dependencies `npm install`
+
### Reporting Bugs
Please use __Github Issues__ to report bugs. When filling out an issue report,
@@ -215,7 +224,7 @@ Steps to update:
```
Note: This is ran automatically during CI flows but it's good to run it during the version upgrade pull request.
-1. Run `npm install --lockfile-version 2` to build with the new version and fix any build errors that occur.
+1. Run `npm install` to build with the new version and fix any build errors that occur.
1. Run unit tests: `npm run test`
diff --git a/README.md b/README.md
index c42ae3d5..70d7440d 100644
--- a/README.md
+++ b/README.md
@@ -22,7 +22,7 @@ I am looking for *your* help to make this project even better! If you're interes
The `node-rdkafka` library is a high-performance NodeJS client for [Apache Kafka](http://kafka.apache.org/) that wraps the native [librdkafka](https://github.com/edenhill/librdkafka) library. All the complexity of balancing writes across partitions and managing (possibly ever-changing) brokers should be encapsulated in the library.
-__This library currently uses `librdkafka` version `2.3.0`.__
+__This library currently uses `librdkafka` version `2.6.0`.__
## Reference Docs
@@ -39,7 +39,7 @@ Play nice; Play fair.
## Requirements
* Apache Kafka >=0.9
-* Node.js >=4
+* Node.js >=16
* Linux/Mac
* Windows?! See below
* OpenSSL
@@ -65,7 +65,7 @@ Using Alpine Linux? Check out the [docs](https://github.com/Blizzard/node-rdkafk
### Windows
-Windows build **is not** compiled from `librdkafka` source but it is rather linked against the appropriate version of [NuGet librdkafka.redist](https://www.nuget.org/packages/librdkafka.redist/) static binary that gets downloaded from `https://globalcdn.nuget.org/packages/librdkafka.redist.2.3.0.nupkg` during installation. This download link can be changed using the environment variable `NODE_RDKAFKA_NUGET_BASE_URL` that defaults to `https://globalcdn.nuget.org/packages/` when it's no set.
+Windows build **is not** compiled from `librdkafka` source but it is rather linked against the appropriate version of [NuGet librdkafka.redist](https://www.nuget.org/packages/librdkafka.redist/) static binary that gets downloaded from `https://globalcdn.nuget.org/packages/librdkafka.redist.2.6.0.nupkg` during installation. This download link can be changed using the environment variable `NODE_RDKAFKA_NUGET_BASE_URL` that defaults to `https://globalcdn.nuget.org/packages/` when it's no set.
Requirements:
* [node-gyp for Windows](https://github.com/nodejs/node-gyp#on-windows)
@@ -102,7 +102,7 @@ const Kafka = require('node-rdkafka');
## Configuration
-You can pass many configuration options to `librdkafka`. A full list can be found in `librdkafka`'s [Configuration.md](https://github.com/edenhill/librdkafka/blob/v2.3.0/CONFIGURATION.md)
+You can pass many configuration options to `librdkafka`. A full list can be found in `librdkafka`'s [Configuration.md](https://github.com/edenhill/librdkafka/blob/v2.6.0/CONFIGURATION.md)
Configuration keys that have the suffix `_cb` are designated as callbacks. Some
of these keys are informational and you can choose to opt-in (for example, `dr_cb`). Others are callbacks designed to
@@ -137,7 +137,7 @@ You can also get the version of `librdkafka`
const Kafka = require('node-rdkafka');
console.log(Kafka.librdkafkaVersion);
-// #=> 2.3.0
+// #=> 2.6.0
```
## Sending Messages
@@ -150,7 +150,7 @@ const producer = new Kafka.Producer({
});
```
-A `Producer` requires only `metadata.broker.list` (the Kafka brokers) to be created. The values in this list are separated by commas. For other configuration options, see the [Configuration.md](https://github.com/edenhill/librdkafka/blob/v2.3.0/CONFIGURATION.md) file described previously.
+A `Producer` requires only `metadata.broker.list` (the Kafka brokers) to be created. The values in this list are separated by commas. For other configuration options, see the [Configuration.md](https://github.com/edenhill/librdkafka/blob/v2.6.0/CONFIGURATION.md) file described previously.
The following example illustrates a list with several `librdkafka` options set.
@@ -516,6 +516,7 @@ The following table lists events for this API.
|`data` | When using the Standard API consumed messages are emitted in this event. |
|`partition.eof` | When using Standard API and the configuration option `enable.partition.eof` is set, `partition.eof` events are emitted in this event. The event contains `topic`, `partition` and `offset` properties. |
|`warning` | The event is emitted in case of `UNKNOWN_TOPIC_OR_PART` or `TOPIC_AUTHORIZATION_FAILED` errors when consuming in *Flowing mode*. Since the consumer will continue working if the error is still happening, the warning event should reappear after the next metadata refresh. To control the metadata refresh rate set `topic.metadata.refresh.interval.ms` property. Once you resolve the error, you can manually call `getMetadata` to speed up consumer recovery. |
+|`rebalance` | The `rebalance` event is emitted when the consumer group is rebalanced.
This event is only emitted if the `rebalance_cb` configuration is set to a function or set to `true` |
|`disconnected` | The `disconnected` event is emitted when the broker disconnects.
This event is only emitted when `.disconnect` is called. The wrapper will always try to reconnect otherwise. |
|`ready` | The `ready` event is emitted when the `Consumer` is ready to read messages. |
|`event` | The `event` event is emitted when `librdkafka` reports an event (if you opted in via the `event_cb` option).|
diff --git a/config.d.ts b/config.d.ts
index e78a4141..493ac807 100644
--- a/config.d.ts
+++ b/config.d.ts
@@ -1,4 +1,4 @@
-// ====== Generated from librdkafka 2.3.0 file CONFIGURATION.md ======
+// ====== Generated from librdkafka 2.6.0 file CONFIGURATION.md ======
// Code that generated this is a derivative work of the code from Nam Nguyen
// https://gist.github.com/ntgn81/066c2c8ec5b4238f85d1e9168a04e3fb
@@ -620,12 +620,33 @@ export interface GlobalConfig {
"client.rack"?: string;
/**
- * Controls how the client uses DNS lookups. By default, when the lookup returns multiple IP addresses for a hostname, they will all be attempted for connection before the connection is considered failed. This applies to both bootstrap and advertised servers. If the value is set to `resolve_canonical_bootstrap_servers_only`, each entry will be resolved and expanded into a list of canonical names. NOTE: Default here is different from the Java client's default behavior, which connects only to the first IP address returned for a hostname.
+ * The backoff time in milliseconds before retrying a protocol request, this is the first backoff time, and will be backed off exponentially until number of retries is exhausted, and it's capped by retry.backoff.max.ms.
+ *
+ * @default 100
+ */
+ "retry.backoff.ms"?: number;
+
+ /**
+ * The max backoff time in milliseconds before retrying a protocol request, this is the atmost backoff allowed for exponentially backed off requests.
+ *
+ * @default 1000
+ */
+ "retry.backoff.max.ms"?: number;
+
+ /**
+ * Controls how the client uses DNS lookups. By default, when the lookup returns multiple IP addresses for a hostname, they will all be attempted for connection before the connection is considered failed. This applies to both bootstrap and advertised servers. If the value is set to `resolve_canonical_bootstrap_servers_only`, each entry will be resolved and expanded into a list of canonical names. **WARNING**: `resolve_canonical_bootstrap_servers_only` must only be used with `GSSAPI` (Kerberos) as `sasl.mechanism`, as it's the only purpose of this configuration value. **NOTE**: Default here is different from the Java client's default behavior, which connects only to the first IP address returned for a hostname.
*
* @default use_all_dns_ips
*/
"client.dns.lookup"?: 'use_all_dns_ips' | 'resolve_canonical_bootstrap_servers_only';
+ /**
+ * Whether to enable pushing of client metrics to the cluster, if the cluster has a client metrics subscription which matches this client
+ *
+ * @default true
+ */
+ "enable.metrics.push"?: boolean;
+
/**
* Enables or disables `event.*` emitting.
*
@@ -703,20 +724,6 @@ export interface ProducerGlobalConfig extends GlobalConfig {
*/
"retries"?: number;
- /**
- * The backoff time in milliseconds before retrying a protocol request, this is the first backoff time, and will be backed off exponentially until number of retries is exhausted, and it's capped by retry.backoff.max.ms.
- *
- * @default 100
- */
- "retry.backoff.ms"?: number;
-
- /**
- * The max backoff time in milliseconds before retrying a protocol request, this is the atmost backoff allowed for exponentially backed off requests.
- *
- * @default 1000
- */
- "retry.backoff.max.ms"?: number;
-
/**
* The threshold of outstanding not yet transmitted broker requests needed to backpressure the producer's message accumulator. If the number of not yet transmitted requests equals or exceeds this number, produce request creation that would have otherwise been triggered (for example, in accordance with linger.ms) will be delayed. A lower number yields larger and more effective batches. A higher value can improve latency when using compression on slow machines.
*
@@ -810,12 +817,24 @@ export interface ConsumerGlobalConfig extends GlobalConfig {
"heartbeat.interval.ms"?: number;
/**
- * Group protocol type. NOTE: Currently, the only supported group protocol type is `consumer`.
+ * Group protocol type for the `classic` group protocol. NOTE: Currently, the only supported group protocol type is `consumer`.
*
* @default consumer
*/
"group.protocol.type"?: string;
+ /**
+ * Group protocol to use. Use `classic` for the original protocol and `consumer` for the new protocol introduced in KIP-848. Available protocols: classic or consumer. Default is `classic`, but will change to `consumer` in next releases.
+ *
+ * @default classic
+ */
+ "group.protocol"?: 'classic' | 'consumer';
+
+ /**
+ * Server side assignor to use. Keep it null to make server select a suitable assignor for the group. Available assignors: uniform or range. Default is null
+ */
+ "group.remote.assignor"?: string;
+
/**
* How often to query for the current client group coordinator. If the currently assigned coordinator is down the configured query interval will be divided by ten to more quickly recover in case of coordinator reassignment.
*
diff --git a/e2e/both.spec.js b/e2e/both.spec.js
index a8289ec3..4663f3a2 100644
--- a/e2e/both.spec.js
+++ b/e2e/both.spec.js
@@ -614,6 +614,65 @@ describe('Consumer/Producer', function() {
});
});
+ describe('Cooperative sticky', function() {
+ var consumer;
+
+ beforeEach(function(done) {
+ var grp = 'kafka-mocha-grp-' + crypto.randomBytes(20).toString('hex');
+
+ var consumerOpts = {
+ 'metadata.broker.list': kafkaBrokerList,
+ 'group.id': grp,
+ 'fetch.wait.max.ms': 1000,
+ 'session.timeout.ms': 10000,
+ 'enable.auto.commit': false,
+ 'debug': 'all',
+ 'partition.assignment.strategy': 'cooperative-sticky'
+ };
+
+ consumer = new Kafka.KafkaConsumer(consumerOpts, {
+ 'auto.offset.reset': 'largest',
+ });
+
+ consumer.connect({}, function(err, d) {
+ t.ifError(err);
+ t.equal(typeof d, 'object', 'metadata should be returned');
+ done();
+ });
+
+ eventListener(consumer);
+ });
+
+ afterEach(function(done) {
+ consumer.disconnect(function() {
+ done();
+ });
+ });
+
+ it('should be able to produce and consume messages', function (done) {
+ var key = 'key';
+
+ crypto.randomBytes(4096, function(ex, buffer) {
+ producer.setPollInterval(10);
+
+ consumer.on('data', function(message) {
+ t.equal(buffer.toString(), message.value.toString(), 'invalid message value');
+ t.equal(key, message.key, 'invalid message key');
+ t.equal(topic, message.topic, 'invalid message topic');
+ t.ok(message.offset >= 0, 'invalid message offset');
+ done();
+ });
+
+ consumer.subscribe([topic]);
+ consumer.consume();
+
+ setTimeout(function() {
+ producer.produce(topic, null, buffer, key);
+ }, 2000);
+ });
+ });
+ });
+
function assert_headers_match(expectedHeaders, messageHeaders) {
t.equal(expectedHeaders.length, messageHeaders.length, 'Headers length does not match expected length');
for (var i = 0; i < expectedHeaders.length; i++) {
diff --git a/e2e/consumer.spec.js b/e2e/consumer.spec.js
index a167483f..972d5af6 100644
--- a/e2e/consumer.spec.js
+++ b/e2e/consumer.spec.js
@@ -344,4 +344,43 @@ describe('Consumer', function() {
});
});
+
+ describe('rebalance protocol', function () {
+ var strategies = {
+ 'undefined': 'EAGER',
+ 'range': 'EAGER',
+ 'roundrobin': 'EAGER',
+ 'cooperative-sticky': 'COOPERATIVE',
+ };
+
+ Object.keys(strategies).forEach(function (strategy) {
+ it('should return ' + strategies[strategy] + ' for ' + strategy, function(done) {
+ var consumer = new KafkaConsumer({
+ ...gcfg,
+ ...(strategy !== 'undefined' && { 'partition.assignment.strategy': strategy })
+ }, {});
+
+ t.equal(consumer.rebalanceProtocol(), 'NONE');
+
+ consumer.connect({ timeout: 2000 }, function(err) {
+ t.ifError(err);
+
+ consumer.subscribe([topic]);
+
+ consumer.on('rebalance', function (err) {
+ if (err.code === -175) {
+ t.equal(consumer.rebalanceProtocol(), strategies[strategy]);
+ consumer.disconnect(done);
+ }
+ });
+
+ consumer.consume(1, function(err) {
+ t.ifError(err);
+ });
+ });
+
+ eventListener(consumer);
+ });
+ });
+ });
});
diff --git a/errors.d.ts b/errors.d.ts
index 439ec72b..c52b120e 100644
--- a/errors.d.ts
+++ b/errors.d.ts
@@ -1,347 +1,351 @@
-// ====== Generated from librdkafka 2.3.0 file src-cpp/rdkafkacpp.h ======
-export const CODES: { ERRORS: {
- /* Internal errors to rdkafka: */
- /** Begin internal error codes (**-200**) */
- ERR__BEGIN: number,
- /** Received message is incorrect (**-199**) */
- ERR__BAD_MSG: number,
- /** Bad/unknown compression (**-198**) */
- ERR__BAD_COMPRESSION: number,
- /** Broker is going away (**-197**) */
- ERR__DESTROY: number,
- /** Generic failure (**-196**) */
- ERR__FAIL: number,
- /** Broker transport failure (**-195**) */
- ERR__TRANSPORT: number,
- /** Critical system resource (**-194**) */
- ERR__CRIT_SYS_RESOURCE: number,
- /** Failed to resolve broker (**-193**) */
- ERR__RESOLVE: number,
- /** Produced message timed out (**-192**) */
- ERR__MSG_TIMED_OUT: number,
- /** Reached the end of the topic+partition queue on
- * the broker. Not really an error.
- * This event is disabled by default,
- * see the `enable.partition.eof` configuration property (**-191**) */
- ERR__PARTITION_EOF: number,
- /** Permanent: Partition does not exist in cluster (**-190**) */
- ERR__UNKNOWN_PARTITION: number,
- /** File or filesystem error (**-189**) */
- ERR__FS: number,
- /** Permanent: Topic does not exist in cluster (**-188**) */
- ERR__UNKNOWN_TOPIC: number,
- /** All broker connections are down (**-187**) */
- ERR__ALL_BROKERS_DOWN: number,
- /** Invalid argument, or invalid configuration (**-186**) */
- ERR__INVALID_ARG: number,
- /** Operation timed out (**-185**) */
- ERR__TIMED_OUT: number,
- /** Queue is full (**-184**) */
- ERR__QUEUE_FULL: number,
- /** ISR count < required.acks (**-183**) */
- ERR__ISR_INSUFF: number,
- /** Broker node update (**-182**) */
- ERR__NODE_UPDATE: number,
- /** SSL error (**-181**) */
- ERR__SSL: number,
- /** Waiting for coordinator to become available (**-180**) */
- ERR__WAIT_COORD: number,
- /** Unknown client group (**-179**) */
- ERR__UNKNOWN_GROUP: number,
- /** Operation in progress (**-178**) */
- ERR__IN_PROGRESS: number,
- /** Previous operation in progress, wait for it to finish (**-177**) */
- ERR__PREV_IN_PROGRESS: number,
- /** This operation would interfere with an existing subscription (**-176**) */
- ERR__EXISTING_SUBSCRIPTION: number,
- /** Assigned partitions (rebalance_cb) (**-175**) */
- ERR__ASSIGN_PARTITIONS: number,
- /** Revoked partitions (rebalance_cb) (**-174**) */
- ERR__REVOKE_PARTITIONS: number,
- /** Conflicting use (**-173**) */
- ERR__CONFLICT: number,
- /** Wrong state (**-172**) */
- ERR__STATE: number,
- /** Unknown protocol (**-171**) */
- ERR__UNKNOWN_PROTOCOL: number,
- /** Not implemented (**-170**) */
- ERR__NOT_IMPLEMENTED: number,
- /** Authentication failure (**-169**) */
- ERR__AUTHENTICATION: number,
- /** No stored offset (**-168**) */
- ERR__NO_OFFSET: number,
- /** Outdated (**-167**) */
- ERR__OUTDATED: number,
- /** Timed out in queue (**-166**) */
- ERR__TIMED_OUT_QUEUE: number,
- /** Feature not supported by broker (**-165**) */
- ERR__UNSUPPORTED_FEATURE: number,
- /** Awaiting cache update (**-164**) */
- ERR__WAIT_CACHE: number,
- /** Operation interrupted (**-163**) */
- ERR__INTR: number,
- /** Key serialization error (**-162**) */
- ERR__KEY_SERIALIZATION: number,
- /** Value serialization error (**-161**) */
- ERR__VALUE_SERIALIZATION: number,
- /** Key deserialization error (**-160**) */
- ERR__KEY_DESERIALIZATION: number,
- /** Value deserialization error (**-159**) */
- ERR__VALUE_DESERIALIZATION: number,
- /** Partial response (**-158**) */
- ERR__PARTIAL: number,
- /** Modification attempted on read-only object (**-157**) */
- ERR__READ_ONLY: number,
- /** No such entry / item not found (**-156**) */
- ERR__NOENT: number,
- /** Read underflow (**-155**) */
- ERR__UNDERFLOW: number,
- /** Invalid type (**-154**) */
- ERR__INVALID_TYPE: number,
- /** Retry operation (**-153**) */
- ERR__RETRY: number,
- /** Purged in queue (**-152**) */
- ERR__PURGE_QUEUE: number,
- /** Purged in flight (**-151**) */
- ERR__PURGE_INFLIGHT: number,
- /** Fatal error: see RdKafka::Handle::fatal_error() (**-150**) */
- ERR__FATAL: number,
- /** Inconsistent state (**-149**) */
- ERR__INCONSISTENT: number,
- /** Gap-less ordering would not be guaranteed if proceeding (**-148**) */
- ERR__GAPLESS_GUARANTEE: number,
- /** Maximum poll interval exceeded (**-147**) */
- ERR__MAX_POLL_EXCEEDED: number,
- /** Unknown broker (**-146**) */
- ERR__UNKNOWN_BROKER: number,
- /** Functionality not configured (**-145**) */
- ERR__NOT_CONFIGURED: number,
- /** Instance has been fenced (**-144**) */
- ERR__FENCED: number,
- /** Application generated error (**-143**) */
- ERR__APPLICATION: number,
- /** Assignment lost (**-142**) */
- ERR__ASSIGNMENT_LOST: number,
- /** No operation performed (**-141**) */
- ERR__NOOP: number,
- /** No offset to automatically reset to (**-140**) */
- ERR__AUTO_OFFSET_RESET: number,
- /** Partition log truncation detected (**-139**) */
- ERR__LOG_TRUNCATION: number,
- /** End internal error codes (**-100**) */
- ERR__END: number,
- /* Kafka broker errors: */
- /** Unknown broker error (**-1**) */
- ERR_UNKNOWN: number,
- /** Success (**0**) */
- ERR_NO_ERROR: number,
- /** Offset out of range (**1**) */
- ERR_OFFSET_OUT_OF_RANGE: number,
- /** Invalid message (**2**) */
- ERR_INVALID_MSG: number,
- /** Unknown topic or partition (**3**) */
- ERR_UNKNOWN_TOPIC_OR_PART: number,
- /** Invalid message size (**4**) */
- ERR_INVALID_MSG_SIZE: number,
- /** Leader not available (**5**) */
- ERR_LEADER_NOT_AVAILABLE: number,
- /** Not leader for partition (**6**) */
- ERR_NOT_LEADER_FOR_PARTITION: number,
- /** Request timed out (**7**) */
- ERR_REQUEST_TIMED_OUT: number,
- /** Broker not available (**8**) */
- ERR_BROKER_NOT_AVAILABLE: number,
- /** Replica not available (**9**) */
- ERR_REPLICA_NOT_AVAILABLE: number,
- /** Message size too large (**10**) */
- ERR_MSG_SIZE_TOO_LARGE: number,
- /** StaleControllerEpochCode (**11**) */
- ERR_STALE_CTRL_EPOCH: number,
- /** Offset metadata string too large (**12**) */
- ERR_OFFSET_METADATA_TOO_LARGE: number,
- /** Broker disconnected before response received (**13**) */
- ERR_NETWORK_EXCEPTION: number,
- /** Coordinator load in progress (**14**) */
- ERR_COORDINATOR_LOAD_IN_PROGRESS: number,
-/** Group coordinator load in progress (**14**) */
- ERR_GROUP_LOAD_IN_PROGRESS: number,
- /** Coordinator not available (**15**) */
- ERR_COORDINATOR_NOT_AVAILABLE: number,
-/** Group coordinator not available (**15**) */
- ERR_GROUP_COORDINATOR_NOT_AVAILABLE: number,
- /** Not coordinator (**16**) */
- ERR_NOT_COORDINATOR: number,
-/** Not coordinator for group (**16**) */
- ERR_NOT_COORDINATOR_FOR_GROUP: number,
- /** Invalid topic (**17**) */
- ERR_TOPIC_EXCEPTION: number,
- /** Message batch larger than configured server segment size (**18**) */
- ERR_RECORD_LIST_TOO_LARGE: number,
- /** Not enough in-sync replicas (**19**) */
- ERR_NOT_ENOUGH_REPLICAS: number,
- /** Message(s) written to insufficient number of in-sync replicas (**20**) */
- ERR_NOT_ENOUGH_REPLICAS_AFTER_APPEND: number,
- /** Invalid required acks value (**21**) */
- ERR_INVALID_REQUIRED_ACKS: number,
- /** Specified group generation id is not valid (**22**) */
- ERR_ILLEGAL_GENERATION: number,
- /** Inconsistent group protocol (**23**) */
- ERR_INCONSISTENT_GROUP_PROTOCOL: number,
- /** Invalid group.id (**24**) */
- ERR_INVALID_GROUP_ID: number,
- /** Unknown member (**25**) */
- ERR_UNKNOWN_MEMBER_ID: number,
- /** Invalid session timeout (**26**) */
- ERR_INVALID_SESSION_TIMEOUT: number,
- /** Group rebalance in progress (**27**) */
- ERR_REBALANCE_IN_PROGRESS: number,
- /** Commit offset data size is not valid (**28**) */
- ERR_INVALID_COMMIT_OFFSET_SIZE: number,
- /** Topic authorization failed (**29**) */
- ERR_TOPIC_AUTHORIZATION_FAILED: number,
- /** Group authorization failed (**30**) */
- ERR_GROUP_AUTHORIZATION_FAILED: number,
- /** Cluster authorization failed (**31**) */
- ERR_CLUSTER_AUTHORIZATION_FAILED: number,
- /** Invalid timestamp (**32**) */
- ERR_INVALID_TIMESTAMP: number,
- /** Unsupported SASL mechanism (**33**) */
- ERR_UNSUPPORTED_SASL_MECHANISM: number,
- /** Illegal SASL state (**34**) */
- ERR_ILLEGAL_SASL_STATE: number,
- /** Unuspported version (**35**) */
- ERR_UNSUPPORTED_VERSION: number,
- /** Topic already exists (**36**) */
- ERR_TOPIC_ALREADY_EXISTS: number,
- /** Invalid number of partitions (**37**) */
- ERR_INVALID_PARTITIONS: number,
- /** Invalid replication factor (**38**) */
- ERR_INVALID_REPLICATION_FACTOR: number,
- /** Invalid replica assignment (**39**) */
- ERR_INVALID_REPLICA_ASSIGNMENT: number,
- /** Invalid config (**40**) */
- ERR_INVALID_CONFIG: number,
- /** Not controller for cluster (**41**) */
- ERR_NOT_CONTROLLER: number,
- /** Invalid request (**42**) */
- ERR_INVALID_REQUEST: number,
- /** Message format on broker does not support request (**43**) */
- ERR_UNSUPPORTED_FOR_MESSAGE_FORMAT: number,
- /** Policy violation (**44**) */
- ERR_POLICY_VIOLATION: number,
- /** Broker received an out of order sequence number (**45**) */
- ERR_OUT_OF_ORDER_SEQUENCE_NUMBER: number,
- /** Broker received a duplicate sequence number (**46**) */
- ERR_DUPLICATE_SEQUENCE_NUMBER: number,
- /** Producer attempted an operation with an old epoch (**47**) */
- ERR_INVALID_PRODUCER_EPOCH: number,
- /** Producer attempted a transactional operation in an invalid state (**48**) */
- ERR_INVALID_TXN_STATE: number,
- /** Producer attempted to use a producer id which is not
- * currently assigned to its transactional id (**49**) */
- ERR_INVALID_PRODUCER_ID_MAPPING: number,
- /** Transaction timeout is larger than the maximum
- * value allowed by the broker's max.transaction.timeout.ms (**50**) */
- ERR_INVALID_TRANSACTION_TIMEOUT: number,
- /** Producer attempted to update a transaction while another
- * concurrent operation on the same transaction was ongoing (**51**) */
- ERR_CONCURRENT_TRANSACTIONS: number,
- /** Indicates that the transaction coordinator sending a
- * WriteTxnMarker is no longer the current coordinator for a
- * given producer (**52**) */
- ERR_TRANSACTION_COORDINATOR_FENCED: number,
- /** Transactional Id authorization failed (**53**) */
- ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED: number,
- /** Security features are disabled (**54**) */
- ERR_SECURITY_DISABLED: number,
- /** Operation not attempted (**55**) */
- ERR_OPERATION_NOT_ATTEMPTED: number,
- /** Disk error when trying to access log file on the disk (**56**) */
- ERR_KAFKA_STORAGE_ERROR: number,
- /** The user-specified log directory is not found in the broker config (**57**) */
- ERR_LOG_DIR_NOT_FOUND: number,
- /** SASL Authentication failed (**58**) */
- ERR_SASL_AUTHENTICATION_FAILED: number,
- /** Unknown Producer Id (**59**) */
- ERR_UNKNOWN_PRODUCER_ID: number,
- /** Partition reassignment is in progress (**60**) */
- ERR_REASSIGNMENT_IN_PROGRESS: number,
- /** Delegation Token feature is not enabled (**61**) */
- ERR_DELEGATION_TOKEN_AUTH_DISABLED: number,
- /** Delegation Token is not found on server (**62**) */
- ERR_DELEGATION_TOKEN_NOT_FOUND: number,
- /** Specified Principal is not valid Owner/Renewer (**63**) */
- ERR_DELEGATION_TOKEN_OWNER_MISMATCH: number,
- /** Delegation Token requests are not allowed on this connection (**64**) */
- ERR_DELEGATION_TOKEN_REQUEST_NOT_ALLOWED: number,
- /** Delegation Token authorization failed (**65**) */
- ERR_DELEGATION_TOKEN_AUTHORIZATION_FAILED: number,
- /** Delegation Token is expired (**66**) */
- ERR_DELEGATION_TOKEN_EXPIRED: number,
- /** Supplied principalType is not supported (**67**) */
- ERR_INVALID_PRINCIPAL_TYPE: number,
- /** The group is not empty (**68**) */
- ERR_NON_EMPTY_GROUP: number,
- /** The group id does not exist (**69**) */
- ERR_GROUP_ID_NOT_FOUND: number,
- /** The fetch session ID was not found (**70**) */
- ERR_FETCH_SESSION_ID_NOT_FOUND: number,
- /** The fetch session epoch is invalid (**71**) */
- ERR_INVALID_FETCH_SESSION_EPOCH: number,
- /** No matching listener (**72**) */
- ERR_LISTENER_NOT_FOUND: number,
- /** Topic deletion is disabled (**73**) */
- ERR_TOPIC_DELETION_DISABLED: number,
- /** Leader epoch is older than broker epoch (**74**) */
- ERR_FENCED_LEADER_EPOCH: number,
- /** Leader epoch is newer than broker epoch (**75**) */
- ERR_UNKNOWN_LEADER_EPOCH: number,
- /** Unsupported compression type (**76**) */
- ERR_UNSUPPORTED_COMPRESSION_TYPE: number,
- /** Broker epoch has changed (**77**) */
- ERR_STALE_BROKER_EPOCH: number,
- /** Leader high watermark is not caught up (**78**) */
- ERR_OFFSET_NOT_AVAILABLE: number,
- /** Group member needs a valid member ID (**79**) */
- ERR_MEMBER_ID_REQUIRED: number,
- /** Preferred leader was not available (**80**) */
- ERR_PREFERRED_LEADER_NOT_AVAILABLE: number,
- /** Consumer group has reached maximum size (**81**) */
- ERR_GROUP_MAX_SIZE_REACHED: number,
- /** Static consumer fenced by other consumer with same
- * group.instance.id (**82**) */
- ERR_FENCED_INSTANCE_ID: number,
- /** Eligible partition leaders are not available (**83**) */
- ERR_ELIGIBLE_LEADERS_NOT_AVAILABLE: number,
- /** Leader election not needed for topic partition (**84**) */
- ERR_ELECTION_NOT_NEEDED: number,
- /** No partition reassignment is in progress (**85**) */
- ERR_NO_REASSIGNMENT_IN_PROGRESS: number,
- /** Deleting offsets of a topic while the consumer group is
- * subscribed to it (**86**) */
- ERR_GROUP_SUBSCRIBED_TO_TOPIC: number,
- /** Broker failed to validate record (**87**) */
- ERR_INVALID_RECORD: number,
- /** There are unstable offsets that need to be cleared (**88**) */
- ERR_UNSTABLE_OFFSET_COMMIT: number,
- /** Throttling quota has been exceeded (**89**) */
- ERR_THROTTLING_QUOTA_EXCEEDED: number,
- /** There is a newer producer with the same transactionalId
- * which fences the current one (**90**) */
- ERR_PRODUCER_FENCED: number,
- /** Request illegally referred to resource that does not exist (**91**) */
- ERR_RESOURCE_NOT_FOUND: number,
- /** Request illegally referred to the same resource twice (**92**) */
- ERR_DUPLICATE_RESOURCE: number,
- /** Requested credential would not meet criteria for acceptability (**93**) */
- ERR_UNACCEPTABLE_CREDENTIAL: number,
- /** Indicates that the either the sender or recipient of a
- * voter-only request is not one of the expected voters (**94**) */
- ERR_INCONSISTENT_VOTER_SET: number,
- /** Invalid update version (**95**) */
- ERR_INVALID_UPDATE_VERSION: number,
- /** Unable to update finalized features due to server error (**96**) */
- ERR_FEATURE_UPDATE_FAILED: number,
- /** Request principal deserialization failed during forwarding (**97**) */
- ERR_PRINCIPAL_DESERIALIZATION_FAILURE: number,
-}}
\ No newline at end of file
+// ====== Generated from librdkafka 2.6.0 file src-cpp/rdkafkacpp.h ======
+export const CODES: {
+ ERRORS: {
+ /* Internal errors to rdkafka: */
+ /** Begin internal error codes (**-200**) */
+ ERR__BEGIN: number,
+ /** Received message is incorrect (**-199**) */
+ ERR__BAD_MSG: number,
+ /** Bad/unknown compression (**-198**) */
+ ERR__BAD_COMPRESSION: number,
+ /** Broker is going away (**-197**) */
+ ERR__DESTROY: number,
+ /** Generic failure (**-196**) */
+ ERR__FAIL: number,
+ /** Broker transport failure (**-195**) */
+ ERR__TRANSPORT: number,
+ /** Critical system resource (**-194**) */
+ ERR__CRIT_SYS_RESOURCE: number,
+ /** Failed to resolve broker (**-193**) */
+ ERR__RESOLVE: number,
+ /** Produced message timed out (**-192**) */
+ ERR__MSG_TIMED_OUT: number,
+ /** Reached the end of the topic+partition queue on
+ * the broker. Not really an error.
+ * This event is disabled by default,
+ * see the `enable.partition.eof` configuration property (**-191**) */
+ ERR__PARTITION_EOF: number,
+ /** Permanent: Partition does not exist in cluster (**-190**) */
+ ERR__UNKNOWN_PARTITION: number,
+ /** File or filesystem error (**-189**) */
+ ERR__FS: number,
+ /** Permanent: Topic does not exist in cluster (**-188**) */
+ ERR__UNKNOWN_TOPIC: number,
+ /** All broker connections are down (**-187**) */
+ ERR__ALL_BROKERS_DOWN: number,
+ /** Invalid argument, or invalid configuration (**-186**) */
+ ERR__INVALID_ARG: number,
+ /** Operation timed out (**-185**) */
+ ERR__TIMED_OUT: number,
+ /** Queue is full (**-184**) */
+ ERR__QUEUE_FULL: number,
+ /** ISR count < required.acks (**-183**) */
+ ERR__ISR_INSUFF: number,
+ /** Broker node update (**-182**) */
+ ERR__NODE_UPDATE: number,
+ /** SSL error (**-181**) */
+ ERR__SSL: number,
+ /** Waiting for coordinator to become available (**-180**) */
+ ERR__WAIT_COORD: number,
+ /** Unknown client group (**-179**) */
+ ERR__UNKNOWN_GROUP: number,
+ /** Operation in progress (**-178**) */
+ ERR__IN_PROGRESS: number,
+ /** Previous operation in progress, wait for it to finish (**-177**) */
+ ERR__PREV_IN_PROGRESS: number,
+ /** This operation would interfere with an existing subscription (**-176**) */
+ ERR__EXISTING_SUBSCRIPTION: number,
+ /** Assigned partitions (rebalance_cb) (**-175**) */
+ ERR__ASSIGN_PARTITIONS: number,
+ /** Revoked partitions (rebalance_cb) (**-174**) */
+ ERR__REVOKE_PARTITIONS: number,
+ /** Conflicting use (**-173**) */
+ ERR__CONFLICT: number,
+ /** Wrong state (**-172**) */
+ ERR__STATE: number,
+ /** Unknown protocol (**-171**) */
+ ERR__UNKNOWN_PROTOCOL: number,
+ /** Not implemented (**-170**) */
+ ERR__NOT_IMPLEMENTED: number,
+ /** Authentication failure (**-169**) */
+ ERR__AUTHENTICATION: number,
+ /** No stored offset (**-168**) */
+ ERR__NO_OFFSET: number,
+ /** Outdated (**-167**) */
+ ERR__OUTDATED: number,
+ /** Timed out in queue (**-166**) */
+ ERR__TIMED_OUT_QUEUE: number,
+ /** Feature not supported by broker (**-165**) */
+ ERR__UNSUPPORTED_FEATURE: number,
+ /** Awaiting cache update (**-164**) */
+ ERR__WAIT_CACHE: number,
+ /** Operation interrupted (**-163**) */
+ ERR__INTR: number,
+ /** Key serialization error (**-162**) */
+ ERR__KEY_SERIALIZATION: number,
+ /** Value serialization error (**-161**) */
+ ERR__VALUE_SERIALIZATION: number,
+ /** Key deserialization error (**-160**) */
+ ERR__KEY_DESERIALIZATION: number,
+ /** Value deserialization error (**-159**) */
+ ERR__VALUE_DESERIALIZATION: number,
+ /** Partial response (**-158**) */
+ ERR__PARTIAL: number,
+ /** Modification attempted on read-only object (**-157**) */
+ ERR__READ_ONLY: number,
+ /** No such entry / item not found (**-156**) */
+ ERR__NOENT: number,
+ /** Read underflow (**-155**) */
+ ERR__UNDERFLOW: number,
+ /** Invalid type (**-154**) */
+ ERR__INVALID_TYPE: number,
+ /** Retry operation (**-153**) */
+ ERR__RETRY: number,
+ /** Purged in queue (**-152**) */
+ ERR__PURGE_QUEUE: number,
+ /** Purged in flight (**-151**) */
+ ERR__PURGE_INFLIGHT: number,
+ /** Fatal error: see RdKafka::Handle::fatal_error() (**-150**) */
+ ERR__FATAL: number,
+ /** Inconsistent state (**-149**) */
+ ERR__INCONSISTENT: number,
+ /** Gap-less ordering would not be guaranteed if proceeding (**-148**) */
+ ERR__GAPLESS_GUARANTEE: number,
+ /** Maximum poll interval exceeded (**-147**) */
+ ERR__MAX_POLL_EXCEEDED: number,
+ /** Unknown broker (**-146**) */
+ ERR__UNKNOWN_BROKER: number,
+ /** Functionality not configured (**-145**) */
+ ERR__NOT_CONFIGURED: number,
+ /** Instance has been fenced (**-144**) */
+ ERR__FENCED: number,
+ /** Application generated error (**-143**) */
+ ERR__APPLICATION: number,
+ /** Assignment lost (**-142**) */
+ ERR__ASSIGNMENT_LOST: number,
+ /** No operation performed (**-141**) */
+ ERR__NOOP: number,
+ /** No offset to automatically reset to (**-140**) */
+ ERR__AUTO_OFFSET_RESET: number,
+ /** Partition log truncation detected (**-139**) */
+ ERR__LOG_TRUNCATION: number,
+
+ /** End internal error codes (**-100**) */
+ ERR__END: number,
+
+ /* Kafka broker errors: */
+ /** Unknown broker error (**-1**) */
+ ERR_UNKNOWN: number,
+ /** Success (**0**) */
+ ERR_NO_ERROR: number,
+ /** Offset out of range (**1**) */
+ ERR_OFFSET_OUT_OF_RANGE: number,
+ /** Invalid message (**2**) */
+ ERR_INVALID_MSG: number,
+ /** Unknown topic or partition (**3**) */
+ ERR_UNKNOWN_TOPIC_OR_PART: number,
+ /** Invalid message size (**4**) */
+ ERR_INVALID_MSG_SIZE: number,
+ /** Leader not available (**5**) */
+ ERR_LEADER_NOT_AVAILABLE: number,
+ /** Not leader for partition (**6**) */
+ ERR_NOT_LEADER_FOR_PARTITION: number,
+ /** Request timed out (**7**) */
+ ERR_REQUEST_TIMED_OUT: number,
+ /** Broker not available (**8**) */
+ ERR_BROKER_NOT_AVAILABLE: number,
+ /** Replica not available (**9**) */
+ ERR_REPLICA_NOT_AVAILABLE: number,
+ /** Message size too large (**10**) */
+ ERR_MSG_SIZE_TOO_LARGE: number,
+ /** StaleControllerEpochCode (**11**) */
+ ERR_STALE_CTRL_EPOCH: number,
+ /** Offset metadata string too large (**12**) */
+ ERR_OFFSET_METADATA_TOO_LARGE: number,
+ /** Broker disconnected before response received (**13**) */
+ ERR_NETWORK_EXCEPTION: number,
+ /** Coordinator load in progress (**14**) */
+ ERR_COORDINATOR_LOAD_IN_PROGRESS: number,
+ /** Group coordinator load in progress (**14**) */
+ ERR_GROUP_LOAD_IN_PROGRESS: number,
+ /** Coordinator not available (**15**) */
+ ERR_COORDINATOR_NOT_AVAILABLE: number,
+ /** Group coordinator not available (**15**) */
+ ERR_GROUP_COORDINATOR_NOT_AVAILABLE: number,
+ /** Not coordinator (**16**) */
+ ERR_NOT_COORDINATOR: number,
+ /** Not coordinator for group (**16**) */
+ ERR_NOT_COORDINATOR_FOR_GROUP: number,
+ /** Invalid topic (**17**) */
+ ERR_TOPIC_EXCEPTION: number,
+ /** Message batch larger than configured server segment size (**18**) */
+ ERR_RECORD_LIST_TOO_LARGE: number,
+ /** Not enough in-sync replicas (**19**) */
+ ERR_NOT_ENOUGH_REPLICAS: number,
+ /** Message(s) written to insufficient number of in-sync replicas (**20**) */
+ ERR_NOT_ENOUGH_REPLICAS_AFTER_APPEND: number,
+ /** Invalid required acks value (**21**) */
+ ERR_INVALID_REQUIRED_ACKS: number,
+ /** Specified group generation id is not valid (**22**) */
+ ERR_ILLEGAL_GENERATION: number,
+ /** Inconsistent group protocol (**23**) */
+ ERR_INCONSISTENT_GROUP_PROTOCOL: number,
+ /** Invalid group.id (**24**) */
+ ERR_INVALID_GROUP_ID: number,
+ /** Unknown member (**25**) */
+ ERR_UNKNOWN_MEMBER_ID: number,
+ /** Invalid session timeout (**26**) */
+ ERR_INVALID_SESSION_TIMEOUT: number,
+ /** Group rebalance in progress (**27**) */
+ ERR_REBALANCE_IN_PROGRESS: number,
+ /** Commit offset data size is not valid (**28**) */
+ ERR_INVALID_COMMIT_OFFSET_SIZE: number,
+ /** Topic authorization failed (**29**) */
+ ERR_TOPIC_AUTHORIZATION_FAILED: number,
+ /** Group authorization failed (**30**) */
+ ERR_GROUP_AUTHORIZATION_FAILED: number,
+ /** Cluster authorization failed (**31**) */
+ ERR_CLUSTER_AUTHORIZATION_FAILED: number,
+ /** Invalid timestamp (**32**) */
+ ERR_INVALID_TIMESTAMP: number,
+ /** Unsupported SASL mechanism (**33**) */
+ ERR_UNSUPPORTED_SASL_MECHANISM: number,
+ /** Illegal SASL state (**34**) */
+ ERR_ILLEGAL_SASL_STATE: number,
+ /** Unuspported version (**35**) */
+ ERR_UNSUPPORTED_VERSION: number,
+ /** Topic already exists (**36**) */
+ ERR_TOPIC_ALREADY_EXISTS: number,
+ /** Invalid number of partitions (**37**) */
+ ERR_INVALID_PARTITIONS: number,
+ /** Invalid replication factor (**38**) */
+ ERR_INVALID_REPLICATION_FACTOR: number,
+ /** Invalid replica assignment (**39**) */
+ ERR_INVALID_REPLICA_ASSIGNMENT: number,
+ /** Invalid config (**40**) */
+ ERR_INVALID_CONFIG: number,
+ /** Not controller for cluster (**41**) */
+ ERR_NOT_CONTROLLER: number,
+ /** Invalid request (**42**) */
+ ERR_INVALID_REQUEST: number,
+ /** Message format on broker does not support request (**43**) */
+ ERR_UNSUPPORTED_FOR_MESSAGE_FORMAT: number,
+ /** Policy violation (**44**) */
+ ERR_POLICY_VIOLATION: number,
+ /** Broker received an out of order sequence number (**45**) */
+ ERR_OUT_OF_ORDER_SEQUENCE_NUMBER: number,
+ /** Broker received a duplicate sequence number (**46**) */
+ ERR_DUPLICATE_SEQUENCE_NUMBER: number,
+ /** Producer attempted an operation with an old epoch (**47**) */
+ ERR_INVALID_PRODUCER_EPOCH: number,
+ /** Producer attempted a transactional operation in an invalid state (**48**) */
+ ERR_INVALID_TXN_STATE: number,
+ /** Producer attempted to use a producer id which is not
+ * currently assigned to its transactional id (**49**) */
+ ERR_INVALID_PRODUCER_ID_MAPPING: number,
+ /** Transaction timeout is larger than the maximum
+ * value allowed by the broker's max.transaction.timeout.ms (**50**) */
+ ERR_INVALID_TRANSACTION_TIMEOUT: number,
+ /** Producer attempted to update a transaction while another
+ * concurrent operation on the same transaction was ongoing (**51**) */
+ ERR_CONCURRENT_TRANSACTIONS: number,
+ /** Indicates that the transaction coordinator sending a
+ * WriteTxnMarker is no longer the current coordinator for a
+ * given producer (**52**) */
+ ERR_TRANSACTION_COORDINATOR_FENCED: number,
+ /** Transactional Id authorization failed (**53**) */
+ ERR_TRANSACTIONAL_ID_AUTHORIZATION_FAILED: number,
+ /** Security features are disabled (**54**) */
+ ERR_SECURITY_DISABLED: number,
+ /** Operation not attempted (**55**) */
+ ERR_OPERATION_NOT_ATTEMPTED: number,
+ /** Disk error when trying to access log file on the disk (**56**) */
+ ERR_KAFKA_STORAGE_ERROR: number,
+ /** The user-specified log directory is not found in the broker config (**57**) */
+ ERR_LOG_DIR_NOT_FOUND: number,
+ /** SASL Authentication failed (**58**) */
+ ERR_SASL_AUTHENTICATION_FAILED: number,
+ /** Unknown Producer Id (**59**) */
+ ERR_UNKNOWN_PRODUCER_ID: number,
+ /** Partition reassignment is in progress (**60**) */
+ ERR_REASSIGNMENT_IN_PROGRESS: number,
+ /** Delegation Token feature is not enabled (**61**) */
+ ERR_DELEGATION_TOKEN_AUTH_DISABLED: number,
+ /** Delegation Token is not found on server (**62**) */
+ ERR_DELEGATION_TOKEN_NOT_FOUND: number,
+ /** Specified Principal is not valid Owner/Renewer (**63**) */
+ ERR_DELEGATION_TOKEN_OWNER_MISMATCH: number,
+ /** Delegation Token requests are not allowed on this connection (**64**) */
+ ERR_DELEGATION_TOKEN_REQUEST_NOT_ALLOWED: number,
+ /** Delegation Token authorization failed (**65**) */
+ ERR_DELEGATION_TOKEN_AUTHORIZATION_FAILED: number,
+ /** Delegation Token is expired (**66**) */
+ ERR_DELEGATION_TOKEN_EXPIRED: number,
+ /** Supplied principalType is not supported (**67**) */
+ ERR_INVALID_PRINCIPAL_TYPE: number,
+ /** The group is not empty (**68**) */
+ ERR_NON_EMPTY_GROUP: number,
+ /** The group id does not exist (**69**) */
+ ERR_GROUP_ID_NOT_FOUND: number,
+ /** The fetch session ID was not found (**70**) */
+ ERR_FETCH_SESSION_ID_NOT_FOUND: number,
+ /** The fetch session epoch is invalid (**71**) */
+ ERR_INVALID_FETCH_SESSION_EPOCH: number,
+ /** No matching listener (**72**) */
+ ERR_LISTENER_NOT_FOUND: number,
+ /** Topic deletion is disabled (**73**) */
+ ERR_TOPIC_DELETION_DISABLED: number,
+ /** Leader epoch is older than broker epoch (**74**) */
+ ERR_FENCED_LEADER_EPOCH: number,
+ /** Leader epoch is newer than broker epoch (**75**) */
+ ERR_UNKNOWN_LEADER_EPOCH: number,
+ /** Unsupported compression type (**76**) */
+ ERR_UNSUPPORTED_COMPRESSION_TYPE: number,
+ /** Broker epoch has changed (**77**) */
+ ERR_STALE_BROKER_EPOCH: number,
+ /** Leader high watermark is not caught up (**78**) */
+ ERR_OFFSET_NOT_AVAILABLE: number,
+ /** Group member needs a valid member ID (**79**) */
+ ERR_MEMBER_ID_REQUIRED: number,
+ /** Preferred leader was not available (**80**) */
+ ERR_PREFERRED_LEADER_NOT_AVAILABLE: number,
+ /** Consumer group has reached maximum size (**81**) */
+ ERR_GROUP_MAX_SIZE_REACHED: number,
+ /** Static consumer fenced by other consumer with same
+ * group.instance.id (**82**) */
+ ERR_FENCED_INSTANCE_ID: number,
+ /** Eligible partition leaders are not available (**83**) */
+ ERR_ELIGIBLE_LEADERS_NOT_AVAILABLE: number,
+ /** Leader election not needed for topic partition (**84**) */
+ ERR_ELECTION_NOT_NEEDED: number,
+ /** No partition reassignment is in progress (**85**) */
+ ERR_NO_REASSIGNMENT_IN_PROGRESS: number,
+ /** Deleting offsets of a topic while the consumer group is
+ * subscribed to it (**86**) */
+ ERR_GROUP_SUBSCRIBED_TO_TOPIC: number,
+ /** Broker failed to validate record (**87**) */
+ ERR_INVALID_RECORD: number,
+ /** There are unstable offsets that need to be cleared (**88**) */
+ ERR_UNSTABLE_OFFSET_COMMIT: number,
+ /** Throttling quota has been exceeded (**89**) */
+ ERR_THROTTLING_QUOTA_EXCEEDED: number,
+ /** There is a newer producer with the same transactionalId
+ * which fences the current one (**90**) */
+ ERR_PRODUCER_FENCED: number,
+ /** Request illegally referred to resource that does not exist (**91**) */
+ ERR_RESOURCE_NOT_FOUND: number,
+ /** Request illegally referred to the same resource twice (**92**) */
+ ERR_DUPLICATE_RESOURCE: number,
+ /** Requested credential would not meet criteria for acceptability (**93**) */
+ ERR_UNACCEPTABLE_CREDENTIAL: number,
+ /** Indicates that the either the sender or recipient of a
+ * voter-only request is not one of the expected voters (**94**) */
+ ERR_INCONSISTENT_VOTER_SET: number,
+ /** Invalid update version (**95**) */
+ ERR_INVALID_UPDATE_VERSION: number,
+ /** Unable to update finalized features due to server error (**96**) */
+ ERR_FEATURE_UPDATE_FAILED: number,
+ /** Request principal deserialization failed during forwarding (**97**) */
+ ERR_PRINCIPAL_DESERIALIZATION_FAILURE: number,
+ }
+}
\ No newline at end of file
diff --git a/examples/oauthbearer-default-flow.md b/examples/oauthbearer-default-flow.md
new file mode 100644
index 00000000..06cb9aab
--- /dev/null
+++ b/examples/oauthbearer-default-flow.md
@@ -0,0 +1,80 @@
+Producer, Consumer and HighLevelProducer:
+```js
+/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license. See the LICENSE.txt file for details.
+ */
+
+var Kafka = require('../');
+
+var token = "your_token";
+
+var producer = new Kafka.Producer({
+ //'debug' : 'all',
+ 'metadata.broker.list': 'localhost:9093',
+ 'security.protocol': 'SASL_SSL',
+ 'sasl.mechanisms': 'OAUTHBEARER',
+}).setOauthBearerToken(token);
+
+//start the producer
+producer.connect();
+
+//refresh the token
+producer.setOauthBearerToken(token);
+```
+
+AdminClient:
+```js
+/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license. See the LICENSE.txt file for details.
+ */
+var Kafka = require('../');
+
+var token = "your_token";
+
+var admin = Kafka.AdminClient.create({
+ 'metadata.broker.list': 'localhost:9093',
+ 'security.protocol': 'SASL_SSL',
+ 'sasl.mechanisms': 'OAUTHBEARER',
+}, token);
+
+//refresh the token
+admin.refreshOauthBearerToken(token);
+```
+
+ConsumerStream:
+```js
+/*
+ * node-rdkafka - Node.js wrapper for RdKafka C/C++ library
+ *
+ * Copyright (c) 2016 Blizzard Entertainment
+ *
+ * This software may be modified and distributed under the terms
+ * of the MIT license. See the LICENSE.txt file for details.
+ */
+var Kafka = require('../');
+
+var token = "your_token";
+
+var stream = Kafka.KafkaConsumer.createReadStream({
+ 'metadata.broker.list': 'localhost:9093',
+ 'group.id': 'myGroup',
+ 'security.protocol': 'SASL_SSL',
+ 'sasl.mechanisms': 'OAUTHBEARER'
+ }, {}, {
+ topics: 'test1',
+ initOauthBearerToken: token,
+ });
+
+//refresh the token
+stream.refreshOauthBearerToken(token.token);
+```
diff --git a/index.d.ts b/index.d.ts
index d7ce7e61..f1d458fe 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -117,6 +117,7 @@ export interface ReadStreamOptions extends ReadableOptions {
autoClose?: boolean;
streamAsBatch?: boolean;
connectOptions?: any;
+ initOauthBearerToken?: string;
}
export interface WriteStreamOptions extends WritableOptions {
@@ -137,12 +138,13 @@ export interface ProducerStream extends Writable {
export interface ConsumerStream extends Readable {
consumer: KafkaConsumer;
connect(options: ConsumerGlobalConfig): void;
+ refreshOauthBearerToken(tokenStr: string): void;
close(cb?: () => void): void;
}
-type KafkaClientEvents = 'disconnected' | 'ready' | 'connection.failure' | 'event.error' | 'event.stats' | 'event.log' | 'event.event' | 'event.throttle';
-type KafkaConsumerEvents = 'data' | 'partition.eof' | 'rebalance' | 'rebalance.error' | 'subscribed' | 'unsubscribed' | 'unsubscribe' | 'offset.commit' | KafkaClientEvents;
-type KafkaProducerEvents = 'delivery-report' | KafkaClientEvents;
+export type KafkaClientEvents = 'disconnected' | 'ready' | 'connection.failure' | 'event.error' | 'event.stats' | 'event.log' | 'event.event' | 'event.throttle';
+export type KafkaConsumerEvents = 'data' | 'partition.eof' | 'rebalance' | 'rebalance.error' | 'subscribed' | 'unsubscribed' | 'unsubscribe' | 'offset.commit' | KafkaClientEvents;
+export type KafkaProducerEvents = 'delivery-report' | KafkaClientEvents;
type EventListenerMap = {
// ### Client
@@ -180,6 +182,8 @@ export abstract class Client extends EventEmitter {
connect(metadataOptions?: MetadataOptions, cb?: (err: LibrdKafkaError, data: Metadata) => any): this;
+ setOauthBearerToken(tokenStr: string): this;
+
getClient(): any;
connectedTime(): number;
@@ -204,6 +208,7 @@ export class KafkaConsumer extends Client {
constructor(conf: ConsumerGlobalConfig, topicConf: ConsumerTopicConfig);
assign(assignments: Assignment[]): this;
+ incrementalAssign(assignments: Assignment[]): this;
assignments(): Assignment[];
@@ -214,7 +219,7 @@ export class KafkaConsumer extends Client {
commitMessageSync(msg: TopicPartitionOffset): this;
- commitSync(topicPartition: TopicPartitionOffset | TopicPartitionOffset[]): this;
+ commitSync(topicPartition: TopicPartitionOffset | TopicPartitionOffset[] | null): this;
committed(toppars: TopicPartition[], timeout: number, cb: (err: LibrdKafkaError, topicPartitions: TopicPartitionOffset[]) => void): this;
committed(timeout: number, cb: (err: LibrdKafkaError, topicPartitions: TopicPartitionOffset[]) => void): this;
@@ -244,12 +249,15 @@ export class KafkaConsumer extends Client {
subscription(): string[];
unassign(): this;
+ incrementalUnassign(assignments: Assignment[]): this;
unsubscribe(): this;
offsetsForTimes(topicPartitions: TopicPartitionTime[], timeout: number, cb?: (err: LibrdKafkaError, offsets: TopicPartitionOffset[]) => any): void;
offsetsForTimes(topicPartitions: TopicPartitionTime[], cb?: (err: LibrdKafkaError, offsets: TopicPartitionOffset[]) => any): void;
+ rebalanceProtocol(): string;
+
static createReadStream(conf: ConsumerGlobalConfig, topicConfig: ConsumerTopicConfig, streamOptions: ReadStreamOptions | number): ConsumerStream;
}
@@ -330,6 +338,8 @@ export interface NewTopic {
}
export interface IAdminClient {
+ refreshOauthBearerToken(tokenStr: string): void;
+
createTopic(topic: NewTopic, cb?: (err: LibrdKafkaError) => void): void;
createTopic(topic: NewTopic, timeout?: number, cb?: (err: LibrdKafkaError) => void): void;
@@ -343,5 +353,5 @@ export interface IAdminClient {
}
export abstract class AdminClient {
- static create(conf: GlobalConfig): IAdminClient;
+ static create(conf: GlobalConfig, initOauthBearerToken?: string): IAdminClient;
}
diff --git a/lib/admin.js b/lib/admin.js
index 773dc957..bbe06084 100644
--- a/lib/admin.js
+++ b/lib/admin.js
@@ -25,9 +25,13 @@ var shallowCopy = require('./util').shallowCopy;
* active handle with the brokers.
*
*/
-function createAdminClient(conf) {
+function createAdminClient(conf, initOauthBearerToken) {
var client = new AdminClient(conf);
+ if (initOauthBearerToken) {
+ client.refreshOauthBearerToken(initOauthBearerToken);
+ }
+
// Wrap the error so we throw if it failed with some context
LibrdKafkaError.wrap(client.connect(), true);
@@ -105,6 +109,22 @@ AdminClient.prototype.disconnect = function() {
this._isConnected = false;
};
+/**
+ * Refresh OAuthBearer token, initially provided in factory method.
+ * Expiry is always set to maximum value, as the callback of librdkafka
+ * for token refresh is not used.
+ *
+ * @param {string} tokenStr - OAuthBearer token string
+ * @see connection.cc
+ */
+AdminClient.prototype.refreshOauthBearerToken = function (tokenStr) {
+ if (!tokenStr || typeof tokenStr !== 'string') {
+ throw new Error("OAuthBearer token is undefined/empty or not a string");
+ }
+
+ this._client.setToken(tokenStr);
+};
+
/**
* Create a topic with a given config.
*
diff --git a/lib/client.js b/lib/client.js
index 9cbd3f9a..354f5446 100644
--- a/lib/client.js
+++ b/lib/client.js
@@ -229,6 +229,25 @@ Client.prototype.connect = function(metadataOptions, cb) {
};
+/**
+ * Set initial token before any connection is established for oauthbearer authentication flow.
+ * Expiry is always set to maximum value, as the callback of librdkafka
+ * for token refresh is not used.
+ * Call this method again to refresh the token.
+ *
+ * @param {string} tokenStr - OAuthBearer token string
+ * @see connection.cc
+ * @return {Client} - Returns itself.
+ */
+Client.prototype.setOauthBearerToken = function (tokenStr) {
+ if (!tokenStr || typeof tokenStr !== 'string') {
+ throw new Error("OAuthBearer token is undefined/empty or not a string");
+ }
+
+ this._client.setToken(tokenStr);
+ return this;
+};
+
/**
* Get the native Kafka client.
*
diff --git a/lib/error.js b/lib/error.js
index 0f14e1e8..963ea2bd 100644
--- a/lib/error.js
+++ b/lib/error.js
@@ -27,7 +27,7 @@ LibrdKafkaError.wrap = errorWrap;
* @enum {number}
* @constant
*/
-// ====== Generated from librdkafka 2.3.0 file src-cpp/rdkafkacpp.h ======
+// ====== Generated from librdkafka 2.6.0 file src-cpp/rdkafkacpp.h ======
LibrdKafkaError.codes = {
/* Internal errors to rdkafka: */
@@ -158,8 +158,10 @@ LibrdKafkaError.codes = {
ERR__AUTO_OFFSET_RESET: -140,
/** Partition log truncation detected */
ERR__LOG_TRUNCATION: -139,
+
/** End internal error codes */
ERR__END: -100,
+
/* Kafka broker errors: */
/** Unknown broker error */
ERR_UNKNOWN: -1,
@@ -193,15 +195,15 @@ LibrdKafkaError.codes = {
ERR_NETWORK_EXCEPTION: 13,
/** Coordinator load in progress */
ERR_COORDINATOR_LOAD_IN_PROGRESS: 14,
-/** Group coordinator load in progress */
+ /** Group coordinator load in progress */
ERR_GROUP_LOAD_IN_PROGRESS: 14,
/** Coordinator not available */
ERR_COORDINATOR_NOT_AVAILABLE: 15,
-/** Group coordinator not available */
+ /** Group coordinator not available */
ERR_GROUP_COORDINATOR_NOT_AVAILABLE: 15,
/** Not coordinator */
ERR_NOT_COORDINATOR: 16,
-/** Not coordinator for group */
+ /** Not coordinator for group */
ERR_NOT_COORDINATOR_FOR_GROUP: 16,
/** Invalid topic */
ERR_TOPIC_EXCEPTION: 17,
diff --git a/lib/kafka-consumer-stream.js b/lib/kafka-consumer-stream.js
index 0abb5358..ce1fbe95 100644
--- a/lib/kafka-consumer-stream.js
+++ b/lib/kafka-consumer-stream.js
@@ -112,6 +112,10 @@ function KafkaConsumerStream(consumer, options) {
self.push(null);
});
+ if (options.initOauthBearerToken) {
+ this.consumer.setOauthBearerToken(options.initOauthBearerToken);
+ }
+
// Call connect. Handles potentially being connected already
this.connect(this.connectOptions);
@@ -123,6 +127,18 @@ function KafkaConsumerStream(consumer, options) {
}
+/**
+ * Refresh OAuthBearer token, initially provided in factory method.
+ * Expiry is always set to maximum value, as the callback of librdkafka
+ * for token refresh is not used.
+ *
+ * @param {string} tokenStr - OAuthBearer token string
+ * @see connection.cc
+ */
+KafkaConsumerStream.prototype.refreshOauthBearerToken = function (tokenStr) {
+ this.consumer.setOauthBearerToken(tokenStr);
+};
+
/**
* Internal stream read method. This method reads message objects.
* @param {number} size - This parameter is ignored for our cases.
diff --git a/lib/kafka-consumer.js b/lib/kafka-consumer.js
index c479240f..875a3779 100644
--- a/lib/kafka-consumer.js
+++ b/lib/kafka-consumer.js
@@ -58,12 +58,20 @@ function KafkaConsumer(conf, topicConf) {
// Emit the event
self.emit('rebalance', err, assignment);
- // That's it
+ // That's it.
try {
if (err.code === -175 /*ERR__ASSIGN_PARTITIONS*/) {
- self.assign(assignment);
+ if (self.rebalanceProtocol() === 'COOPERATIVE') {
+ self.incrementalAssign(assignment);
+ } else {
+ self.assign(assignment);
+ }
} else if (err.code === -174 /*ERR__REVOKE_PARTITIONS*/) {
- self.unassign();
+ if (self.rebalanceProtocol() === 'COOPERATIVE') {
+ self.incrementalUnassign(assignment);
+ } else {
+ self.unassign();
+ }
}
} catch (e) {
// Ignore exceptions if we are not connected
@@ -275,6 +283,40 @@ KafkaConsumer.prototype.unassign = function() {
return this;
};
+/**
+ * Assign the consumer specific partitions and topics. Used for
+ * cooperative rebalancing.
+ *
+ * @param {array} assignments - Assignments array. Should contain
+ * objects with topic and partition set. Assignments are additive.
+ * @return {Client} - Returns itself
+ */
+KafkaConsumer.prototype.incrementalAssign = function(assignments) {
+ this._client.incrementalAssign(TopicPartition.map(assignments));
+ return this;
+};
+
+/**
+ * Unassign the consumer specific partitions and topics. Used for
+ * cooperative rebalancing.
+ *
+ * @param {array} assignments - Assignments array. Should contain
+ * objects with topic and partition set. Assignments are subtractive.
+ * @return {Client} - Returns itself
+ */
+KafkaConsumer.prototype.incrementalUnassign = function(assignments) {
+ this._client.incrementalUnassign(TopicPartition.map(assignments));
+ return this;
+};
+
+/**
+ * Get the type of rebalance protocol used in the consumer group.
+ *
+ * @returns "NONE", "COOPERATIVE" or "EAGER".
+ */
+KafkaConsumer.prototype.rebalanceProtocol = function() {
+ return this._client.rebalanceProtocol();
+}
/**
* Get the assignments for the consumer
diff --git a/package-lock.json b/package-lock.json
index deaac606..13b0b725 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,28 +1,28 @@
{
"name": "node-rdkafka",
- "version": "v2.18.3",
+ "version": "v3.2.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "node-rdkafka",
- "version": "v2.18.3",
+ "version": "v3.2.0",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"bindings": "^1.3.1",
- "nan": "^2.17.0"
+ "nan": "^2.19.0"
},
"devDependencies": {
"bluebird": "^3.5.3",
- "jsdoc": "^3.4.0",
+ "jsdoc": "^4.0.2",
"jshint": "^2.10.1",
"mocha": "^10.2.0",
- "node-gyp": "^9.3.1",
+ "node-gyp": "^10.1.0",
"toolkit-jsdoc": "^1.0.0"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=16"
}
},
"node_modules/@babel/parser": {
@@ -55,9 +55,9 @@
}
},
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"dev": true,
"engines": {
"node": ">=12"
@@ -133,10 +133,38 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
+ "node_modules/@jsdoc/salty": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.8.tgz",
+ "integrity": "sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.21"
+ },
+ "engines": {
+ "node": ">=v12.0.0"
+ }
+ },
+ "node_modules/@npmcli/agent": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
+ "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^10.0.1",
+ "socks-proxy-agent": "^8.0.3"
+ },
+ "engines": {
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
"node_modules/@npmcli/fs": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz",
- "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
+ "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
"dev": true,
"dependencies": {
"semver": "^7.3.5"
@@ -155,65 +183,47 @@
"node": ">=14"
}
},
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/@types/linkify-it": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz",
- "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
"dev": true
},
"node_modules/@types/markdown-it": {
- "version": "12.2.3",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
- "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
"dev": true,
"dependencies": {
- "@types/linkify-it": "*",
- "@types/mdurl": "*"
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
}
},
"node_modules/@types/mdurl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz",
- "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
"dev": true
},
"node_modules/abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
- "dev": true
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
"dev": true,
- "dependencies": {
- "debug": "4"
- },
"engines": {
- "node": ">= 6.0.0"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/agentkeepalive": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
- "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+ "node_modules/agent-base": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
"dependencies": {
- "humanize-ms": "^1.2.1"
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 8.0.0"
+ "node": ">= 14"
}
},
"node_modules/aggregate-error": {
@@ -275,48 +285,6 @@
"node": ">= 8"
}
},
- "node_modules/aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "dev": true
- },
- "node_modules/are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "dev": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
- "node_modules/are-we-there-yet/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/are-we-there-yet/node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -381,17 +349,17 @@
"dev": true
},
"node_modules/cacache": {
- "version": "17.1.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz",
- "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==",
+ "version": "18.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
+ "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
"dev": true,
"dependencies": {
"@npmcli/fs": "^3.1.0",
"fs-minipass": "^3.0.0",
"glob": "^10.2.2",
- "lru-cache": "^7.7.1",
+ "lru-cache": "^10.0.1",
"minipass": "^7.0.3",
- "minipass-collect": "^1.0.2",
+ "minipass-collect": "^2.0.1",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"p-map": "^4.0.0",
@@ -400,7 +368,7 @@
"unique-filename": "^3.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/cacache/node_modules/brace-expansion": {
@@ -413,31 +381,29 @@
}
},
"node_modules/cacache/node_modules/glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
},
"bin": {
"glob": "dist/esm/bin.mjs"
},
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/cacache/node_modules/minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
@@ -449,15 +415,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/cacache/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/camelcase": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
@@ -597,15 +554,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true,
- "bin": {
- "color-support": "bin.js"
- }
- },
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -621,12 +569,6 @@
"date-now": "^0.1.4"
}
},
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "dev": true
- },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -634,9 +576,9 @@
"dev": true
},
"node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"dependencies": {
"path-key": "^3.1.0",
@@ -647,6 +589,27 @@
"node": ">= 8"
}
},
+ "node_modules/cross-spawn/node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/cross-spawn/node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
"node_modules/date-now": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz",
@@ -688,12 +651,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
- },
"node_modules/diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@@ -878,9 +835,9 @@
}
},
"node_modules/foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
@@ -893,18 +850,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/foreground-child/node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/fs-minipass": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz",
@@ -917,15 +862,6 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/fs-minipass/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -946,25 +882,6 @@
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
- "node_modules/gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "dev": true,
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -1033,12 +950,6 @@
"node": ">=8"
}
},
- "node_modules/has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
- "dev": true
- },
"node_modules/he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -1068,39 +979,29 @@
"dev": true
},
"node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 14"
}
},
"node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"dependencies": {
- "agent-base": "6",
+ "agent-base": "^7.0.2",
"debug": "4"
},
"engines": {
- "node": ">= 6"
- }
- },
- "node_modules/humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.0.0"
+ "node": ">= 14"
}
},
"node_modules/iconv-lite": {
@@ -1150,11 +1051,18 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "node_modules/ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
- "dev": true
+ "node_modules/ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "dev": true,
+ "dependencies": {
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
},
"node_modules/is-binary-path": {
"version": "2.1.0",
@@ -1241,22 +1149,22 @@
"dev": true
},
"node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=16"
+ }
},
"node_modules/jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
- "engines": {
- "node": ">=14"
- },
"funding": {
"url": "https://github.com/sponsors/isaacs"
},
@@ -1285,26 +1193,32 @@
"xmlcreate": "^2.0.4"
}
},
+ "node_modules/jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true
+ },
"node_modules/jsdoc": {
- "version": "3.6.11",
- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz",
- "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz",
+ "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==",
"dev": true,
"dependencies": {
- "@babel/parser": "^7.9.4",
- "@types/markdown-it": "^12.2.3",
+ "@babel/parser": "^7.20.15",
+ "@jsdoc/salty": "^0.2.1",
+ "@types/markdown-it": "^14.1.1",
"bluebird": "^3.7.2",
"catharsis": "^0.9.0",
"escape-string-regexp": "^2.0.0",
"js2xmlparser": "^4.0.2",
"klaw": "^3.0.0",
- "markdown-it": "^12.3.2",
- "markdown-it-anchor": "^8.4.1",
+ "markdown-it": "^14.1.0",
+ "markdown-it-anchor": "^8.6.7",
"marked": "^4.0.10",
"mkdirp": "^1.0.4",
"requizzle": "^0.2.3",
"strip-json-comments": "^3.1.0",
- "taffydb": "2.6.2",
"underscore": "~1.13.2"
},
"bin": {
@@ -1354,12 +1268,12 @@
}
},
"node_modules/linkify-it": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
- "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"dev": true,
"dependencies": {
- "uc.micro": "^1.0.1"
+ "uc.micro": "^2.0.0"
}
},
"node_modules/locate-path": {
@@ -1400,54 +1314,49 @@
}
},
"node_modules/lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
+ "dev": true
},
"node_modules/make-fetch-happen": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
- "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==",
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
+ "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
"dev": true,
"dependencies": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
+ "@npmcli/agent": "^2.0.0",
+ "cacache": "^18.0.0",
"http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
"is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
+ "minipass": "^7.0.2",
"minipass-fetch": "^3.0.0",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"negotiator": "^0.6.3",
+ "proc-log": "^4.2.0",
"promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
"ssri": "^10.0.0"
},
"engines": {
- "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ "node": "^16.14.0 || >=18.0.0"
}
},
"node_modules/markdown-it": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
- "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"dev": true,
"dependencies": {
"argparse": "^2.0.1",
- "entities": "~2.1.0",
- "linkify-it": "^3.0.1",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
},
"bin": {
- "markdown-it": "bin/markdown-it.js"
+ "markdown-it": "bin/markdown-it.mjs"
}
},
"node_modules/markdown-it-anchor": {
@@ -1461,10 +1370,13 @@
}
},
"node_modules/markdown-it/node_modules/entities": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
- "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
@@ -1482,9 +1394,9 @@
}
},
"node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"dev": true
},
"node_modules/minimatch": {
@@ -1500,42 +1412,30 @@
}
},
"node_modules/minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
}
},
"node_modules/minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/minipass-collect/node_modules/minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
+ "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
"dev": true,
"dependencies": {
- "yallist": "^4.0.0"
+ "minipass": "^7.0.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=16 || 14 >=14.17"
}
},
"node_modules/minipass-fetch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz",
- "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
+ "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
"dev": true,
"dependencies": {
"minipass": "^7.0.3",
@@ -1549,15 +1449,6 @@
"encoding": "^0.1.13"
}
},
- "node_modules/minipass-fetch/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/minipass-flush": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
@@ -1779,9 +1670,9 @@
"dev": true
},
"node_modules/nan": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
- "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
+ "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw=="
},
"node_modules/nanoid": {
"version": "3.3.3",
@@ -1796,52 +1687,95 @@
}
},
"node_modules/negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
"dev": true,
"engines": {
"node": ">= 0.6"
}
},
"node_modules/node-gyp": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz",
- "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz",
+ "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==",
"dev": true,
"dependencies": {
"env-paths": "^2.2.0",
"exponential-backoff": "^3.1.1",
- "glob": "^7.1.4",
+ "glob": "^10.3.10",
"graceful-fs": "^4.2.6",
- "make-fetch-happen": "^11.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
+ "make-fetch-happen": "^13.0.0",
+ "nopt": "^7.0.0",
+ "proc-log": "^4.1.0",
"semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
+ "tar": "^6.2.1",
+ "which": "^4.0.0"
},
"bin": {
"node-gyp": "bin/node-gyp.js"
},
"engines": {
- "node": "^12.13 || ^14.13 || >=16"
+ "node": "^16.14.0 || >=18.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/node-gyp/node_modules/glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "dependencies": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/node-gyp/node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/nopt": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
- "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
"dev": true,
"dependencies": {
- "abbrev": "^1.0.0"
+ "abbrev": "^2.0.0"
},
"bin": {
"nopt": "bin/nopt.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/normalize-path": {
@@ -1853,21 +1787,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "dev": true,
- "dependencies": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- },
- "engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
- }
- },
"node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -1922,6 +1841,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -1950,30 +1875,21 @@
}
},
"node_modules/path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"dependencies": {
- "lru-cache": "^9.1.1 || ^10.0.0",
+ "lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
},
"engines": {
- "node": ">=16 || 14 >=14.17"
+ "node": ">=16 || 14 >=14.18"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
- "dev": true,
- "engines": {
- "node": "14 || >=16.14"
- }
- },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -1986,6 +1902,15 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/proc-log": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+ "dev": true,
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+ }
+ },
"node_modules/promise-retry": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
@@ -1999,6 +1924,15 @@
"node": ">=10"
}
},
+ "node_modules/punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -2059,21 +1993,6 @@
"node": ">= 4"
}
},
- "node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -2102,13 +2021,10 @@
"optional": true
},
"node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -2116,18 +2032,6 @@
"node": ">=10"
}
},
- "node_modules/semver/node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/serialize-javascript": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
@@ -2137,12 +2041,6 @@
"randombytes": "^2.1.0"
}
},
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
- },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -2165,10 +2063,16 @@
}
},
"node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "dev": true
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
},
"node_modules/smart-buffer": {
"version": "4.2.0",
@@ -2181,37 +2085,43 @@
}
},
"node_modules/socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
"dev": true,
"dependencies": {
- "ip": "^2.0.0",
+ "ip-address": "^9.0.5",
"smart-buffer": "^4.2.0"
},
"engines": {
- "node": ">= 10.13.0",
+ "node": ">= 10.0.0",
"npm": ">= 3.0.0"
}
},
"node_modules/socks-proxy-agent": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
- "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
+ "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
"dev": true,
"dependencies": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
+ "agent-base": "^7.1.1",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
},
"engines": {
- "node": ">= 10"
+ "node": ">= 14"
}
},
+ "node_modules/sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true
+ },
"node_modules/ssri": {
- "version": "10.0.5",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz",
- "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==",
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+ "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
"dev": true,
"dependencies": {
"minipass": "^7.0.3"
@@ -2220,15 +2130,6 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/ssri/node_modules/minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true,
- "engines": {
- "node": ">=16 || 14 >=14.17"
- }
- },
"node_modules/string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
@@ -2316,16 +2217,10 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "node_modules/taffydb": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
- "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==",
- "dev": true
- },
"node_modules/tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"dev": true,
"dependencies": {
"chownr": "^2.0.0",
@@ -2363,6 +2258,15 @@
"node": ">=8"
}
},
+ "node_modules/tar/node_modules/minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -2382,9 +2286,9 @@
"dev": true
},
"node_modules/uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"dev": true
},
"node_modules/underscore": {
@@ -2417,34 +2321,19 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
"node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
"dependencies": {
- "isexe": "^2.0.0"
+ "isexe": "^3.1.1"
},
"bin": {
- "node-which": "bin/node-which"
+ "node-which": "bin/which.js"
},
"engines": {
- "node": ">= 8"
- }
- },
- "node_modules/wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
- "dev": true,
- "dependencies": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
+ "node": "^16.13.0 || >=18.0.0"
}
},
"node_modules/workerpool": {
@@ -2592,9 +2481,9 @@
},
"dependencies": {
"ansi-regex": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
- "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
+ "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
"dev": true
},
"ansi-styles": {
@@ -2642,10 +2531,32 @@
}
}
},
+ "@jsdoc/salty": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.8.tgz",
+ "integrity": "sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.21"
+ }
+ },
+ "@npmcli/agent": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz",
+ "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.1.0",
+ "http-proxy-agent": "^7.0.0",
+ "https-proxy-agent": "^7.0.1",
+ "lru-cache": "^10.0.1",
+ "socks-proxy-agent": "^8.0.3"
+ }
+ },
"@npmcli/fs": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz",
- "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz",
+ "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==",
"dev": true,
"requires": {
"semver": "^7.3.5"
@@ -2658,56 +2569,41 @@
"dev": true,
"optional": true
},
- "@tootallnate/once": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
- "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
- "dev": true
- },
"@types/linkify-it": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.4.tgz",
- "integrity": "sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
"dev": true
},
"@types/markdown-it": {
- "version": "12.2.3",
- "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz",
- "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==",
+ "version": "14.1.2",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
+ "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
"dev": true,
"requires": {
- "@types/linkify-it": "*",
- "@types/mdurl": "*"
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
}
},
"@types/mdurl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.4.tgz",
- "integrity": "sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
"dev": true
},
"abbrev": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
- "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
"dev": true
},
"agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "requires": {
- "debug": "4"
- }
- },
- "agentkeepalive": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
- "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz",
+ "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==",
"dev": true,
"requires": {
- "humanize-ms": "^1.2.1"
+ "debug": "^4.3.4"
}
},
"aggregate-error": {
@@ -2751,44 +2647,6 @@
"picomatch": "^2.0.4"
}
},
- "aproba": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
- "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
- "dev": true
- },
- "are-we-there-yet": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
- "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
- "dev": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- }
- }
- },
"argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
@@ -2847,17 +2705,17 @@
"dev": true
},
"cacache": {
- "version": "17.1.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz",
- "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==",
+ "version": "18.0.4",
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz",
+ "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==",
"dev": true,
"requires": {
"@npmcli/fs": "^3.1.0",
"fs-minipass": "^3.0.0",
"glob": "^10.2.2",
- "lru-cache": "^7.7.1",
+ "lru-cache": "^10.0.1",
"minipass": "^7.0.3",
- "minipass-collect": "^1.0.2",
+ "minipass-collect": "^2.0.1",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"p-map": "^4.0.0",
@@ -2876,32 +2734,27 @@
}
},
"glob": {
- "version": "10.3.10",
- "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
- "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
- "jackspeak": "^2.3.5",
- "minimatch": "^9.0.1",
- "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
- "path-scurry": "^1.10.1"
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
}
},
"minimatch": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
- "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
"dev": true,
"requires": {
"brace-expansion": "^2.0.1"
}
- },
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
}
}
},
@@ -3005,12 +2858,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -3026,12 +2873,6 @@
"date-now": "^0.1.4"
}
},
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "dev": true
- },
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -3039,14 +2880,31 @@
"dev": true
},
"cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
+ },
+ "dependencies": {
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
}
},
"date-now": {
@@ -3078,12 +2936,6 @@
"integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
"dev": true
},
- "delegates": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
- "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
- "dev": true
- },
"diff": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
@@ -3234,21 +3086,13 @@
"dev": true
},
"foreground-child": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
- "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz",
+ "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
- },
- "dependencies": {
- "signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true
- }
}
},
"fs-minipass": {
@@ -3258,14 +3102,6 @@
"dev": true,
"requires": {
"minipass": "^7.0.3"
- },
- "dependencies": {
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
}
},
"fs.realpath": {
@@ -3281,22 +3117,6 @@
"dev": true,
"optional": true
},
- "gauge": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
- "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.3",
- "console-control-strings": "^1.1.0",
- "has-unicode": "^2.0.1",
- "signal-exit": "^3.0.7",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.5"
- }
- },
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -3349,12 +3169,6 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
- "has-unicode": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
- "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
- "dev": true
- },
"he": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -3381,35 +3195,25 @@
"dev": true
},
"http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==",
"dev": true,
"requires": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "agent-base": "^7.1.0",
+ "debug": "^4.3.4"
}
},
"https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz",
+ "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==",
"dev": true,
"requires": {
- "agent-base": "6",
+ "agent-base": "^7.0.2",
"debug": "4"
}
},
- "humanize-ms": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
- "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
- "dev": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
"iconv-lite": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -3448,11 +3252,15 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "ip": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
- "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
- "dev": true
+ "ip-address": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
+ "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
+ "dev": true,
+ "requires": {
+ "jsbn": "1.1.0",
+ "sprintf-js": "^1.1.3"
+ }
},
"is-binary-path": {
"version": "2.1.0",
@@ -3515,15 +3323,15 @@
"dev": true
},
"isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz",
+ "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==",
"dev": true
},
"jackspeak": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
- "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
+ "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
"dev": true,
"requires": {
"@isaacs/cliui": "^8.0.2",
@@ -3548,26 +3356,32 @@
"xmlcreate": "^2.0.4"
}
},
+ "jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
+ "dev": true
+ },
"jsdoc": {
- "version": "3.6.11",
- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz",
- "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz",
+ "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==",
"dev": true,
"requires": {
- "@babel/parser": "^7.9.4",
- "@types/markdown-it": "^12.2.3",
+ "@babel/parser": "^7.20.15",
+ "@jsdoc/salty": "^0.2.1",
+ "@types/markdown-it": "^14.1.1",
"bluebird": "^3.7.2",
"catharsis": "^0.9.0",
"escape-string-regexp": "^2.0.0",
"js2xmlparser": "^4.0.2",
"klaw": "^3.0.0",
- "markdown-it": "^12.3.2",
- "markdown-it-anchor": "^8.4.1",
+ "markdown-it": "^14.1.0",
+ "markdown-it-anchor": "^8.6.7",
"marked": "^4.0.10",
"mkdirp": "^1.0.4",
"requizzle": "^0.2.3",
"strip-json-comments": "^3.1.0",
- "taffydb": "2.6.2",
"underscore": "~1.13.2"
}
},
@@ -3604,12 +3418,12 @@
}
},
"linkify-it": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
- "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"dev": true,
"requires": {
- "uc.micro": "^1.0.1"
+ "uc.micro": "^2.0.0"
}
},
"locate-path": {
@@ -3638,51 +3452,49 @@
}
},
"lru-cache": {
- "version": "7.18.3",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
- "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "version": "10.4.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
+ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
"dev": true
},
"make-fetch-happen": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
- "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==",
+ "version": "13.0.1",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz",
+ "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==",
"dev": true,
"requires": {
- "agentkeepalive": "^4.2.1",
- "cacache": "^17.0.0",
+ "@npmcli/agent": "^2.0.0",
+ "cacache": "^18.0.0",
"http-cache-semantics": "^4.1.1",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
"is-lambda": "^1.0.1",
- "lru-cache": "^7.7.1",
- "minipass": "^5.0.0",
+ "minipass": "^7.0.2",
"minipass-fetch": "^3.0.0",
"minipass-flush": "^1.0.5",
"minipass-pipeline": "^1.2.4",
"negotiator": "^0.6.3",
+ "proc-log": "^4.2.0",
"promise-retry": "^2.0.1",
- "socks-proxy-agent": "^7.0.0",
"ssri": "^10.0.0"
}
},
"markdown-it": {
- "version": "12.3.2",
- "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
- "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
+ "version": "14.1.0",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
+ "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"dev": true,
"requires": {
"argparse": "^2.0.1",
- "entities": "~2.1.0",
- "linkify-it": "^3.0.1",
- "mdurl": "^1.0.1",
- "uc.micro": "^1.0.5"
+ "entities": "^4.4.0",
+ "linkify-it": "^5.0.0",
+ "mdurl": "^2.0.0",
+ "punycode.js": "^2.3.1",
+ "uc.micro": "^2.1.0"
},
"dependencies": {
"entities": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
- "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true
}
}
@@ -3701,9 +3513,9 @@
"dev": true
},
"mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"dev": true
},
"minimatch": {
@@ -3716,49 +3528,30 @@
}
},
"minipass": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
- "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
"dev": true
},
"minipass-collect": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz",
+ "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==",
"dev": true,
"requires": {
- "minipass": "^3.0.0"
- },
- "dependencies": {
- "minipass": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
- "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
+ "minipass": "^7.0.3"
}
},
"minipass-fetch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz",
- "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz",
+ "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==",
"dev": true,
"requires": {
"encoding": "^0.1.13",
"minipass": "^7.0.3",
"minipass-sized": "^1.0.3",
"minizlib": "^2.1.2"
- },
- "dependencies": {
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
}
},
"minipass-flush": {
@@ -3937,9 +3730,9 @@
"dev": true
},
"nan": {
- "version": "2.18.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
- "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w=="
+ "version": "2.22.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz",
+ "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw=="
},
"nanoid": {
"version": "3.3.3",
@@ -3948,37 +3741,70 @@
"dev": true
},
"negotiator": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
- "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
+ "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
"dev": true
},
"node-gyp": {
- "version": "9.4.0",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz",
- "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==",
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz",
+ "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==",
"dev": true,
"requires": {
"env-paths": "^2.2.0",
"exponential-backoff": "^3.1.1",
- "glob": "^7.1.4",
+ "glob": "^10.3.10",
"graceful-fs": "^4.2.6",
- "make-fetch-happen": "^11.0.3",
- "nopt": "^6.0.0",
- "npmlog": "^6.0.0",
- "rimraf": "^3.0.2",
+ "make-fetch-happen": "^13.0.0",
+ "nopt": "^7.0.0",
+ "proc-log": "^4.1.0",
"semver": "^7.3.5",
- "tar": "^6.1.2",
- "which": "^2.0.2"
+ "tar": "^6.2.1",
+ "which": "^4.0.0"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "10.4.5",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
+ "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^3.1.2",
+ "minimatch": "^9.0.4",
+ "minipass": "^7.1.2",
+ "package-json-from-dist": "^1.0.0",
+ "path-scurry": "^1.11.1"
+ }
+ },
+ "minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
}
},
"nopt": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
- "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
+ "version": "7.2.1",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz",
+ "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==",
"dev": true,
"requires": {
- "abbrev": "^1.0.0"
+ "abbrev": "^2.0.0"
}
},
"normalize-path": {
@@ -3987,18 +3813,6 @@
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true
},
- "npmlog": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
- "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "^3.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^4.0.3",
- "set-blocking": "^2.0.0"
- }
- },
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -4035,6 +3849,12 @@
"aggregate-error": "^3.0.0"
}
},
+ "package-json-from-dist": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
+ "dev": true
+ },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -4054,21 +3874,13 @@
"dev": true
},
"path-scurry": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
- "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+ "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
"dev": true,
"requires": {
- "lru-cache": "^9.1.1 || ^10.0.0",
+ "lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
- "dev": true
- }
}
},
"picomatch": {
@@ -4077,6 +3889,12 @@
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true
},
+ "proc-log": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz",
+ "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==",
+ "dev": true
+ },
"promise-retry": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
@@ -4087,6 +3905,12 @@
"retry": "^0.12.0"
}
},
+ "punycode.js": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
+ "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
+ "dev": true
+ },
"randombytes": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@@ -4138,15 +3962,6 @@
"integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
"dev": true
},
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -4161,24 +3976,10 @@
"optional": true
},
"semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- },
- "dependencies": {
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
- }
- }
+ "version": "7.6.3",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
+ "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
+ "dev": true
},
"serialize-javascript": {
"version": "6.0.0",
@@ -4189,12 +3990,6 @@
"randombytes": "^2.1.0"
}
},
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
- },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -4211,9 +4006,9 @@
"dev": true
},
"signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true
},
"smart-buffer": {
@@ -4223,41 +4018,39 @@
"dev": true
},
"socks": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
- "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
+ "version": "2.8.3",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
+ "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
"dev": true,
"requires": {
- "ip": "^2.0.0",
+ "ip-address": "^9.0.5",
"smart-buffer": "^4.2.0"
}
},
"socks-proxy-agent": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
- "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
+ "version": "8.0.4",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz",
+ "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==",
"dev": true,
"requires": {
- "agent-base": "^6.0.2",
- "debug": "^4.3.3",
- "socks": "^2.6.2"
+ "agent-base": "^7.1.1",
+ "debug": "^4.3.4",
+ "socks": "^2.8.3"
}
},
+ "sprintf-js": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
+ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
+ "dev": true
+ },
"ssri": {
- "version": "10.0.5",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz",
- "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==",
+ "version": "10.0.6",
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz",
+ "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==",
"dev": true,
"requires": {
"minipass": "^7.0.3"
- },
- "dependencies": {
- "minipass": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
- "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
- "dev": true
- }
}
},
"string_decoder": {
@@ -4321,16 +4114,10 @@
"has-flag": "^4.0.0"
}
},
- "taffydb": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
- "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==",
- "dev": true
- },
"tar": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
- "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
+ "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
"dev": true,
"requires": {
"chownr": "^2.0.0",
@@ -4360,6 +4147,12 @@
}
}
}
+ },
+ "minipass": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true
}
}
},
@@ -4379,9 +4172,9 @@
"dev": true
},
"uc.micro": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
- "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
+ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"dev": true
},
"underscore": {
@@ -4408,28 +4201,13 @@
"imurmurhash": "^0.1.4"
}
},
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
"which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "wide-align": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
- "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
+ "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
"dev": true,
"requires": {
- "string-width": "^1.0.2 || 2 || 3 || 4"
+ "isexe": "^3.1.1"
}
},
"workerpool": {
diff --git a/package.json b/package.json
index 9390be95..6d21c863 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
{
"name": "node-rdkafka",
- "version": "v2.18.3",
+ "version": "v3.2.0",
"description": "Node.js bindings for librdkafka",
- "librdkafka": "2.3.0",
+ "librdkafka": "2.6.0",
"main": "lib/index.js",
"scripts": {
"configure": "node-gyp configure",
@@ -33,17 +33,17 @@
"license": "MIT",
"devDependencies": {
"bluebird": "^3.5.3",
- "jsdoc": "^3.4.0",
+ "jsdoc": "^4.0.2",
"jshint": "^2.10.1",
"mocha": "^10.2.0",
- "node-gyp": "^9.3.1",
+ "node-gyp": "^10.1.0",
"toolkit-jsdoc": "^1.0.0"
},
"dependencies": {
"bindings": "^1.3.1",
- "nan": "^2.17.0"
+ "nan": "^2.19.0"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=16"
}
}
diff --git a/prebuild/platform-arm64-ABI-115.tar.gz b/prebuild/platform-arm64-ABI-115.tar.gz
index d49c8a2f..af1003e7 100644
Binary files a/prebuild/platform-arm64-ABI-115.tar.gz and b/prebuild/platform-arm64-ABI-115.tar.gz differ
diff --git a/prebuild/platform-x64-ABI-115.tar.gz b/prebuild/platform-x64-ABI-115.tar.gz
index 48d3e54a..851e3f3c 100644
Binary files a/prebuild/platform-x64-ABI-115.tar.gz and b/prebuild/platform-x64-ABI-115.tar.gz differ
diff --git a/src/admin.cc b/src/admin.cc
index 1453ad35..b5c7c8f0 100644
--- a/src/admin.cc
+++ b/src/admin.cc
@@ -49,6 +49,24 @@ Baton AdminClient::Connect() {
return Baton(RdKafka::ERR__STATE, errstr);
}
+ if (m_init_oauthToken) {
+ scoped_shared_write_lock lock(m_connection_lock);
+ if (m_init_oauthToken) {
+ std::list emptyList;
+ std::string token = m_init_oauthToken->token;
+ int64_t expiry = m_init_oauthToken->expiry;
+ // needed for initial connection only
+ m_init_oauthToken.reset();
+
+ RdKafka::ErrorCode err = m_client->oauthbearer_set_token(token, expiry,
+ "", emptyList, errstr);
+
+ if (err != RdKafka::ERR_NO_ERROR) {
+ return Baton(err, errstr);
+ }
+ }
+ }
+
if (rkqu == NULL) {
rkqu = rd_kafka_queue_new(m_client->c_ptr());
}
@@ -88,6 +106,7 @@ void AdminClient::Init(v8::Local exports) {
Nan::SetPrototypeMethod(tpl, "connect", NodeConnect);
Nan::SetPrototypeMethod(tpl, "disconnect", NodeDisconnect);
+ Nan::SetPrototypeMethod(tpl, "setToken", NodeSetToken);
constructor.Reset(
(tpl->GetFunction(Nan::GetCurrentContext())).ToLocalChecked());
diff --git a/src/connection.cc b/src/connection.cc
index 9de3b3c1..f76e012f 100644
--- a/src/connection.cc
+++ b/src/connection.cc
@@ -7,6 +7,7 @@
* of the MIT license. See the LICENSE.txt file for details.
*/
+#include
#include
#include
@@ -67,6 +68,18 @@ Connection::~Connection() {
}
}
+Baton Connection::rdkafkaErrorToBaton(RdKafka::Error* error) {
+ if ( NULL == error) {
+ return Baton(RdKafka::ERR_NO_ERROR);
+ }
+ else {
+ Baton result(error->code(), error->str(), error->is_fatal(),
+ error->is_retriable(), error->txn_requires_abort());
+ delete error;
+ return result;
+ }
+}
+
RdKafka::TopicPartition* Connection::GetPartition(std::string &topic) {
return RdKafka::TopicPartition::create(topic, RdKafka::Topic::PARTITION_UA);
}
@@ -226,6 +239,45 @@ void Connection::ConfigureCallback(const std::string &string_key, const v8::Loca
}
// NAN METHODS
+NAN_METHOD(Connection::NodeSetToken)
+{
+ if (info.Length() < 1 || !info[0]->IsString()) {
+ Nan::ThrowError("Token argument must be a string");
+ return;
+ }
+
+ Nan::Utf8String tk(info[0]);
+ std::string token = *tk;
+ // we always set expiry to maximum value in ms, as we don't use refresh callback,
+ // rdkafka continues sending a token even if it expired. Client code must
+ // handle token refreshing by calling 'setToken' again when needed.
+ int64_t expiry = (std::numeric_limits::max)() / 100000;
+ Connection* obj = ObjectWrap::Unwrap(info.This());
+ RdKafka::Handle* handle = obj->m_client;
+
+ if (!handle) {
+ scoped_shared_write_lock lock(obj->m_connection_lock);
+ obj->m_init_oauthToken = std::make_unique(
+ OauthBearerToken{token, expiry});
+ info.GetReturnValue().Set(Nan::Null());
+ return;
+ }
+
+ {
+ scoped_shared_write_lock lock(obj->m_connection_lock);
+ std::string errstr;
+ std::list emptyList;
+ RdKafka::ErrorCode err = handle->oauthbearer_set_token(token, expiry,
+ "", emptyList, errstr);
+
+ if (err != RdKafka::ERR_NO_ERROR) {
+ Nan::ThrowError(errstr.c_str());
+ return;
+ }
+ }
+
+ info.GetReturnValue().Set(Nan::Null());
+}
NAN_METHOD(Connection::NodeGetMetadata) {
Nan::HandleScope scope;
diff --git a/src/connection.h b/src/connection.h
index 8c4ac73f..bba8a7c7 100644
--- a/src/connection.h
+++ b/src/connection.h
@@ -45,7 +45,13 @@ namespace NodeKafka {
*/
class Connection : public Nan::ObjectWrap {
- public:
+ struct OauthBearerToken
+ {
+ std::string token;
+ int64_t expiry;
+ };
+
+public:
bool IsConnected();
bool IsClosing();
@@ -74,6 +80,7 @@ class Connection : public Nan::ObjectWrap {
static Nan::Persistent constructor;
static void New(const Nan::FunctionCallbackInfo& info);
+ static Baton rdkafkaErrorToBaton(RdKafka::Error* error);
bool m_has_been_disconnected;
bool m_is_closing;
@@ -82,10 +89,13 @@ class Connection : public Nan::ObjectWrap {
Conf* m_tconfig;
std::string m_errstr;
+ std::unique_ptr m_init_oauthToken;
+
uv_rwlock_t m_connection_lock;
RdKafka::Handle* m_client;
+ static NAN_METHOD(NodeSetToken);
static NAN_METHOD(NodeConfigureCallbacks);
static NAN_METHOD(NodeGetMetadata);
static NAN_METHOD(NodeQueryWatermarkOffsets);
diff --git a/src/kafka-consumer.cc b/src/kafka-consumer.cc
index 019b0cb6..89528ceb 100644
--- a/src/kafka-consumer.cc
+++ b/src/kafka-consumer.cc
@@ -56,6 +56,24 @@ Baton KafkaConsumer::Connect() {
return Baton(RdKafka::ERR__STATE, errstr);
}
+ if (m_init_oauthToken) {
+ scoped_shared_write_lock lock(m_connection_lock);
+ if (m_init_oauthToken) {
+ std::list emptyList;
+ std::string token = m_init_oauthToken->token;
+ int64_t expiry = m_init_oauthToken->expiry;
+ // needed for initial connection only
+ m_init_oauthToken.reset();
+
+ RdKafka::ErrorCode err = m_client->oauthbearer_set_token(token, expiry,
+ "", emptyList, errstr);
+
+ if (err != RdKafka::ERR_NO_ERROR) {
+ return Baton(err, errstr);
+ }
+ }
+ }
+
if (m_partitions.size() > 0) {
m_client->resume(m_partitions);
}
@@ -201,6 +219,59 @@ Baton KafkaConsumer::Unassign() {
return Baton(RdKafka::ERR_NO_ERROR);
}
+Baton KafkaConsumer::IncrementalAssign(std::vector partitions) {
+ if (!IsConnected()) {
+ return Baton(RdKafka::ERR__STATE, "KafkaConsumer is disconnected");
+ }
+
+ RdKafka::KafkaConsumer* consumer =
+ dynamic_cast(m_client);
+
+ RdKafka::Error* error = consumer->incremental_assign(partitions);
+
+ if (error == NULL) {
+ m_partition_cnt += partitions.size();
+ m_partitions.insert(m_partitions.end(), partitions.begin(), partitions.end());
+ } else {
+ RdKafka::TopicPartition::destroy(partitions);
+ }
+
+ return rdkafkaErrorToBaton(error);
+}
+
+Baton KafkaConsumer::IncrementalUnassign(std::vector partitions) {
+ if (!IsClosing() && !IsConnected()) {
+ return Baton(RdKafka::ERR__STATE);
+ }
+
+ RdKafka::KafkaConsumer* consumer =
+ dynamic_cast(m_client);
+
+ RdKafka::Error* error = consumer->incremental_unassign(partitions);
+
+ std::vector delete_partitions;
+
+ if (error == NULL) {
+ for (unsigned int i = 0; i < partitions.size(); i++) {
+ for (unsigned int j = 0; j < m_partitions.size(); j++) {
+ if (partitions[i]->partition() == m_partitions[j]->partition() &&
+ partitions[i]->topic() == m_partitions[j]->topic()) {
+ delete_partitions.push_back(m_partitions[j]);
+ m_partitions.erase(m_partitions.begin() + j);
+ m_partition_cnt--;
+ break;
+ }
+ }
+ }
+ }
+
+ RdKafka::TopicPartition::destroy(delete_partitions);
+
+ RdKafka::TopicPartition::destroy(partitions);
+
+ return rdkafkaErrorToBaton(error);
+}
+
Baton KafkaConsumer::Commit(std::vector toppars) {
if (!IsConnected()) {
return Baton(RdKafka::ERR__STATE);
@@ -476,6 +547,17 @@ std::string KafkaConsumer::Name() {
return std::string(m_client->name());
}
+std::string KafkaConsumer::RebalanceProtocol() {
+ if (!IsConnected()) {
+ return std::string("NONE");
+ }
+
+ RdKafka::KafkaConsumer* consumer =
+ dynamic_cast(m_client);
+
+ return consumer->rebalance_protocol();
+}
+
Nan::Persistent KafkaConsumer::constructor;
void KafkaConsumer::Init(v8::Local exports) {
@@ -499,6 +581,7 @@ void KafkaConsumer::Init(v8::Local exports) {
Nan::SetPrototypeMethod(tpl, "connect", NodeConnect);
Nan::SetPrototypeMethod(tpl, "disconnect", NodeDisconnect);
+ Nan::SetPrototypeMethod(tpl, "setToken", NodeSetToken);
Nan::SetPrototypeMethod(tpl, "getMetadata", NodeGetMetadata);
Nan::SetPrototypeMethod(tpl, "queryWatermarkOffsets", NodeQueryWatermarkOffsets); // NOLINT
Nan::SetPrototypeMethod(tpl, "offsetsForTimes", NodeOffsetsForTimes);
@@ -528,7 +611,10 @@ void KafkaConsumer::Init(v8::Local exports) {
Nan::SetPrototypeMethod(tpl, "position", NodePosition);
Nan::SetPrototypeMethod(tpl, "assign", NodeAssign);
Nan::SetPrototypeMethod(tpl, "unassign", NodeUnassign);
+ Nan::SetPrototypeMethod(tpl, "incrementalAssign", NodeIncrementalAssign);
+ Nan::SetPrototypeMethod(tpl, "incrementalUnassign", NodeIncrementalUnassign);
Nan::SetPrototypeMethod(tpl, "assignments", NodeAssignments);
+ Nan::SetPrototypeMethod(tpl, "rebalanceProtocol", NodeRebalanceProtocol);
Nan::SetPrototypeMethod(tpl, "commit", NodeCommit);
Nan::SetPrototypeMethod(tpl, "commitSync", NodeCommitSync);
@@ -701,6 +787,12 @@ NAN_METHOD(KafkaConsumer::NodeAssignments) {
Conversion::TopicPartition::ToV8Array(consumer->m_partitions));
}
+NAN_METHOD(KafkaConsumer::NodeRebalanceProtocol) {
+ KafkaConsumer* consumer = ObjectWrap::Unwrap(info.This());
+ std::string protocol = consumer->RebalanceProtocol();
+ info.GetReturnValue().Set(Nan::New(protocol).ToLocalChecked());
+}
+
NAN_METHOD(KafkaConsumer::NodeAssign) {
Nan::HandleScope scope;
@@ -779,6 +871,114 @@ NAN_METHOD(KafkaConsumer::NodeUnassign) {
info.GetReturnValue().Set(Nan::True());
}
+NAN_METHOD(KafkaConsumer::NodeIncrementalAssign) {
+ Nan::HandleScope scope;
+
+ if (info.Length() < 1 || !info[0]->IsArray()) {
+ return Nan::ThrowError("Need to specify an array of partitions");
+ }
+
+ v8::Local partitions = info[0].As();
+ std::vector topic_partitions;
+
+ for (unsigned int i = 0; i < partitions->Length(); ++i) {
+ v8::Local partition_obj_value;
+ if (!(
+ Nan::Get(partitions, i).ToLocal(&partition_obj_value) &&
+ partition_obj_value->IsObject())) {
+ Nan::ThrowError("Must pass topic-partition objects");
+ }
+
+ v8::Local partition_obj = partition_obj_value.As();
+
+ int64_t partition = GetParameter(partition_obj, "partition", -1);
+ std::string topic = GetParameter(partition_obj, "topic", "");
+
+ if (!topic.empty()) {
+ RdKafka::TopicPartition* part;
+
+ if (partition < 0) {
+ part = Connection::GetPartition(topic);
+ } else {
+ part = Connection::GetPartition(topic, partition);
+ }
+
+ int64_t offset = GetParameter(
+ partition_obj, "offset", RdKafka::Topic::OFFSET_INVALID);
+ if (offset != RdKafka::Topic::OFFSET_INVALID) {
+ part->set_offset(offset);
+ }
+
+ topic_partitions.push_back(part);
+ }
+ }
+
+ KafkaConsumer* consumer = ObjectWrap::Unwrap(info.This());
+
+ Baton b = consumer->IncrementalAssign(topic_partitions);
+
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
+ v8::Local errorObject = b.ToObject();
+ Nan::ThrowError(errorObject);
+ }
+
+ info.GetReturnValue().Set(Nan::True());
+}
+
+NAN_METHOD(KafkaConsumer::NodeIncrementalUnassign) {
+ Nan::HandleScope scope;
+
+ if (info.Length() < 1 || !info[0]->IsArray()) {
+ return Nan::ThrowError("Need to specify an array of partitions");
+ }
+
+ v8::Local partitions = info[0].As();
+ std::vector topic_partitions;
+
+ for (unsigned int i = 0; i < partitions->Length(); ++i) {
+ v8::Local partition_obj_value;
+ if (!(
+ Nan::Get(partitions, i).ToLocal(&partition_obj_value) &&
+ partition_obj_value->IsObject())) {
+ Nan::ThrowError("Must pass topic-partition objects");
+ }
+
+ v8::Local partition_obj = partition_obj_value.As();
+
+ int64_t partition = GetParameter(partition_obj, "partition", -1);
+ std::string topic = GetParameter(partition_obj, "topic", "");
+
+ if (!topic.empty()) {
+ RdKafka::TopicPartition* part;
+
+ if (partition < 0) {
+ part = Connection::GetPartition(topic);
+ } else {
+ part = Connection::GetPartition(topic, partition);
+ }
+
+ int64_t offset = GetParameter(
+ partition_obj, "offset", RdKafka::Topic::OFFSET_INVALID);
+ if (offset != RdKafka::Topic::OFFSET_INVALID) {
+ part->set_offset(offset);
+ }
+
+ topic_partitions.push_back(part);
+ }
+ }
+
+ KafkaConsumer* consumer = ObjectWrap::Unwrap(info.This());
+
+ Baton b = consumer->IncrementalUnassign(topic_partitions);
+
+ if (b.err() != RdKafka::ERR_NO_ERROR) {
+ v8::Local errorObject = b.ToObject();
+ Nan::ThrowError(errorObject);
+ }
+
+ info.GetReturnValue().Set(Nan::True());
+}
+
NAN_METHOD(KafkaConsumer::NodeUnsubscribe) {
Nan::HandleScope scope;
diff --git a/src/kafka-consumer.h b/src/kafka-consumer.h
index c91590ec..dfb45b9a 100644
--- a/src/kafka-consumer.h
+++ b/src/kafka-consumer.h
@@ -74,9 +74,13 @@ class KafkaConsumer : public Connection {
Baton Assign(std::vector);
Baton Unassign();
+ Baton IncrementalAssign(std::vector);
+ Baton IncrementalUnassign(std::vector);
+
Baton Seek(const RdKafka::TopicPartition &partition, int timeout_ms);
std::string Name();
+ std::string RebalanceProtocol();
Baton Subscribe(std::vector);
Baton Consume(int timeout_ms);
@@ -106,6 +110,9 @@ class KafkaConsumer : public Connection {
static NAN_METHOD(NodeDisconnect);
static NAN_METHOD(NodeAssign);
static NAN_METHOD(NodeUnassign);
+ static NAN_METHOD(NodeIncrementalAssign);
+ static NAN_METHOD(NodeIncrementalUnassign);
+ static NAN_METHOD(NodeRebalanceProtocol);
static NAN_METHOD(NodeAssignments);
static NAN_METHOD(NodeUnsubscribe);
static NAN_METHOD(NodeCommit);
diff --git a/src/producer.cc b/src/producer.cc
index 04e75688..8e20320a 100644
--- a/src/producer.cc
+++ b/src/producer.cc
@@ -66,6 +66,7 @@ void Producer::Init(v8::Local exports) {
Nan::SetPrototypeMethod(tpl, "connect", NodeConnect);
Nan::SetPrototypeMethod(tpl, "disconnect", NodeDisconnect);
+ Nan::SetPrototypeMethod(tpl, "setToken", NodeSetToken);
Nan::SetPrototypeMethod(tpl, "getMetadata", NodeGetMetadata);
Nan::SetPrototypeMethod(tpl, "queryWatermarkOffsets", NodeQueryWatermarkOffsets); // NOLINT
Nan::SetPrototypeMethod(tpl, "poll", NodePoll);
@@ -183,6 +184,25 @@ Baton Producer::Connect() {
return Baton(RdKafka::ERR__STATE, errstr);
}
+ if (m_init_oauthToken) {
+ scoped_shared_write_lock lock(m_connection_lock);
+ if (m_init_oauthToken) {
+ std::list emptyList;
+ std::string token = m_init_oauthToken->token;
+ int64_t expiry = m_init_oauthToken->expiry;
+ // needed for initial connection only
+ m_init_oauthToken.reset();
+
+ RdKafka::ErrorCode err = m_client->oauthbearer_set_token(token, expiry,
+ "", emptyList, errstr);
+
+ if (err != RdKafka::ERR_NO_ERROR) {
+ return Baton(err, errstr);
+ }
+ }
+ }
+
+
return Baton(RdKafka::ERR_NO_ERROR);
}
@@ -350,18 +370,6 @@ void Producer::ConfigureCallback(const std::string &string_key, const v8::Local<
}
}
-Baton rdkafkaErrorToBaton(RdKafka::Error* error) {
- if ( NULL == error) {
- return Baton(RdKafka::ERR_NO_ERROR);
- }
- else {
- Baton result(error->code(), error->str(), error->is_fatal(),
- error->is_retriable(), error->txn_requires_abort());
- delete error;
- return result;
- }
-}
-
Baton Producer::InitTransactions(int32_t timeout_ms) {
if (!IsConnected()) {
return Baton(RdKafka::ERR__STATE);
diff --git a/test/binding.spec.js b/test/binding.spec.js
index b82c7bc4..117fde1b 100644
--- a/test/binding.spec.js
+++ b/test/binding.spec.js
@@ -56,7 +56,7 @@ module.exports = {
});
},
'has necessary methods from superclass': function() {
- var methods = ['connect', 'disconnect', 'configureCallbacks', 'getMetadata'];
+ var methods = ['connect', 'disconnect', 'setToken', 'configureCallbacks', 'getMetadata'];
methods.forEach(function(m) {
t.equal(typeof(client[m]), 'function', 'Client is missing ' + m + ' method');
});
diff --git a/test/consumer.spec.js b/test/consumer.spec.js
index 40b52ee4..4fc3bd53 100644
--- a/test/consumer.spec.js
+++ b/test/consumer.spec.js
@@ -71,7 +71,7 @@ module.exports = {
});
},
'has necessary methods from superclass': function() {
- var methods = ['connect', 'disconnect', 'configureCallbacks', 'getMetadata'];
+ var methods = ['connect', 'disconnect', 'setToken', 'configureCallbacks', 'getMetadata'];
methods.forEach(function(m) {
t.equal(typeof(client[m]), 'function', 'Client is missing ' + m + ' method');
});