This is an automated email from the ASF dual-hosted git repository.
BewareMyPower pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar-client-node.git
The following commit(s) were added to refs/heads/master by this push:
new 5f5d0cb Support protobuf native schema (#486)
5f5d0cb is described below
commit 5f5d0cbf936cbb05a9a0de3e054787c5c5ce0b2f
Author: Baodi Shi <[email protected]>
AuthorDate: Tue May 26 10:45:17 2026 +0800
Support protobuf native schema (#486)
---
.eslintignore | 1 +
index.d.ts | 16 +
index.js | 2 +
package-lock.json | 22 +-
package.json | 3 +-
src/ProtobufNativeSchema.js | 74 ++++
src/SchemaInfo.cc | 70 ++--
src/SchemaInfo.h | 10 +-
tests/protobuf_native_schema.test.js | 96 +++++
tests/protobuf_schema/generated/user_event_pb.d.ts | 164 ++++++++
tests/protobuf_schema/generated/user_event_pb.js | 412 +++++++++++++++++++++
.../protobuf_schema/generated/user_event_root.json | 33 ++
yarn.lock | 247 +++++++++---
13 files changed, 1066 insertions(+), 84 deletions(-)
diff --git a/.eslintignore b/.eslintignore
index ea4442c..117f9f2 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -19,3 +19,4 @@
examples
perf
+tests/protobuf_schema/generated
diff --git a/index.d.ts b/index.d.ts
index 607842f..8e6fb85 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -225,6 +225,21 @@ export interface SchemaInfo {
properties?: Record<string, string>;
}
+export namespace ProtobufNativeSchema {
+ interface CreateSchemaInfoFromRootOptions {
+ root: any;
+ rootMessageTypeName: string;
+ rootFileDescriptorName: string;
+ schemaType?: 'ProtobufNative';
+ syntax?: 'proto3' | 'proto2' | string;
+ name?: string;
+ properties?: Record<string, string>;
+ }
+
+ function createRootFromJson(rootJson: Record<string, unknown>): any;
+ function createSchemaInfoFromRoot(options: CreateSchemaInfoFromRootOptions):
SchemaInfo;
+}
+
export interface DeadLetterPolicy {
deadLetterTopic: string;
maxRedeliverCount?: number;
@@ -385,6 +400,7 @@ export type SchemaType =
'Float32' |
'Float64' |
'KeyValue' |
+ 'ProtobufNative' |
'Bytes' |
'AutoConsume' |
'AutoPublish';
diff --git a/index.js b/index.js
index d909251..57ae761 100644
--- a/index.js
+++ b/index.js
@@ -24,6 +24,7 @@ const AuthenticationToken =
require('./src/AuthenticationToken');
const AuthenticationOauth2 = require('./src/AuthenticationOauth2');
const AuthenticationBasic = require('./src/AuthenticationBasic');
const Client = require('./src/Client');
+const ProtobufNativeSchema = require('./src/ProtobufNativeSchema');
const LogLevel = {
DEBUG: 0,
@@ -43,6 +44,7 @@ const Pulsar = {
AuthenticationToken,
AuthenticationOauth2,
AuthenticationBasic,
+ ProtobufNativeSchema,
LogLevel,
};
diff --git a/package-lock.json b/package-lock.json
index e5f892c..444d07b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,8 @@
"dependencies": {
"@mapbox/node-pre-gyp": "^2.0.3",
"bindings": "^1.5.0",
- "node-addon-api": "^4.3.0"
+ "node-addon-api": "^4.3.0",
+ "protobufjs": "^8.4.2"
},
"devDependencies": {
"@seadub/clang-format-lint": "0.0.2",
@@ -6251,6 +6252,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/long": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
+ "integrity":
"sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
+ "license": "Apache-2.0"
+ },
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -7045,6 +7052,19 @@
"node": ">= 6"
}
},
+ "node_modules/protobufjs": {
+ "version": "8.4.2",
+ "resolved":
"https://registry.npmjs.org/protobufjs/-/protobufjs-8.4.2.tgz",
+ "integrity":
"sha512-64rfNzkWOZAIazXzpBFPWq6F9up6gMvTzjE2oWIzApx2N/dqVUEE7+bCn2+40780dFVtKOUab8QfxJ6KJDWbqA==",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "long": "^5.3.2"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/psl": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
diff --git a/package.json b/package.json
index f8ec1cc..9eb68c9 100644
--- a/package.json
+++ b/package.json
@@ -66,7 +66,8 @@
"dependencies": {
"@mapbox/node-pre-gyp": "^2.0.3",
"bindings": "^1.5.0",
- "node-addon-api": "^4.3.0"
+ "node-addon-api": "^4.3.0",
+ "protobufjs": "^8.4.2"
},
"binary": {
"module_name": "pulsar",
diff --git a/src/ProtobufNativeSchema.js b/src/ProtobufNativeSchema.js
new file mode 100644
index 0000000..6b8dd6f
--- /dev/null
+++ b/src/ProtobufNativeSchema.js
@@ -0,0 +1,74 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const protobuf = require('protobufjs');
+const descriptor = require('protobufjs/ext/descriptor');
+
+const normalizeTypeName = (typeName) => typeName.replace(/^\./, '');
+
+const createSchemaInfoFromRoot = ({
+ root,
+ rootMessageTypeName,
+ rootFileDescriptorName,
+ schemaType = 'ProtobufNative',
+ syntax = 'proto3',
+ name = rootMessageTypeName,
+ properties = {},
+}) => {
+ if (!root) {
+ throw new Error('root is required');
+ }
+ if (!rootMessageTypeName) {
+ throw new Error('rootMessageTypeName is required');
+ }
+ if (!rootFileDescriptorName) {
+ throw new Error('rootFileDescriptorName is required');
+ }
+
+ const normalizedTypeName = normalizeTypeName(rootMessageTypeName);
+ const rootMessageType = root.lookupType(normalizedTypeName);
+ const packageName = normalizedTypeName.split('.').slice(0, -1).join('.');
+ const namespace = packageName ? root.lookup(packageName) : root;
+
+ // protobufjs reflection JSON does not retain the source file name. Set it
+ // before exporting a FileDescriptorSet, mirroring
descriptor->file()->name().
+ namespace.filename = rootFileDescriptorName;
+ root.resolveAll();
+
+ const fileDescriptorSet = root.toDescriptor(syntax);
+ const fileDescriptorSetBytes =
descriptor.FileDescriptorSet.encode(fileDescriptorSet).finish();
+
+ return {
+ schemaType,
+ name,
+ schema: JSON.stringify({
+ fileDescriptorSet:
Buffer.from(fileDescriptorSetBytes).toString('base64'),
+ rootMessageTypeName: normalizeTypeName(rootMessageType.fullName),
+ rootFileDescriptorName,
+ }),
+ properties,
+ };
+};
+
+const createRootFromJson = (rootJson) => protobuf.Root.fromJSON(rootJson);
+
+module.exports = {
+ createRootFromJson,
+ createSchemaInfoFromRoot,
+};
diff --git a/src/SchemaInfo.cc b/src/SchemaInfo.cc
index b6943f2..ed09a79 100644
--- a/src/SchemaInfo.cc
+++ b/src/SchemaInfo.cc
@@ -17,6 +17,8 @@
* under the License.
*/
#include "SchemaInfo.h"
+#include <pulsar/ConsumerConfiguration.h>
+#include <pulsar/ProducerConfiguration.h>
#include <map>
static const std::string CFG_SCHEMA_TYPE = "schemaType";
@@ -24,28 +26,44 @@ static const std::string CFG_NAME = "name";
static const std::string CFG_SCHEMA = "schema";
static const std::string CFG_PROPS = "properties";
-static const std::map<std::string, pulsar_schema_type> SCHEMA_TYPE = {{"None",
pulsar_None},
-
{"String", pulsar_String},
- {"Json",
pulsar_Json},
-
{"Protobuf", pulsar_Protobuf},
- {"Avro",
pulsar_Avro},
-
{"Boolean", pulsar_Boolean},
- {"Int8",
pulsar_Int8},
-
{"Int16", pulsar_Int16},
-
{"Int32", pulsar_Int32},
-
{"Int64", pulsar_Int64},
-
{"Float32", pulsar_Float32},
-
{"Float64", pulsar_Float64},
-
{"KeyValue", pulsar_KeyValue},
-
{"Bytes", pulsar_Bytes},
-
{"AutoConsume", pulsar_AutoConsume},
-
{"AutoPublish", pulsar_AutoPublish}};
+struct _pulsar_producer_configuration {
+ pulsar::ProducerConfiguration conf;
+};
-SchemaInfo::SchemaInfo(const Napi::Object &schemaInfo) :
cSchemaType(pulsar_Bytes), name("BYTES"), schema() {
- this->cProperties = pulsar_string_map_create();
+struct _pulsar_consumer_configuration {
+ pulsar::ConsumerConfiguration consumerConfiguration;
+};
+
+static const std::map<std::string, pulsar::SchemaType> SCHEMA_TYPE = {
+ {"None", static_cast<pulsar::SchemaType>(0)},
+ {"String", static_cast<pulsar::SchemaType>(1)},
+ {"Json", static_cast<pulsar::SchemaType>(2)},
+ {"Protobuf", static_cast<pulsar::SchemaType>(3)},
+ {"Avro", static_cast<pulsar::SchemaType>(4)},
+ {"Boolean", static_cast<pulsar::SchemaType>(5)},
+ {"Int8", static_cast<pulsar::SchemaType>(6)},
+ {"Int16", static_cast<pulsar::SchemaType>(7)},
+ {"Int32", static_cast<pulsar::SchemaType>(8)},
+ {"Int64", static_cast<pulsar::SchemaType>(9)},
+ {"Float32", static_cast<pulsar::SchemaType>(10)},
+ {"Float64", static_cast<pulsar::SchemaType>(11)},
+ {"KeyValue", static_cast<pulsar::SchemaType>(15)},
+ {"ProtobufNative", static_cast<pulsar::SchemaType>(20)},
+ {"Bytes", static_cast<pulsar::SchemaType>(-1)},
+ {"AutoConsume", static_cast<pulsar::SchemaType>(-3)},
+ {"AutoPublish", static_cast<pulsar::SchemaType>(-4)}};
+
+SchemaInfo::SchemaInfo(const Napi::Object &schemaInfo)
+ : schemaType(static_cast<pulsar::SchemaType>(-1)), name("BYTES"), schema()
{
if (schemaInfo.Has(CFG_SCHEMA_TYPE) &&
schemaInfo.Get(CFG_SCHEMA_TYPE).IsString()) {
- this->name = schemaInfo.Get(CFG_SCHEMA_TYPE).ToString().Utf8Value();
- this->cSchemaType =
SCHEMA_TYPE.at(schemaInfo.Get(CFG_SCHEMA_TYPE).ToString().Utf8Value());
+ std::string typeStr =
schemaInfo.Get(CFG_SCHEMA_TYPE).ToString().Utf8Value();
+ auto it = SCHEMA_TYPE.find(typeStr);
+ if (it == SCHEMA_TYPE.end()) {
+ Napi::TypeError::New(schemaInfo.Env(), "Unknown schemaType: " +
typeStr).ThrowAsJavaScriptException();
+ return;
+ }
+ this->name = typeStr;
+ this->schemaType = it->second;
}
if (schemaInfo.Has(CFG_NAME) && schemaInfo.Get(CFG_NAME).IsString()) {
this->name = schemaInfo.Get(CFG_NAME).ToString().Utf8Value();
@@ -60,19 +78,19 @@ SchemaInfo::SchemaInfo(const Napi::Object &schemaInfo) :
cSchemaType(pulsar_Byte
for (int i = 0; i < size; i++) {
Napi::String key = arr.Get(i).ToString();
Napi::String value = propObj.Get(key).ToString();
- pulsar_string_map_put(this->cProperties, key.Utf8Value().c_str(),
value.Utf8Value().c_str());
+ this->properties[key.Utf8Value()] = value.Utf8Value();
}
}
}
void
SchemaInfo::SetProducerSchema(std::shared_ptr<pulsar_producer_configuration_t>
cProducerConfiguration) {
- pulsar_producer_configuration_set_schema_info(cProducerConfiguration.get(),
this->cSchemaType,
- this->name.c_str(),
this->schema.c_str(), this->cProperties);
+ cProducerConfiguration->conf.setSchema(
+ pulsar::SchemaInfo(this->schemaType, this->name, this->schema,
this->properties));
}
void
SchemaInfo::SetConsumerSchema(std::shared_ptr<pulsar_consumer_configuration_t>
cConsumerConfiguration) {
- pulsar_consumer_configuration_set_schema_info(cConsumerConfiguration.get(),
this->cSchemaType,
- this->name.c_str(),
this->schema.c_str(), this->cProperties);
+ cConsumerConfiguration->consumerConfiguration.setSchema(
+ pulsar::SchemaInfo(this->schemaType, this->name, this->schema,
this->properties));
}
-SchemaInfo::~SchemaInfo() { pulsar_string_map_free(this->cProperties); }
+SchemaInfo::~SchemaInfo() {}
diff --git a/src/SchemaInfo.h b/src/SchemaInfo.h
index 90674f5..ab746e8 100644
--- a/src/SchemaInfo.h
+++ b/src/SchemaInfo.h
@@ -20,9 +20,13 @@
#ifndef SCHEMA_INFO_H
#define SCHEMA_INFO_H
+#include <map>
+#include <memory>
#include <napi.h>
-#include <pulsar/c/producer_configuration.h>
+#include <pulsar/Schema.h>
#include <pulsar/c/consumer_configuration.h>
+#include <pulsar/c/producer_configuration.h>
+#include <string>
class SchemaInfo {
public:
@@ -32,10 +36,10 @@ class SchemaInfo {
void SetConsumerSchema(std::shared_ptr<pulsar_consumer_configuration_t>
cConsumerConfiguration);
private:
- pulsar_schema_type cSchemaType;
+ pulsar::SchemaType schemaType;
std::string name;
std::string schema;
- pulsar_string_map_t *cProperties;
+ std::map<std::string, std::string> properties;
};
#endif
diff --git a/tests/protobuf_native_schema.test.js
b/tests/protobuf_native_schema.test.js
new file mode 100644
index 0000000..27485f5
--- /dev/null
+++ b/tests/protobuf_native_schema.test.js
@@ -0,0 +1,96 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const Pulsar = require('../index');
+const { pulsar } = require('./protobuf_schema/generated/user_event_pb');
+const userEventRootJson =
require('./protobuf_schema/generated/user_event_root.json');
+
+(() => {
+ describe('ProtobufNativeSchema', () => {
+ test('produce and consume protobuf native messages', async () => {
+ const topic =
`persistent://public/default/protobuf-native-schema-${Date.now()}`;
+ const subscription = `protobuf-native-sub-${Date.now()}`;
+ const userEventRoot =
Pulsar.ProtobufNativeSchema.createRootFromJson(userEventRootJson);
+ const schema = Pulsar.ProtobufNativeSchema.createSchemaInfoFromRoot({
+ root: userEventRoot,
+ rootMessageTypeName: 'pulsar.example.UserEvent',
+ rootFileDescriptorName: 'user_event.proto',
+ });
+
+ expect(schema.schemaType).toBe('ProtobufNative');
+
+ const client = new Pulsar.Client({
+ serviceUrl: 'pulsar://localhost:6650',
+ operationTimeoutSeconds: 30,
+ });
+
+ let producer;
+ let consumer;
+
+ try {
+ consumer = await client.subscribe({
+ topic,
+ subscription,
+ subscriptionType: 'Shared',
+ ackTimeoutMs: 10000,
+ schema,
+ });
+
+ producer = await client.createProducer({
+ topic,
+ sendTimeoutMs: 30000,
+ batchingEnabled: true,
+ schema,
+ });
+
+ const sent = [];
+ for (let i = 0; i < 5; i += 1) {
+ const userEvent = pulsar.example.UserEvent.create({
+ id: `user-${i}`,
+ name: `User ${i}`,
+ age: 20 + i,
+ tags: ['nodejs', 'protobuf'],
+ });
+ const data =
Buffer.from(pulsar.example.UserEvent.encode(userEvent).finish());
+ sent.push(pulsar.example.UserEvent.toObject(userEvent));
+ await producer.send({ data });
+ }
+ await producer.flush();
+
+ const received = [];
+ for (let i = 0; i < sent.length; i += 1) {
+ const msg = await consumer.receive();
+ const userEvent = pulsar.example.UserEvent.decode(msg.getData());
+ received.push(pulsar.example.UserEvent.toObject(userEvent));
+ await consumer.acknowledge(msg);
+ }
+
+ expect(received).toEqual(sent);
+ } finally {
+ if (producer) {
+ await producer.close();
+ }
+ if (consumer) {
+ await consumer.close();
+ }
+ await client.close();
+ }
+ }, 30000);
+ });
+})();
diff --git a/tests/protobuf_schema/generated/user_event_pb.d.ts
b/tests/protobuf_schema/generated/user_event_pb.d.ts
new file mode 100644
index 0000000..ae64946
--- /dev/null
+++ b/tests/protobuf_schema/generated/user_event_pb.d.ts
@@ -0,0 +1,164 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import * as $protobuf from "protobufjs";
+import Long = require("long");
+
+/** Namespace pulsar. */
+export namespace pulsar {
+
+ /** Namespace example. */
+ namespace example {
+
+ /**
+ * Properties of a UserEvent.
+ * @deprecated Use pulsar.example.UserEvent.$Properties instead.
+ */
+ interface IUserEvent extends pulsar.example.UserEvent.$Properties {
+ }
+
+ /** Represents a UserEvent. */
+ class UserEvent {
+
+ /**
+ * Constructs a new UserEvent.
+ * @param [properties] Properties to set
+ */
+ constructor(properties?: pulsar.example.UserEvent.$Properties);
+
+ /** Unknown fields preserved while decoding */
+ $unknowns?: Uint8Array[];
+
+ /** UserEvent id. */
+ id: string;
+
+ /** UserEvent name. */
+ name: string;
+
+ /** UserEvent age. */
+ age: number;
+
+ /** UserEvent tags. */
+ tags: string[];
+
+ /**
+ * Creates a new UserEvent instance using the specified properties.
+ * @param [properties] Properties to set
+ * @returns UserEvent instance
+ */
+ static create(properties: pulsar.example.UserEvent.$Shape):
pulsar.example.UserEvent & pulsar.example.UserEvent.$Shape;
+ static create(properties?: pulsar.example.UserEvent.$Properties):
pulsar.example.UserEvent;
+
+ /**
+ * Encodes the specified UserEvent message. Does not implicitly
{@link pulsar.example.UserEvent.verify|verify} messages.
+ * @param message UserEvent message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ static encode(message: pulsar.example.UserEvent.$Properties,
writer?: $protobuf.Writer): $protobuf.Writer;
+
+ /**
+ * Encodes the specified UserEvent message, length delimited. Does
not implicitly {@link pulsar.example.UserEvent.verify|verify} messages.
+ * @param message UserEvent message or plain object to encode
+ * @param [writer] Writer to encode to
+ * @returns Writer
+ */
+ static encodeDelimited(message:
pulsar.example.UserEvent.$Properties, writer?: $protobuf.Writer):
$protobuf.Writer;
+
+ /**
+ * Decodes a UserEvent message from the specified reader or buffer.
+ * @param reader Reader or buffer to decode from
+ * @param [length] Message length if known beforehand
+ * @returns {pulsar.example.UserEvent &
pulsar.example.UserEvent.$Shape} UserEvent
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are
missing
+ */
+ static decode(reader: ($protobuf.Reader|Uint8Array), length?:
number): pulsar.example.UserEvent & pulsar.example.UserEvent.$Shape;
+
+ /**
+ * Decodes a UserEvent message from the specified reader or
buffer, length delimited.
+ * @param reader Reader or buffer to decode from
+ * @returns {pulsar.example.UserEvent &
pulsar.example.UserEvent.$Shape} UserEvent
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are
missing
+ */
+ static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)):
pulsar.example.UserEvent & pulsar.example.UserEvent.$Shape;
+
+ /**
+ * Verifies a UserEvent message.
+ * @param message Plain object to verify
+ * @returns `null` if valid, otherwise the reason why it is not
+ */
+ static verify(message: { [k: string]: any }): (string|null);
+
+ /**
+ * Creates a UserEvent message from a plain object. Also converts
values to their respective internal types.
+ * @param object Plain object
+ * @returns UserEvent
+ */
+ static fromObject(object: { [k: string]: any }):
pulsar.example.UserEvent;
+
+ /**
+ * Creates a plain object from a UserEvent message. Also converts
values to other types if specified.
+ * @param message UserEvent
+ * @param [options] Conversion options
+ * @returns Plain object
+ */
+ static toObject(message: pulsar.example.UserEvent, options?:
$protobuf.IConversionOptions): { [k: string]: any };
+
+ /**
+ * Converts this UserEvent to JSON.
+ * @returns JSON object
+ */
+ toJSON(): { [k: string]: any };
+
+ /**
+ * Gets the type url for UserEvent
+ * @param [prefix] Custom type url prefix, defaults to
`"type.googleapis.com"`
+ * @returns The type url
+ */
+ static getTypeUrl(prefix?: string): string;
+ }
+
+ namespace UserEvent {
+
+ /** Properties of a UserEvent. */
+ interface $Properties {
+
+ /** UserEvent id */
+ id?: (string|null);
+
+ /** UserEvent name */
+ name?: (string|null);
+
+ /** UserEvent age */
+ age?: (number|null);
+
+ /** UserEvent tags */
+ tags?: (string[]|null);
+
+ /** Unknown fields preserved while decoding */
+ $unknowns?: Uint8Array[];
+ }
+
+ /** Shape of a UserEvent. */
+ type $Shape = pulsar.example.UserEvent.$Properties;
+ }
+ }
+}
diff --git a/tests/protobuf_schema/generated/user_event_pb.js
b/tests/protobuf_schema/generated/user_event_pb.js
new file mode 100644
index 0000000..8748c36
--- /dev/null
+++ b/tests/protobuf_schema/generated/user_event_pb.js
@@ -0,0 +1,412 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/*eslint-disable block-scoped-var, id-length, no-control-regex,
no-magic-numbers, no-mixed-operators, no-prototype-builtins, no-redeclare,
no-shadow, no-var, sort-vars, default-case, jsdoc/require-param*/
+"use strict";
+
+var $protobuf = require("protobufjs/minimal");
+
+// Common aliases
+var $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util =
$protobuf.util;
+
+// Exported root namespace
+var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {});
+
+$root.pulsar = (function() {
+
+ /**
+ * Namespace pulsar.
+ * @exports pulsar
+ * @namespace
+ */
+ var pulsar = {};
+
+ pulsar.example = (function() {
+
+ /**
+ * Namespace example.
+ * @memberof pulsar
+ * @namespace
+ */
+ var example = {};
+
+ example.UserEvent = (function() {
+
+ /**
+ * Properties of a UserEvent.
+ * @typedef {Object} pulsar.example.UserEvent.$Properties
+ * @property {string|null} [id] UserEvent id
+ * @property {string|null} [name] UserEvent name
+ * @property {number|null} [age] UserEvent age
+ * @property {Array.<string>|null} [tags] UserEvent tags
+ * @property {Array.<Uint8Array>} [$unknowns] Unknown fields
preserved while decoding
+ */
+
+ /**
+ * Properties of a UserEvent.
+ * @memberof pulsar.example
+ * @interface IUserEvent
+ * @augments pulsar.example.UserEvent.$Properties
+ * @deprecated Use pulsar.example.UserEvent.$Properties instead.
+ */
+
+ /**
+ * Shape of a UserEvent.
+ * @typedef {pulsar.example.UserEvent.$Properties}
pulsar.example.UserEvent.$Shape
+ */
+
+ /**
+ * Constructs a new UserEvent.
+ * @memberof pulsar.example
+ * @classdesc Represents a UserEvent.
+ * @constructor
+ * @param {pulsar.example.UserEvent.$Properties=} [properties]
Properties to set
+ * @property {Array.<Uint8Array>} [$unknowns] Unknown fields
preserved while decoding
+ */
+ function UserEvent(properties) {
+ this.tags = [];
+ if (properties)
+ for (var keys = Object.keys(properties), i = 0; i <
keys.length; ++i)
+ if (properties[keys[i]] != null && keys[i] !==
"__proto__")
+ this[keys[i]] = properties[keys[i]];
+ }
+
+ /**
+ * UserEvent id.
+ * @member {string} id
+ * @memberof pulsar.example.UserEvent
+ * @instance
+ */
+ UserEvent.prototype.id = "";
+
+ /**
+ * UserEvent name.
+ * @member {string} name
+ * @memberof pulsar.example.UserEvent
+ * @instance
+ */
+ UserEvent.prototype.name = "";
+
+ /**
+ * UserEvent age.
+ * @member {number} age
+ * @memberof pulsar.example.UserEvent
+ * @instance
+ */
+ UserEvent.prototype.age = 0;
+
+ /**
+ * UserEvent tags.
+ * @member {Array.<string>} tags
+ * @memberof pulsar.example.UserEvent
+ * @instance
+ */
+ UserEvent.prototype.tags = $util.emptyArray;
+
+ /**
+ * Creates a new UserEvent instance using the specified properties.
+ * @function create
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {pulsar.example.UserEvent.$Properties=} [properties]
Properties to set
+ * @returns {pulsar.example.UserEvent} UserEvent instance
+ * @type {{
+ * (properties: pulsar.example.UserEvent.$Shape):
pulsar.example.UserEvent & pulsar.example.UserEvent.$Shape;
+ * (properties?: pulsar.example.UserEvent.$Properties):
pulsar.example.UserEvent;
+ * }}
+ */
+ UserEvent.create = function create(properties) {
+ return new UserEvent(properties);
+ };
+
+ /**
+ * Encodes the specified UserEvent message. Does not implicitly
{@link pulsar.example.UserEvent.verify|verify} messages.
+ * @function encode
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {pulsar.example.UserEvent.$Properties} message UserEvent
message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ UserEvent.encode = function encode(message, writer, _depth) {
+ if (!writer)
+ writer = $Writer.create();
+ if (_depth === undefined)
+ _depth = 0;
+ if (_depth > $util.recursionLimit)
+ throw Error("max depth exceeded");
+ if (message.id != null && Object.hasOwnProperty.call(message,
"id"))
+ writer.uint32(/* id 1, wireType 2
=*/10).string(message.id);
+ if (message.name != null &&
Object.hasOwnProperty.call(message, "name"))
+ writer.uint32(/* id 2, wireType 2
=*/18).string(message.name);
+ if (message.age != null && Object.hasOwnProperty.call(message,
"age"))
+ writer.uint32(/* id 3, wireType 0
=*/24).int32(message.age);
+ if (message.tags != null && message.tags.length)
+ for (var i = 0; i < message.tags.length; ++i)
+ writer.uint32(/* id 4, wireType 2
=*/34).string(message.tags[i]);
+ if (message.$unknowns != null &&
Object.hasOwnProperty.call(message, "$unknowns"))
+ for (var i = 0; i < message.$unknowns.length; ++i)
+ writer.raw(message.$unknowns[i]);
+ return writer;
+ };
+
+ /**
+ * Encodes the specified UserEvent message, length delimited. Does
not implicitly {@link pulsar.example.UserEvent.verify|verify} messages.
+ * @function encodeDelimited
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {pulsar.example.UserEvent.$Properties} message UserEvent
message or plain object to encode
+ * @param {$protobuf.Writer} [writer] Writer to encode to
+ * @returns {$protobuf.Writer} Writer
+ */
+ UserEvent.encodeDelimited = function encodeDelimited(message,
writer) {
+ return this.encode(message, writer && writer.len ?
writer.fork() : writer).ldelim();
+ };
+
+ /**
+ * Decodes a UserEvent message from the specified reader or buffer.
+ * @function decode
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to
decode from
+ * @param {number} [length] Message length if known beforehand
+ * @returns {pulsar.example.UserEvent &
pulsar.example.UserEvent.$Shape} UserEvent
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are
missing
+ */
+ UserEvent.decode = function decode(reader, length, _end, _depth,
_target) {
+ if (!(reader instanceof $Reader))
+ reader = $Reader.create(reader);
+ if (_depth === undefined)
+ _depth = 0;
+ if (_depth > $Reader.recursionLimit)
+ throw Error("max depth exceeded");
+ var end = length === undefined ? reader.len : reader.pos +
length, message = _target || new $root.pulsar.example.UserEvent(), value;
+ while (reader.pos < end) {
+ var start = reader.pos;
+ var tag = reader.tag();
+ if (tag === _end) {
+ _end = undefined;
+ break;
+ }
+ var wireType = tag & 7;
+ switch (tag >>>= 3) {
+ case 1: {
+ if (wireType !== 2)
+ break;
+ if ((value = reader.string()).length)
+ message.id = value;
+ else
+ delete message.id;
+ continue;
+ }
+ case 2: {
+ if (wireType !== 2)
+ break;
+ if ((value = reader.string()).length)
+ message.name = value;
+ else
+ delete message.name;
+ continue;
+ }
+ case 3: {
+ if (wireType !== 0)
+ break;
+ if (value = reader.int32())
+ message.age = value;
+ else
+ delete message.age;
+ continue;
+ }
+ case 4: {
+ if (wireType !== 2)
+ break;
+ if (!(message.tags && message.tags.length))
+ message.tags = [];
+ message.tags.push(reader.string());
+ continue;
+ }
+ }
+ reader.skipType(wireType, _depth, tag);
+ $util.makeProp(message, "$unknowns", false);
+ (message.$unknowns || (message.$unknowns =
[])).push(reader.raw(start, reader.pos));
+ }
+ if (_end !== undefined)
+ throw Error("missing end group");
+ return message;
+ };
+
+ /**
+ * Decodes a UserEvent message from the specified reader or
buffer, length delimited.
+ * @function decodeDelimited
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to
decode from
+ * @returns {pulsar.example.UserEvent &
pulsar.example.UserEvent.$Shape} UserEvent
+ * @throws {Error} If the payload is not a reader or valid buffer
+ * @throws {$protobuf.util.ProtocolError} If required fields are
missing
+ */
+ UserEvent.decodeDelimited = function decodeDelimited(reader) {
+ if (!(reader instanceof $Reader))
+ reader = new $Reader(reader);
+ return this.decode(reader, reader.uint32());
+ };
+
+ /**
+ * Verifies a UserEvent message.
+ * @function verify
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {Object.<string,*>} message Plain object to verify
+ * @returns {string|null} `null` if valid, otherwise the reason
why it is not
+ */
+ UserEvent.verify = function verify(message, _depth) {
+ if (typeof message !== "object" || message === null)
+ return "object expected";
+ if (_depth === undefined)
+ _depth = 0;
+ if (_depth > $util.recursionLimit)
+ return "max depth exceeded";
+ if (message.id != null && message.hasOwnProperty("id"))
+ if (!$util.isString(message.id))
+ return "id: string expected";
+ if (message.name != null && message.hasOwnProperty("name"))
+ if (!$util.isString(message.name))
+ return "name: string expected";
+ if (message.age != null && message.hasOwnProperty("age"))
+ if (!$util.isInteger(message.age))
+ return "age: integer expected";
+ if (message.tags != null && message.hasOwnProperty("tags")) {
+ if (!Array.isArray(message.tags))
+ return "tags: array expected";
+ for (var i = 0; i < message.tags.length; ++i)
+ if (!$util.isString(message.tags[i]))
+ return "tags: string[] expected";
+ }
+ return null;
+ };
+
+ /**
+ * Creates a UserEvent message from a plain object. Also converts
values to their respective internal types.
+ * @function fromObject
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {Object.<string,*>} object Plain object
+ * @returns {pulsar.example.UserEvent} UserEvent
+ */
+ UserEvent.fromObject = function fromObject(object, _depth) {
+ if (object instanceof $root.pulsar.example.UserEvent)
+ return object;
+ if (_depth === undefined)
+ _depth = 0;
+ if (_depth > $util.recursionLimit)
+ throw Error("max depth exceeded");
+ var message = new $root.pulsar.example.UserEvent();
+ if (object.id != null)
+ if (typeof object.id !== "string" || object.id.length)
+ message.id = String(object.id);
+ if (object.name != null)
+ if (typeof object.name !== "string" || object.name.length)
+ message.name = String(object.name);
+ if (object.age != null)
+ if (Number(object.age) !== 0)
+ message.age = object.age | 0;
+ if (object.tags) {
+ if (!Array.isArray(object.tags))
+ throw TypeError(".pulsar.example.UserEvent.tags: array
expected");
+ message.tags = Array(object.tags.length);
+ for (var i = 0; i < object.tags.length; ++i)
+ message.tags[i] = String(object.tags[i]);
+ }
+ return message;
+ };
+
+ /**
+ * Creates a plain object from a UserEvent message. Also converts
values to other types if specified.
+ * @function toObject
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {pulsar.example.UserEvent} message UserEvent
+ * @param {$protobuf.IConversionOptions} [options] Conversion
options
+ * @returns {Object.<string,*>} Plain object
+ */
+ UserEvent.toObject = function toObject(message, options, _depth) {
+ if (!options)
+ options = {};
+ if (_depth === undefined)
+ _depth = 0;
+ if (_depth > $util.recursionLimit)
+ throw Error("max depth exceeded");
+ var object = {};
+ if (options.arrays || options.defaults)
+ object.tags = [];
+ if (options.defaults) {
+ object.id = "";
+ object.name = "";
+ object.age = 0;
+ }
+ if (message.id != null && message.hasOwnProperty("id"))
+ object.id = message.id;
+ if (message.name != null && message.hasOwnProperty("name"))
+ object.name = message.name;
+ if (message.age != null && message.hasOwnProperty("age"))
+ object.age = message.age;
+ if (message.tags && message.tags.length) {
+ object.tags = Array(message.tags.length);
+ for (var j = 0; j < message.tags.length; ++j)
+ object.tags[j] = message.tags[j];
+ }
+ return object;
+ };
+
+ /**
+ * Converts this UserEvent to JSON.
+ * @function toJSON
+ * @memberof pulsar.example.UserEvent
+ * @instance
+ * @returns {Object.<string,*>} JSON object
+ */
+ UserEvent.prototype.toJSON = function toJSON() {
+ return this.constructor.toObject(this,
$protobuf.util.toJSONOptions);
+ };
+
+ /**
+ * Gets the type url for UserEvent
+ * @function getTypeUrl
+ * @memberof pulsar.example.UserEvent
+ * @static
+ * @param {string} [prefix] Custom type url prefix, defaults to
`"type.googleapis.com"`
+ * @returns {string} The type url
+ */
+ UserEvent.getTypeUrl = function getTypeUrl(prefix) {
+ if (prefix === undefined)
+ prefix = "type.googleapis.com";
+ return prefix + "/pulsar.example.UserEvent";
+ };
+
+ return UserEvent;
+ })();
+
+ return example;
+ })();
+
+ return pulsar;
+})();
+
+module.exports = $root;
diff --git a/tests/protobuf_schema/generated/user_event_root.json
b/tests/protobuf_schema/generated/user_event_root.json
new file mode 100644
index 0000000..140cd97
--- /dev/null
+++ b/tests/protobuf_schema/generated/user_event_root.json
@@ -0,0 +1,33 @@
+{
+ "nested": {
+ "pulsar": {
+ "nested": {
+ "example": {
+ "nested": {
+ "UserEvent": {
+ "fields": {
+ "id": {
+ "type": "string",
+ "id": 1
+ },
+ "name": {
+ "type": "string",
+ "id": 2
+ },
+ "age": {
+ "type": "int32",
+ "id": 3
+ },
+ "tags": {
+ "rule": "repeated",
+ "type": "string",
+ "id": 4
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 5f93d00..d4e3336 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -7,14 +7,23 @@
resolved
"https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz"
integrity
sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==
-"@babel/[email protected]", "@babel/code-frame@^7.0.0":
+"@babel/code-frame@^7.0.0", "@babel/[email protected]":
version "7.12.11"
resolved
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz"
integrity
sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1":
+"@babel/code-frame@^7.12.13":
+ version "7.27.1"
+ resolved
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz"
+ integrity
sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.27.1"
+ js-tokens "^4.0.0"
+ picocolors "^1.1.1"
+
+"@babel/code-frame@^7.27.1":
version "7.27.1"
resolved
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz"
integrity
sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==
@@ -28,7 +37,7 @@
resolved
"https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.4.tgz"
integrity
sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==
-"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2",
"@babel/core@^7.8.0":
+"@babel/core@^7.0.0", "@babel/core@^7.0.0 || ^8.0.0-0",
"@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.12.3",
"@babel/core@^7.7.2", "@babel/core@^7.8.0":
version "7.28.4"
resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz"
integrity
sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==
@@ -561,7 +570,7 @@
"@nodelib/fs.stat" "2.0.5"
run-parallel "^1.1.9"
-"@nodelib/[email protected]", "@nodelib/fs.stat@^2.0.2":
+"@nodelib/fs.stat@^2.0.2", "@nodelib/[email protected]":
version "2.0.5"
resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz"
integrity
sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
@@ -769,16 +778,16 @@ abab@^2.0.3, abab@^2.0.5:
resolved "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz"
integrity
sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==
-abbrev@1:
- version "1.1.1"
- resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
- integrity
sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-
abbrev@^3.0.0:
version "3.0.1"
resolved "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz"
integrity
sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==
+abbrev@1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
+ integrity
sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
+
acorn-globals@^6.0.0:
version "6.0.0"
resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz"
@@ -797,7 +806,7 @@ acorn-walk@^7.1.1:
resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz"
integrity
sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
-acorn@^7.1.1, acorn@^7.4.0:
+"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^7.1.1, acorn@^7.4.0:
version "7.4.1"
resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz"
integrity
sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
@@ -807,6 +816,11 @@ acorn@^8.2.4:
resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz"
integrity
sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==
+agent-base@^7.1.2:
+ version "7.1.4"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz"
+ integrity
sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
+
agent-base@6:
version "6.0.2"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
@@ -814,11 +828,6 @@ agent-base@6:
dependencies:
debug "4"
-agent-base@^7.1.2:
- version "7.1.4"
- resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz"
- integrity
sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==
-
ajv@^6.10.0, ajv@^6.12.4:
version "6.14.0"
resolved "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz"
@@ -866,7 +875,14 @@ ansi-sequence-parser@^1.1.0:
resolved
"https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.3.tgz"
integrity
sha512-+fksAx9eG3Ab6LDnLs3ZqZa8KVJ/jYnX+D4Qe1azX+LFGFAXqynCQLOdLpNYN/l9e7l6hMWwZbrnctqr6eSQSw==
-ansi-styles@^3.2.0, ansi-styles@^3.2.1:
+ansi-styles@^3.2.0:
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
+ integrity
sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^3.2.1:
version "3.2.1"
resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz"
integrity
sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
@@ -1079,6 +1095,11 @@ balanced-match@^1.0.0:
resolved
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz"
integrity
sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+balanced-match@^4.0.2:
+ version "4.0.4"
+ resolved
"https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz"
+ integrity
sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==
+
base64-js@^1.2.0:
version "1.5.1"
resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
@@ -1096,6 +1117,14 @@ bindings@^1.5.0:
dependencies:
file-uri-to-path "1.0.0"
+brace-expansion@^1.1.7:
+ version "1.1.12"
+ resolved
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz"
+ integrity
sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
brace-expansion@^2.0.2:
version "2.0.2"
resolved
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz"
@@ -1103,6 +1132,13 @@ brace-expansion@^2.0.2:
dependencies:
balanced-match "^1.0.0"
+brace-expansion@^5.0.2:
+ version "5.0.4"
+ resolved
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz"
+ integrity
sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==
+ dependencies:
+ balanced-match "^4.0.2"
+
braces@^3.0.3:
version "3.0.3"
resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz"
@@ -1115,7 +1151,7 @@ browser-process-hrtime@^1.0.0:
resolved
"https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz"
integrity
sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
-browserslist@^4.24.0:
+browserslist@^4.24.0, "browserslist@>= 4.21.0":
version "4.26.2"
resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz"
integrity
sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==
@@ -1184,7 +1220,16 @@ caniuse-lite@^1.0.30001741:
resolved
"https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001745.tgz"
integrity
sha512-ywt6i8FzvdgrrrGbr1jZVObnVv6adj+0if2/omv9cmR2oiZs30zL4DIyaptKcbOrBdOIc74QTMoJvSE2QHh5UQ==
-chalk@^2.4.1, chalk@^2.4.2:
+chalk@^2.4.1:
+ version "2.4.2"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
+ integrity
sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chalk@^2.4.2:
version "2.4.2"
resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz"
integrity
sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -1221,7 +1266,7 @@ cjs-module-lexer@^1.0.0:
resolved
"https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz"
integrity
sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==
-clang-format@^1.4.0:
+clang-format@^1.0.0, clang-format@^1.4.0:
version "1.8.0"
resolved "https://registry.npmjs.org/clang-format/-/clang-format-1.8.0.tgz"
integrity
sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==
@@ -1272,16 +1317,16 @@ color-convert@^2.0.1:
dependencies:
color-name "~1.1.4"
[email protected]:
- version "1.1.3"
- resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
- integrity
sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
-
color-name@~1.1.4:
version "1.1.4"
resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity
sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
[email protected]:
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz"
+ integrity
sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
combined-stream@^1.0.8:
version "1.0.8"
resolved
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
@@ -1299,6 +1344,11 @@ commander@^6.1.0:
resolved "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz"
integrity
sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
[email protected]:
+ version "0.0.1"
+ resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
+ integrity
sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
confusing-browser-globals@^1.0.10:
version "1.0.11"
resolved
"https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz"
@@ -1381,20 +1431,27 @@ data-view-byte-offset@^1.0.1:
es-errors "^1.3.0"
is-data-view "^1.0.1"
-debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
- version "4.4.3"
- resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
- integrity
sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+debug@^3.1.0:
+ version "3.2.7"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
+ integrity
sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
- ms "^2.1.3"
+ ms "^2.1.1"
-debug@^3.1.0, debug@^3.2.7:
+debug@^3.2.7:
version "3.2.7"
resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
integrity
sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@4:
+ version "4.4.3"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz"
+ integrity
sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
+ dependencies:
+ ms "^2.1.3"
+
debuglog@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz"
@@ -1707,7 +1764,7 @@ eslint-module-utils@^2.12.1:
dependencies:
debug "^3.2.7"
-eslint-plugin-import@^2.22.0:
+eslint-plugin-import@^2.22.0, eslint-plugin-import@^2.22.1:
version "2.32.0"
resolved
"https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz"
integrity
sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==
@@ -1761,7 +1818,12 @@ eslint-utils@^3.0.0:
dependencies:
eslint-visitor-keys "^2.0.0"
-eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
+eslint-visitor-keys@^1.1.0:
+ version "1.3.0"
+ resolved
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
+ integrity
sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
+
+eslint-visitor-keys@^1.3.0:
version "1.3.0"
resolved
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz"
integrity
sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
@@ -1771,7 +1833,7 @@ eslint-visitor-keys@^2.0.0:
resolved
"https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz"
integrity
sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
-eslint@^7.8.1:
+eslint@*, "eslint@^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9",
"eslint@^5.16.0 || ^6.8.0 || ^7.2.0", eslint@^7.8.1, eslint@>=5:
version "7.32.0"
resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz"
integrity
sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
@@ -1850,7 +1912,12 @@ estraverse@^4.1.1:
resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz"
integrity
sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-estraverse@^5.1.0, estraverse@^5.2.0:
+estraverse@^5.1.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
+ integrity
sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
+
+estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz"
integrity
sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
@@ -1980,7 +2047,7 @@ flat-cache@^3.0.4:
flatted@^3.2.9:
version "3.4.2"
- resolved
"https://registry.yarnpkg.com/flatted/-/flatted-3.4.2.tgz#f5c23c107f0f37de8dbdf24f13722b3b98d52726"
+ resolved "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz"
integrity
sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==
for-each@^0.3.3, for-each@^0.3.5:
@@ -1990,7 +2057,7 @@ for-each@^0.3.3, for-each@^0.3.5:
dependencies:
is-callable "^1.2.7"
-form-data@^3.0.0, form-data@^4.0.1:
+form-data@^4.0.1:
version "4.0.5"
resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz"
integrity
sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==
@@ -2291,7 +2358,12 @@ ignore@^4.0.6:
resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
integrity
sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.1.1, ignore@^5.1.2, ignore@^5.2.0:
+ignore@^5.1.1, ignore@^5.1.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
+ integrity
sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+
+ignore@^5.2.0:
version "5.3.2"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
integrity
sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
@@ -2851,7 +2923,7 @@ jest-resolve-dependencies@^27.5.1:
jest-regex-util "^27.5.1"
jest-snapshot "^27.5.1"
-jest-resolve@^27.5.1:
+jest-resolve@*, jest-resolve@^27.5.1:
version "27.5.1"
resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz"
integrity
sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==
@@ -3197,9 +3269,14 @@ lodash.truncate@^4.4.2:
lodash@^4.17.21, lodash@^4.7.0:
version "4.18.1"
- resolved
"https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz"
integrity
sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
+long@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/long/-/long-5.3.2.tgz"
+ integrity
sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==
+
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz"
@@ -3271,10 +3348,38 @@ mimic-fn@^2.1.0:
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
integrity
sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-minimatch@*, minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2,
minimatch@^7.1.3, minimatch@^9.0.0:
- version "9.0.9"
- resolved
"https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.9.tgz#9b0cb9fcb78087f6fd7eababe2511c4d3d60574e"
- integrity
sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==
+minimatch@*:
+ version "10.2.4"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz"
+ integrity
sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==
+ dependencies:
+ brace-expansion "^5.0.2"
+
+minimatch@^3.0.4:
+ version "3.1.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz"
+ integrity
sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.1.1:
+ version "3.1.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz"
+ integrity
sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^3.1.2:
+ version "3.1.5"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz"
+ integrity
sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimatch@^7.1.3:
+ version "7.4.9"
+ resolved "https://registry.npmjs.org/minimatch/-/minimatch-7.4.9.tgz"
+ integrity
sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw==
dependencies:
brace-expansion "^2.0.2"
@@ -3283,7 +3388,12 @@ minimist@^1.2.0, minimist@^1.2.6:
resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
integrity
sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-minipass@^7.0.4, minipass@^7.1.2:
+minipass@^7.0.4:
+ version "7.1.3"
+ resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz"
+ integrity
sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==
+
+minipass@^7.1.2:
version "7.1.3"
resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz"
integrity
sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==
@@ -3585,7 +3695,7 @@ picocolors@^1.0.0, picocolors@^1.1.1:
picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1:
version "2.3.2"
- resolved
"https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz"
integrity
sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==
pirates@^4.0.4:
@@ -3632,6 +3742,13 @@ prompts@^2.0.1:
kleur "^3.0.3"
sisteransi "^1.0.5"
+protobufjs@^8.4.2:
+ version "8.4.2"
+ resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-8.4.2.tgz"
+ integrity
sha512-64rfNzkWOZAIazXzpBFPWq6F9up6gMvTzjE2oWIzApx2N/dqVUEE7+bCn2+40780dFVtKOUab8QfxJ6KJDWbqA==
+ dependencies:
+ long "^5.3.2"
+
psl@^1.1.33:
version "1.15.0"
resolved "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz"
@@ -3834,12 +3951,17 @@ saxes@^5.0.1:
dependencies:
xmlchars "^2.2.0"
-"semver@2 || 3 || 4 || 5", semver@^5.5.0:
+semver@^5.5.0:
version "5.7.2"
resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
integrity
sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
-semver@^6.3.0, semver@^6.3.1:
+semver@^6.3.0:
+ version "6.3.1"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
+ integrity
sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+semver@^6.3.1:
version "6.3.1"
resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity
sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
@@ -3849,6 +3971,11 @@ semver@^7.2.1, semver@^7.3.2, semver@^7.3.5,
semver@^7.5.3:
resolved "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz"
integrity
sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
+"semver@2 || 3 || 4 || 5":
+ version "5.7.2"
+ resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz"
+ integrity
sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
set-blocking@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
@@ -4080,7 +4207,16 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
-string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
+ integrity
sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string-width@^4.2.3:
version "4.2.3"
resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
integrity
sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
@@ -4150,7 +4286,12 @@ strip-final-newline@^2.0.0:
resolved
"https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
integrity
sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
+strip-json-comments@^3.1.0:
+ version "3.1.1"
+ resolved
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
+ integrity
sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+strip-json-comments@^3.1.1:
version "3.1.1"
resolved
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz"
integrity
sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -4205,9 +4346,9 @@ table@^6.0.9:
string-width "^4.2.3"
strip-ansi "^6.0.1"
-tar@^7.4.0, tar@^7.5.8:
+tar@^7.5.8:
version "7.5.11"
- resolved
"https://registry.yarnpkg.com/tar/-/tar-7.5.11.tgz#1250fae45d98806b36d703b30973fa8e0a6d8868"
+ resolved "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz"
integrity
sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==
dependencies:
"@isaacs/fs-minipass" "^4.0.0"
@@ -4255,7 +4396,7 @@ to-regex-range@^5.0.1:
dependencies:
is-number "^7.0.0"
-tough-cookie@^4.0.0, tough-cookie@^4.1.3:
+tough-cookie@^4.1.3:
version "4.1.4"
resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz"
integrity
sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==
@@ -4388,7 +4529,7 @@ typedoc@^0.23.28:
minimatch "^7.1.3"
shiki "^0.14.1"
-typescript@^4.9.5:
+typescript@^4.9.5, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >=
3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev ||
>= 3.7.0-beta", "[email protected] || 4.7.x || 4.8.x || 4.9.x || 5.0.x":
version "4.9.5"
resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
integrity
sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==