(model: DataModel)
| 269 | * Gets `@@unique` fields declared at the data model level (including search in base models) |
| 270 | */ |
| 271 | export function getModelUniqueFields(model: DataModel) { |
| 272 | const modelsToCheck = [model, ...getRecursiveBases(model)]; |
| 273 | |
| 274 | for (const modelToCheck of modelsToCheck) { |
| 275 | const allAttributes = getAllAttributes(modelToCheck); |
| 276 | const uniqueAttr = allAttributes.find((attr) => attr.decl.$refText === '@@unique'); |
| 277 | if (!uniqueAttr) { |
| 278 | continue; |
| 279 | } |
| 280 | const fieldsArg = uniqueAttr.args.find((a) => a.$resolvedParam?.name === 'fields'); |
| 281 | if (!fieldsArg || !isArrayExpr(fieldsArg.value)) { |
| 282 | continue; |
| 283 | } |
| 284 | |
| 285 | return fieldsArg.value.items |
| 286 | .filter((item): item is ReferenceExpr => isReferenceExpr(item)) |
| 287 | .map((item) => resolved(item.target) as DataField); |
| 288 | } |
| 289 | |
| 290 | return []; |
| 291 | } |
| 292 | |
| 293 | /** |
| 294 | * Gets lists of unique fields declared at the data model level |
no test coverage detected