Files
NapCatQQ/.pnpm-store/v3/files/f1/103504b48c28128d26836d749f2e0c26fee959793a582f2db6929d752e549f00870473503142e7470cfd02e19ec603b1f847c0aeb61ad8dc982ac41e4abdf2
T
TanTan e311ca3275
Build NapCat Artifacts / Type Check & Test (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:25:58 +08:00

57 lines
2.6 KiB
Plaintext

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TemplateLiteralFiniteError = void 0;
exports.IsTemplateLiteralExpressionFinite = IsTemplateLiteralExpressionFinite;
exports.IsTemplateLiteralFinite = IsTemplateLiteralFinite;
const parse_1 = require("./parse");
const index_1 = require("../error/index");
// ------------------------------------------------------------------
// TemplateLiteralFiniteError
// ------------------------------------------------------------------
class TemplateLiteralFiniteError extends index_1.TypeBoxError {
}
exports.TemplateLiteralFiniteError = TemplateLiteralFiniteError;
// ------------------------------------------------------------------
// IsTemplateLiteralFiniteCheck
// ------------------------------------------------------------------
// prettier-ignore
function IsNumberExpression(expression) {
return (expression.type === 'or' &&
expression.expr.length === 2 &&
expression.expr[0].type === 'const' &&
expression.expr[0].const === '0' &&
expression.expr[1].type === 'const' &&
expression.expr[1].const === '[1-9][0-9]*');
}
// prettier-ignore
function IsBooleanExpression(expression) {
return (expression.type === 'or' &&
expression.expr.length === 2 &&
expression.expr[0].type === 'const' &&
expression.expr[0].const === 'true' &&
expression.expr[1].type === 'const' &&
expression.expr[1].const === 'false');
}
// prettier-ignore
function IsStringExpression(expression) {
return expression.type === 'const' && expression.const === '.*';
}
// ------------------------------------------------------------------
// IsTemplateLiteralExpressionFinite
// ------------------------------------------------------------------
// prettier-ignore
function IsTemplateLiteralExpressionFinite(expression) {
return (IsNumberExpression(expression) || IsStringExpression(expression) ? false :
IsBooleanExpression(expression) ? true :
(expression.type === 'and') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :
(expression.type === 'or') ? expression.expr.every((expr) => IsTemplateLiteralExpressionFinite(expr)) :
(expression.type === 'const') ? true :
(() => { throw new TemplateLiteralFiniteError(`Unknown expression type`); })());
}
/** Returns true if this TemplateLiteral resolves to a finite set of values */
function IsTemplateLiteralFinite(schema) {
const expression = (0, parse_1.TemplateLiteralParseExact)(schema.pattern);
return IsTemplateLiteralExpressionFinite(expression);
}