From b00ecb22be19409b059bafb6a996614a95743d86 Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Sun, 23 Feb 2025 16:10:44 -0800 Subject: [PATCH] fix(zmodel): validate `@regex` regular expression patterns --- .../attribute-application-validator.ts | 15 +++++++++++++ .../validation/attribute-validation.test.ts | 22 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/packages/schema/src/language-server/validator/attribute-application-validator.ts b/packages/schema/src/language-server/validator/attribute-application-validator.ts index 0e1d8e885..b22a6f372 100644 --- a/packages/schema/src/language-server/validator/attribute-application-validator.ts +++ b/packages/schema/src/language-server/validator/attribute-application-validator.ts @@ -212,6 +212,21 @@ export default class AttributeApplicationValidator implements AstValidator { if (isDataModelFieldReference(node) && hasAttribute(node.target.ref as DataModelField, '@encrypted')) { diff --git a/packages/schema/tests/schema/validation/attribute-validation.test.ts b/packages/schema/tests/schema/validation/attribute-validation.test.ts index 0133f452c..3e0553ee2 100644 --- a/packages/schema/tests/schema/validation/attribute-validation.test.ts +++ b/packages/schema/tests/schema/validation/attribute-validation.test.ts @@ -1369,4 +1369,26 @@ describe('Attribute tests', () => { `) ).resolves.toContain(`attribute "@omit" cannot be used on type declaration fields`); }); + + it('validates regex', async () => { + await expect( + loadModelWithError(` + ${prelude} + model User { + id String @id + phone String @regex(id) + } + `) + ).resolves.toContain('Expecting a string literal'); + + await expect( + loadModelWithError(` + ${prelude} + model User { + id String @id + phone String @regex("^(\\+46|0)[0-9]{7,12}$") + } + `) + ).resolves.toContain('Invalid regular expression'); + }); });