@@ -15,7 +15,13 @@ import {
1515    isEnum , 
1616    isReferenceExpr , 
1717}  from  '@zenstackhq/language/ast' ; 
18- import  {  isDataModelFieldReference ,  isFutureExpr ,  isRelationshipField ,  resolved  }  from  '@zenstackhq/sdk' ; 
18+ import  { 
19+     isDataModelFieldReference , 
20+     isDelegateModel , 
21+     isFutureExpr , 
22+     isRelationshipField , 
23+     resolved , 
24+ }  from  '@zenstackhq/sdk' ; 
1925import  {  ValidationAcceptor ,  streamAst  }  from  'langium' ; 
2026import  pluralize  from  'pluralize' ; 
2127import  {  AstValidator  }  from  '../types' ; 
@@ -164,6 +170,31 @@ export default class AttributeApplicationValidator implements AstValidator<Attri
164170        } 
165171    } 
166172
173+     @check ( '@@unique' ) 
174+     private  _checkUnique ( attr : AttributeApplication ,  accept : ValidationAcceptor )  { 
175+         const  fields  =  attr . args [ 0 ] ?. value ; 
176+         if  ( fields  &&  isArrayExpr ( fields ) )  { 
177+             fields . items . forEach ( ( item )  =>  { 
178+                 if  ( ! isReferenceExpr ( item ) )  { 
179+                     accept ( 'error' ,  `Expecting a field reference` ,  {  node : item  } ) ; 
180+                     return ; 
181+                 } 
182+                 if  ( ! isDataModelField ( item . target . ref ) )  { 
183+                     accept ( 'error' ,  `Expecting a field reference` ,  {  node : item  } ) ; 
184+                     return ; 
185+                 } 
186+ 
187+                 if  ( item . target . ref . $container  !==  attr . $container  &&  isDelegateModel ( item . target . ref . $container ) )  { 
188+                     accept ( 'error' ,  `Cannot use fields inherited from a polymorphic base model in \`@@unique\`` ,  { 
189+                         node : item , 
190+                     } ) ; 
191+                 } 
192+             } ) ; 
193+         }  else  { 
194+             accept ( 'error' ,  `Expected an array of field references` ,  {  node : fields  } ) ; 
195+         } 
196+     } 
197+ 
167198    private  validatePolicyKinds ( 
168199        kind : string , 
169200        candidates : string [ ] , 
0 commit comments