415gotit
This commit is contained in:
76
node_modules/@msgpack/msgpack/dist.cjs/ExtensionCodec.cjs
generated
vendored
Normal file
76
node_modules/@msgpack/msgpack/dist.cjs/ExtensionCodec.cjs
generated
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
"use strict";
|
||||
// ExtensionCodec to handle MessagePack extensions
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ExtensionCodec = void 0;
|
||||
const ExtData_ts_1 = require("./ExtData.cjs");;
|
||||
const timestamp_ts_1 = require("./timestamp.cjs");;
|
||||
class ExtensionCodec {
|
||||
static defaultCodec = new ExtensionCodec();
|
||||
// ensures ExtensionCodecType<X> matches ExtensionCodec<X>
|
||||
// this will make type errors a lot more clear
|
||||
// eslint-disable-next-line @typescript-eslint/naming-convention
|
||||
__brand;
|
||||
// built-in extensions
|
||||
builtInEncoders = [];
|
||||
builtInDecoders = [];
|
||||
// custom extensions
|
||||
encoders = [];
|
||||
decoders = [];
|
||||
constructor() {
|
||||
this.register(timestamp_ts_1.timestampExtension);
|
||||
}
|
||||
register({ type, encode, decode, }) {
|
||||
if (type >= 0) {
|
||||
// custom extensions
|
||||
this.encoders[type] = encode;
|
||||
this.decoders[type] = decode;
|
||||
}
|
||||
else {
|
||||
// built-in extensions
|
||||
const index = -1 - type;
|
||||
this.builtInEncoders[index] = encode;
|
||||
this.builtInDecoders[index] = decode;
|
||||
}
|
||||
}
|
||||
tryToEncode(object, context) {
|
||||
// built-in extensions
|
||||
for (let i = 0; i < this.builtInEncoders.length; i++) {
|
||||
const encodeExt = this.builtInEncoders[i];
|
||||
if (encodeExt != null) {
|
||||
const data = encodeExt(object, context);
|
||||
if (data != null) {
|
||||
const type = -1 - i;
|
||||
return new ExtData_ts_1.ExtData(type, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
// custom extensions
|
||||
for (let i = 0; i < this.encoders.length; i++) {
|
||||
const encodeExt = this.encoders[i];
|
||||
if (encodeExt != null) {
|
||||
const data = encodeExt(object, context);
|
||||
if (data != null) {
|
||||
const type = i;
|
||||
return new ExtData_ts_1.ExtData(type, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (object instanceof ExtData_ts_1.ExtData) {
|
||||
// to keep ExtData as is
|
||||
return object;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
decode(data, type, context) {
|
||||
const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];
|
||||
if (decodeExt) {
|
||||
return decodeExt(data, type, context);
|
||||
}
|
||||
else {
|
||||
// decode() does not fail, returns ExtData instead.
|
||||
return new ExtData_ts_1.ExtData(type, data);
|
||||
}
|
||||
}
|
||||
}
|
||||
exports.ExtensionCodec = ExtensionCodec;
|
||||
//# sourceMappingURL=ExtensionCodec.cjs.map
|
||||
Reference in New Issue
Block a user