Merge pull request #671 from Hexastack/feat/zod-pattern

Feat: zod pattern
This commit is contained in:
Med Marrouchi 2025-02-03 13:43:17 +01:00 committed by GitHub
commit 4fd5e7bf9c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

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>;