rocketmq-client-nodejs
Version:
RocketMQ Node.js Client
191 lines • 12 kB
JavaScript
;
/**
* 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.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.OffsetOption = exports.OffsetType = void 0;
/**
* OffsetOption type enum.
*/
var OffsetType;
(function (OffsetType) {
OffsetType[OffsetType["POLICY"] = 0] = "POLICY";
OffsetType[OffsetType["OFFSET"] = 1] = "OFFSET";
OffsetType[OffsetType["TAIL_N"] = 2] = "TAIL_N";
OffsetType[OffsetType["TIMESTAMP"] = 3] = "TIMESTAMP";
})(OffsetType || (exports.OffsetType = OffsetType = {}));
/**
* ProtoBuf OffsetOption type.
*/
const definition_pb_1 = require("../../proto/apache/rocketmq/v2/definition_pb");
/**
* OffsetOption for specifying consume from offset.
*
* <p>OffsetOption is used to specify the starting point for message consumption.
* It supports various policies and custom offsets.</p>
*/
class OffsetOption {
/** Policy constant: last offset */
static POLICY_LAST_VALUE = BigInt(0);
/** Policy constant: min offset */
static POLICY_MIN_VALUE = BigInt(1);
/** Policy constant: max offset */
static POLICY_MAX_VALUE = BigInt(2);
/** Predefined option: LAST_OFFSET */
static LAST_OFFSET = new OffsetOption(OffsetType.POLICY, OffsetOption.POLICY_LAST_VALUE);
/** Predefined option: MIN_OFFSET */
static MIN_OFFSET = new OffsetOption(OffsetType.POLICY, OffsetOption.POLICY_MIN_VALUE);
/** Predefined option: MAX_OFFSET */
static MAX_OFFSET = new OffsetOption(OffsetType.POLICY, OffsetOption.POLICY_MAX_VALUE);
type;
value;
constructor(type, value) {
this.type = type;
this.value = value;
}
/**
* Create an OffsetOption from a specific offset.
*
* @param offset - The offset value (must be >= 0)
* @return OffsetOption instance
* @throws Error if offset is negative
*/
static ofOffset(offset) {
const value = typeof offset === 'number' ? BigInt(offset) : offset;
if (value < BigInt(0)) {
throw new Error('offset must be greater than or equal to 0');
}
return new OffsetOption(OffsetType.OFFSET, value);
}
/**
* Create an OffsetOption from tail N messages.
*
* @param tailN - Number of messages from the tail (must be >= 0)
* @return OffsetOption instance
* @throws Error if tailN is negative
*/
static ofTailN(tailN) {
const value = typeof tailN === 'number' ? BigInt(tailN) : tailN;
if (value < BigInt(0)) {
throw new Error('tailN must be greater than or equal to 0');
}
return new OffsetOption(OffsetType.TAIL_N, value);
}
/**
* Create an OffsetOption from a timestamp.
*
* @param timestamp - Unix timestamp in milliseconds (must be >= 0)
* @return OffsetOption instance
* @throws Error if timestamp is negative
*/
static ofTimestamp(timestamp) {
const value = typeof timestamp === 'number' ? BigInt(timestamp) : timestamp;
if (value < BigInt(0)) {
throw new Error('timestamp must be greater than or equal to 0');
}
return new OffsetOption(OffsetType.TIMESTAMP, value);
}
/**
* Get the type of this OffsetOption.
*
* @return OffsetType
*/
getType() {
return this.type;
}
/**
* Get the value of this OffsetOption.
*
* @return Value as bigint
*/
getValue() {
return this.value;
}
/**
* Returns a string representation of this OffsetOption.
*
* @return String representation
*/
toString() {
return `OffsetOption{type=${OffsetType[this.type]}, value=${this.value}}`;
}
/**
* Validate that a bigint value is within the safe number range.
*
* @param value - The bigint value to validate
* @throws Error if value is out of safe number range
*/
validateSafeNumberRange(value) {
if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {
throw new Error(`Value ${value} is out of safe number range`);
}
}
/**
* Convert this OffsetOption to ProtoBuf OffsetOption.
*
* @return ProtoBuf OffsetOption instance
*/
toProtobuf() {
const proto = new definition_pb_1.OffsetOption();
switch (this.type) {
case OffsetType.POLICY: {
// Map our policy values to ProtoBuf Policy enum
// POLICY_LAST_VALUE (0) -> Policy.LAST (0)
// POLICY_MIN_VALUE (1) -> Policy.MIN (1)
// POLICY_MAX_VALUE (2) -> Policy.MAX (2)
this.validateSafeNumberRange(this.value);
proto.setPolicy(Number(this.value));
break;
}
case OffsetType.OFFSET: {
this.validateSafeNumberRange(this.value);
proto.setOffset(Number(this.value));
break;
}
case OffsetType.TAIL_N: {
this.validateSafeNumberRange(this.value);
proto.setTailN(Number(this.value));
break;
}
case OffsetType.TIMESTAMP: {
this.validateSafeNumberRange(this.value);
proto.setTimestamp(Number(this.value));
break;
}
default:
throw new Error(`Unknown OffsetType: ${this.type}`);
}
return proto;
}
equals(other) {
if (this === other)
return true;
if (!other)
return false;
return this.type === other.type && this.value === other.value;
}
hashCode() {
let hash = 17;
// eslint-disable-next-line no-bitwise
hash = (hash * 31 + this.type) | 0;
const valueNum = Number(this.value);
// eslint-disable-next-line no-bitwise
hash = (hash * 31 + valueNum) | 0;
return hash;
}
}
exports.OffsetOption = OffsetOption;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2Zmc2V0T3B0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnN1bWVyL09mZnNldE9wdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOzs7QUFFSDs7R0FFRztBQUNILElBQVksVUFLWDtBQUxELFdBQVksVUFBVTtJQUNwQiwrQ0FBVSxDQUFBO0lBQ1YsK0NBQVUsQ0FBQTtJQUNWLCtDQUFVLENBQUE7SUFDVixxREFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLFVBQVUsMEJBQVYsVUFBVSxRQUtyQjtBQUVEOztHQUVHO0FBQ0gsZ0ZBQWlHO0FBRWpHOzs7OztHQUtHO0FBQ0gsTUFBYSxZQUFZO0lBQ3ZCLG1DQUFtQztJQUNuQyxNQUFNLENBQVUsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlDLGtDQUFrQztJQUNsQyxNQUFNLENBQVUsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdDLGtDQUFrQztJQUNsQyxNQUFNLENBQVUsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTdDLHFDQUFxQztJQUNyQyxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksWUFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFbEcsb0NBQW9DO0lBQ3BDLE1BQU0sQ0FBVSxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVoRyxvQ0FBb0M7SUFDcEMsTUFBTSxDQUFVLFVBQVUsR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRS9FLElBQUksQ0FBYTtJQUNqQixLQUFLLENBQVM7SUFFL0IsWUFBb0IsSUFBZ0Is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