|
3 | 3 | DataModelAttribute,
|
4 | 4 | DataModelField,
|
5 | 5 | DataModelFieldAttribute,
|
| 6 | + Enum, |
6 | 7 | Expression,
|
7 | 8 | MemberAccessExpr,
|
8 | 9 | Model,
|
@@ -39,6 +40,7 @@ import {
|
39 | 40 | getPrismaClientImportSpec,
|
40 | 41 | hasAttribute,
|
41 | 42 | hasValidationAttributes,
|
| 43 | + isEnumFieldReference, |
42 | 44 | isForeignKeyField,
|
43 | 45 | isFromStdlib,
|
44 | 46 | isFutureExpr,
|
@@ -87,7 +89,7 @@ export default class PolicyGenerator {
|
87 | 89 |
|
88 | 90 | // import enums
|
89 | 91 | const prismaImport = getPrismaClientImportSpec(model, output);
|
90 |
| - for (const e of model.declarations.filter((d) => isEnum(d))) { |
| 92 | + for (const e of model.declarations.filter((d) => isEnum(d) && this.isEnumReferenced(model, d))) { |
91 | 93 | sf.addImportDeclaration({
|
92 | 94 | namedImports: [{ name: e.name }],
|
93 | 95 | moduleSpecifier: prismaImport,
|
@@ -155,6 +157,20 @@ export default class PolicyGenerator {
|
155 | 157 | }
|
156 | 158 | }
|
157 | 159 |
|
| 160 | + private isEnumReferenced(model: Model, decl: Enum): unknown { |
| 161 | + return streamAllContents(model).some((node) => { |
| 162 | + if (isDataModelField(node) && node.type.reference?.ref === decl) { |
| 163 | + // referenced as field type |
| 164 | + return true; |
| 165 | + } |
| 166 | + if (isEnumFieldReference(node) && node.target.ref?.$container === decl) { |
| 167 | + // enum field is referenced |
| 168 | + return true; |
| 169 | + } |
| 170 | + return false; |
| 171 | + }); |
| 172 | + } |
| 173 | + |
158 | 174 | private getPolicyExpressions(target: DataModel | DataModelField, kind: PolicyKind, operation: PolicyOperationKind) {
|
159 | 175 | const attributes = target.attributes as (DataModelAttribute | DataModelFieldAttribute)[];
|
160 | 176 | const attrName = isDataModel(target) ? `@@${kind}` : `@${kind}`;
|
|
0 commit comments