feat: zod pattern

This commit is contained in:
abdou6666 2025-02-03 11:09:23 +01:00
parent 22046d57e9
commit aa8c54c511

View File

@ -1,29 +1,42 @@
/*
* 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.
* 2. All derivative works must include clear attribution to the original creator and software, Hexastack and Hexabot, in a prominent location (e.g., in the software's "About" section, documentation, and README file).
*/
import { z } from 'zod';
import { PayloadType } from './message';
export interface PayloadPattern {
label: string;
value: string;
// @todo : rename 'attachment' to 'attachments'
type?: PayloadType;
}
export const PayloadPatternSchema = z.object({
label: z.string(),
value: z.string(),
type: z.nativeEnum(PayloadType).optional(),
});
export type NlpPattern =
| {
entity: string;
match: 'entity';
}
| {
entity: string;
match: 'value';
value: string;
};
export type PayloadPattern = z.infer<typeof PayloadPatternSchema>;
export type Pattern = string | RegExp | PayloadPattern | NlpPattern[];
export const nlpPatternSchema = z.discriminatedUnion('match', [
z.object({
entity: z.string(),
match: z.literal('entity'),
}),
z.object({
entity: z.string(),
match: z.literal('value'),
value: z.string(),
}),
]);
export type NlpPattern = z.infer<typeof nlpPatternSchema>;
export const PatternSchema = z.union([
z.string(),
z.instanceof(RegExp),
PayloadPatternSchema,
z.array(nlpPatternSchema),
]);
export type Pattern = z.infer<typeof PatternSchema>;