@@ -109,80 +109,6 @@ export function mapBuiltinTypeToExpressionType(
109109 }
110110}
111111
112- /**
113- * Determines if the given attribute argument is assignable to the given attribute parameter
114- */
115- export function assignableToAttributeParam (
116- arg : AttributeArg ,
117- param : AttributeParam ,
118- attr : DataModelAttribute | DataModelFieldAttribute | InternalAttribute
119- ) : boolean {
120- const argResolvedType = arg . $resolvedType ;
121- if ( ! argResolvedType ) {
122- return false ;
123- }
124-
125- let dstType = param . type . type ;
126- let dstIsArray = param . type . array ;
127- const dstRef = param . type . reference ;
128-
129- if ( dstType === 'Any' && ! dstIsArray ) {
130- return true ;
131- }
132-
133- // destination is field reference or transitive field reference, check if
134- // argument is reference or array or reference
135- if ( dstType === 'FieldReference' || dstType === 'TransitiveFieldReference' ) {
136- if ( dstIsArray ) {
137- return (
138- isArrayExpr ( arg . value ) &&
139- ! arg . value . items . find ( ( item ) => ! isReferenceExpr ( item ) || ! isDataModelField ( item . target . ref ) )
140- ) ;
141- } else {
142- return isReferenceExpr ( arg . value ) && isDataModelField ( arg . value . target . ref ) ;
143- }
144- }
145-
146- if ( isEnum ( argResolvedType . decl ) ) {
147- // enum type
148-
149- let attrArgDeclType = dstRef ?. ref ;
150- if ( dstType === 'ContextType' && isDataModelField ( attr . $container ) && attr . $container ?. type ?. reference ) {
151- // attribute parameter type is ContextType, need to infer type from
152- // the attribute's container
153- attrArgDeclType = resolved ( attr . $container . type . reference ) ;
154- dstIsArray = attr . $container . type . array ;
155- }
156- return attrArgDeclType === argResolvedType . decl && dstIsArray === argResolvedType . array ;
157- } else if ( dstType ) {
158- // scalar type
159-
160- if ( typeof argResolvedType ?. decl !== 'string' ) {
161- // destination type is not a reference, so argument type must be a plain expression
162- return false ;
163- }
164-
165- if ( dstType === 'ContextType' ) {
166- // attribute parameter type is ContextType, need to infer type from
167- // the attribute's container
168- if ( isDataModelField ( attr . $container ) ) {
169- if ( ! attr . $container ?. type ?. type ) {
170- return false ;
171- }
172- dstType = mapBuiltinTypeToExpressionType ( attr . $container . type . type ) ;
173- dstIsArray = attr . $container . type . array ;
174- } else {
175- dstType = 'Any' ;
176- }
177- }
178-
179- return typeAssignable ( dstType , argResolvedType . decl , arg . value ) && dstIsArray === argResolvedType . array ;
180- } else {
181- // reference type
182- return ( dstRef ?. ref === argResolvedType . decl || dstType === 'Any' ) && dstIsArray === argResolvedType . array ;
183- }
184- }
185-
186112export function isAuthOrAuthMemberAccess ( expr : Expression ) : boolean {
187113 return isAuthInvocation ( expr ) || ( isMemberAccessExpr ( expr ) && isAuthOrAuthMemberAccess ( expr . operand ) ) ;
188114}
0 commit comments