|
| 1 | +import { Model, isDataModel, isDataSource } from '@zenstackhq/language/ast'; |
| 2 | +import { hasAttribute } from '@zenstackhq/sdk'; |
| 3 | +import { LangiumDocuments, ValidationAcceptor } from 'langium'; |
| 4 | +import { getAllDeclarationsFromImports, resolveImport, resolveTransitiveImports } from '../../utils/ast-utils'; |
1 | 5 | import { PLUGIN_MODULE_NAME, STD_LIB_MODULE_NAME } from '../constants';
|
2 |
| -import { isDataSource, Model } from '@zenstackhq/language/ast'; |
3 | 6 | import { AstValidator } from '../types';
|
4 |
| -import { LangiumDocuments, ValidationAcceptor } from 'langium'; |
5 | 7 | import { validateDuplicatedDeclarations } from './utils';
|
6 |
| -import { getAllDeclarationsFromImports, resolveImport, resolveTransitiveImports } from '../../utils/ast-utils'; |
7 | 8 |
|
8 | 9 | /**
|
9 | 10 | * Validates toplevel schema.
|
@@ -33,6 +34,12 @@ export default class SchemaValidator implements AstValidator<Model> {
|
33 | 34 | ) {
|
34 | 35 | this.validateDataSources(model, accept);
|
35 | 36 | }
|
| 37 | + |
| 38 | + // at most one `@@auth` model |
| 39 | + const authModels = model.declarations.filter((d) => isDataModel(d) && hasAttribute(d, '@@auth')); |
| 40 | + if (authModels.length > 1) { |
| 41 | + accept('error', 'Multiple `@@auth` models are not allowed', { node: authModels[1] }); |
| 42 | + } |
36 | 43 | }
|
37 | 44 |
|
38 | 45 | private validateDataSources(model: Model, accept: ValidationAcceptor) {
|
|
0 commit comments