126 lines
4.6 KiB
JavaScript
Vendored
126 lines
4.6 KiB
JavaScript
Vendored
// Copyright 2021-2024 Buf Technologies, Inc.
|
|
//
|
|
// Licensed 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.
|
|
/**
|
|
* Message is the base class of every message, generated, or created at
|
|
* runtime.
|
|
*
|
|
* It is _not_ safe to extend this class. If you want to create a message at
|
|
* run time, use proto3.makeMessageType().
|
|
*/
|
|
export class Message {
|
|
/**
|
|
* Compare with a message of the same type.
|
|
* Note that this function disregards extensions and unknown fields.
|
|
*/
|
|
equals(other) {
|
|
return this.getType().runtime.util.equals(this.getType(), this, other);
|
|
}
|
|
/**
|
|
* Create a deep copy.
|
|
*/
|
|
clone() {
|
|
return this.getType().runtime.util.clone(this);
|
|
}
|
|
/**
|
|
* Parse from binary data, merging fields.
|
|
*
|
|
* Repeated fields are appended. Map entries are added, overwriting
|
|
* existing keys.
|
|
*
|
|
* If a message field is already present, it will be merged with the
|
|
* new data.
|
|
*/
|
|
fromBinary(bytes, options) {
|
|
const type = this.getType(), format = type.runtime.bin, opt = format.makeReadOptions(options);
|
|
format.readMessage(this, opt.readerFactory(bytes), bytes.byteLength, opt);
|
|
return this;
|
|
}
|
|
/**
|
|
* Parse a message from a JSON value.
|
|
*/
|
|
fromJson(jsonValue, options) {
|
|
const type = this.getType(), format = type.runtime.json, opt = format.makeReadOptions(options);
|
|
format.readMessage(type, jsonValue, opt, this);
|
|
return this;
|
|
}
|
|
/**
|
|
* Parse a message from a JSON string.
|
|
*/
|
|
fromJsonString(jsonString, options) {
|
|
let json;
|
|
try {
|
|
json = JSON.parse(jsonString);
|
|
}
|
|
catch (e) {
|
|
throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
}
|
|
return this.fromJson(json, options);
|
|
}
|
|
/**
|
|
* Serialize the message to binary data.
|
|
*/
|
|
toBinary(options) {
|
|
const type = this.getType(), bin = type.runtime.bin, opt = bin.makeWriteOptions(options), writer = opt.writerFactory();
|
|
bin.writeMessage(this, writer, opt);
|
|
return writer.finish();
|
|
}
|
|
/**
|
|
* Serialize the message to a JSON value, a JavaScript value that can be
|
|
* passed to JSON.stringify().
|
|
*/
|
|
toJson(options) {
|
|
const type = this.getType(), json = type.runtime.json, opt = json.makeWriteOptions(options);
|
|
return json.writeMessage(this, opt);
|
|
}
|
|
/**
|
|
* Serialize the message to a JSON string.
|
|
*/
|
|
toJsonString(options) {
|
|
var _a;
|
|
const value = this.toJson(options);
|
|
return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);
|
|
}
|
|
/**
|
|
* Override for serialization behavior. This will be invoked when calling
|
|
* JSON.stringify on this message (i.e. JSON.stringify(msg)).
|
|
*
|
|
* Note that this will not serialize google.protobuf.Any with a packed
|
|
* message because the protobuf JSON format specifies that it needs to be
|
|
* unpacked, and this is only possible with a type registry to look up the
|
|
* message type. As a result, attempting to serialize a message with this
|
|
* type will throw an Error.
|
|
*
|
|
* This method is protected because you should not need to invoke it
|
|
* directly -- instead use JSON.stringify or toJsonString for
|
|
* stringified JSON. Alternatively, if actual JSON is desired, you should
|
|
* use toJson.
|
|
*/
|
|
toJSON() {
|
|
return this.toJson({
|
|
emitDefaultValues: true,
|
|
});
|
|
}
|
|
/**
|
|
* Retrieve the MessageType of this message - a singleton that represents
|
|
* the protobuf message declaration and provides metadata for reflection-
|
|
* based operations.
|
|
*/
|
|
getType() {
|
|
// Any class that extends Message _must_ provide a complete static
|
|
// implementation of MessageType.
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
return Object.getPrototypeOf(this).constructor;
|
|
}
|
|
}
|