segment-matcher
Version:
Segment Matcher - TypeScript version with dual ESM/CJS format support
130 lines (129 loc) • 4.21 kB
JavaScript
/**
* 模式令牌类
*
* 表示解析后的模式元素,包括字面量、类型化字面量、参数等。
* 每个令牌包含类型信息和相关的数据。
*
* @example
* ```typescript
* // 创建字面量令牌
* const literalToken = PatternToken.createLiteral('hello ');
*
* // 创建类型化字面量令牌
* const typedToken = PatternToken.createTypedLiteral('text', 'start');
*
* // 创建参数令牌
* const paramToken = PatternToken.createParameter('name', 'text', false);
*
* // 创建剩余参数令牌
* const restToken = PatternToken.createRestParameter('rest', 'text');
* ```
*/
export class PatternToken {
/**
* 构造函数
*
* @param type - 令牌类型
* @param options - 可选的令牌属性
*/
constructor(type, options = {}) {
this.type = type;
Object.assign(this, options);
}
/**
* 创建字面量令牌
*
* 用于表示模式中的普通文本,如空格、标点符号等。
* 这些字面量必须与输入文本完全匹配。
*
* @param value - 字面量值
* @returns 字面量令牌实例
*
* @example
* ```typescript
* const token = PatternToken.createLiteral('hello ');
* // token.type === 'literal'
* // token.value === 'hello '
* ```
*/
static createLiteral(value) {
return new PatternToken('literal', { value });
}
/**
* 创建类型化字面量令牌
*
* 用于表示特定类型的消息段,如表情、图片、@用户等。
* 支持各种消息段类型。
*
* @param segmentType - 消息段类型(text、face、image、at 等)
* @param value - 期望的值
* @returns 类型化字面量令牌实例
*
* @example
* ```typescript
* // 文本类型化字面量
* const textToken = PatternToken.createTypedLiteral('text', 'start');
*
* // 表情类型化字面量
* const faceToken = PatternToken.createTypedLiteral('face', '1');
*
* // 图片类型化字面量
* const imageToken = PatternToken.createTypedLiteral('image', 'avatar.png');
* ```
*/
static createTypedLiteral(segmentType, value) {
return new PatternToken('typed_literal', { segmentType, value });
}
/**
* 创建参数令牌
*
* 用于表示模式中的参数,可以是必需参数或可选参数。
* 支持默认值设置。
*
* @param name - 参数名称
* @param dataType - 数据类型(text、number、face、image 等)
* @param optional - 是否为可选参数,默认为 false
* @param defaultValue - 默认值(仅用于可选参数)
* @returns 参数令牌实例
*
* @example
* ```typescript
* // 必需参数
* const requiredToken = PatternToken.createParameter('name', 'text', false);
*
* // 可选参数
* const optionalToken = PatternToken.createParameter('count', 'number', true, 1);
*
* // 带默认值的可选参数
* const defaultToken = PatternToken.createParameter('emoji', 'face', true, { id: 1 });
* ```
*/
static createParameter(name, dataType, optional = false, defaultValue) {
return new PatternToken('parameter', { name, dataType, optional, defaultValue });
}
/**
* 创建剩余参数令牌
*
* 用于收集模式中剩余的所有消息段或指定类型的消息段。
* 支持类型限制。
*
* @param name - 参数名称
* @param dataType - 数据类型限制(可选,null 表示收集所有类型)
* @returns 剩余参数令牌实例
*
* @example
* ```typescript
* // 收集所有剩余消息段
* const allToken = PatternToken.createRestParameter('rest', null);
*
* // 只收集表情消息段
* const faceToken = PatternToken.createRestParameter('faces', 'face');
*
* // 只收集文本消息段
* const textToken = PatternToken.createRestParameter('messages', 'text');
* ```
*/
static createRestParameter(name, dataType) {
return new PatternToken('rest_parameter', { name, dataType });
}
}