mirror of
https://github.com/hexastack/hexabot
synced 2025-02-22 12:28:26 +00:00
feat: replace joi with zod is-pattern-list
This commit is contained in:
parent
a6d4f78c39
commit
7a8545e646
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright © 2024 Hexastack. All rights reserved.
|
||||
* Copyright © 2025 Hexastack. All rights reserved.
|
||||
*
|
||||
* Licensed under the GNU Affero General Public License v3.0 (AGPLv3) with the following additional terms:
|
||||
* 1. The name "Hexabot" is a trademark of Hexastack. You may not use this name in derivative works without express written permission.
|
||||
@ -12,62 +12,17 @@ import {
|
||||
ValidatorConstraint,
|
||||
ValidatorConstraintInterface,
|
||||
} from 'class-validator';
|
||||
import Joi from 'joi';
|
||||
|
||||
import { Pattern } from '../schemas/types/pattern';
|
||||
import { Pattern, patternSchema } from '../schemas/types/pattern';
|
||||
|
||||
export function isPatternList(patterns: Pattern[]) {
|
||||
return (
|
||||
Array.isArray(patterns) &&
|
||||
patterns.every((pattern) => {
|
||||
if (typeof pattern === 'string') {
|
||||
// Check if valid regex
|
||||
if (pattern.endsWith('/') && pattern.startsWith('/')) {
|
||||
try {
|
||||
new RegExp(pattern.slice(1, -1), 'gi');
|
||||
} catch (err) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
// Check if valid string (Equals/Like)
|
||||
return pattern !== '';
|
||||
} else if (Array.isArray(pattern)) {
|
||||
// Check if valid NLP pattern
|
||||
const nlpSchema = Joi.array()
|
||||
.items(
|
||||
Joi.object().keys({
|
||||
entity: Joi.string().required(),
|
||||
match: Joi.string().valid('entity', 'value').required(),
|
||||
value: Joi.string().required(),
|
||||
}),
|
||||
)
|
||||
.min(1);
|
||||
const nlpCheck = nlpSchema.validate(pattern);
|
||||
if (nlpCheck.error) {
|
||||
// console.log('Message validation failed! ', nlpCheck);
|
||||
}
|
||||
return !nlpCheck.error;
|
||||
} else if (typeof pattern === 'object') {
|
||||
// Invalid structure?
|
||||
const payloadSchema = Joi.object().keys({
|
||||
label: Joi.string().required(),
|
||||
value: Joi.any().required(),
|
||||
type: Joi.string(),
|
||||
});
|
||||
const payloadCheck = payloadSchema.validate(pattern);
|
||||
if (payloadCheck.error) {
|
||||
// console.log(
|
||||
// 'Message validation failed! ',
|
||||
// payloadCheck,
|
||||
// );
|
||||
}
|
||||
return !payloadCheck.error;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
})
|
||||
);
|
||||
patterns.every((pattern) => {
|
||||
const result = patternSchema.safeParse(pattern);
|
||||
if (!result.success) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return true;
|
||||
}
|
||||
|
||||
@ValidatorConstraint({ async: false })
|
||||
|
Loading…
Reference in New Issue
Block a user