Skip to content

Commit e41a927

Browse files
authored
fix: avoid reference unused enums in generated policy code (#1851)
1 parent 04184b9 commit e41a927

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

packages/schema/src/plugins/enhancer/policy/utils.ts

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getAttributeArg,
99
getAuthDecl,
1010
getDataModelAndTypeDefs,
11+
getDataModels,
1112
getEntityCheckerFunctionName,
1213
getIdFields,
1314
getLiteral,
@@ -537,16 +538,19 @@ export function generateNormalizedAuthRef(
537538
* Check if the given enum is referenced in the model
538539
*/
539540
export function isEnumReferenced(model: Model, decl: Enum): unknown {
540-
return streamAllContents(model).some((node) => {
541-
if (isDataModelField(node) && node.type.reference?.ref === decl) {
542-
// referenced as field type
543-
return true;
544-
}
545-
if (isEnumFieldReference(node) && node.target.ref?.$container === decl) {
546-
// enum field is referenced
547-
return true;
548-
}
549-
return false;
541+
const dataModels = getDataModels(model);
542+
return dataModels.some((dm) => {
543+
return streamAllContents(dm).some((node) => {
544+
if (isDataModelField(node) && node.type.reference?.ref === decl) {
545+
// referenced as field type
546+
return true;
547+
}
548+
if (isEnumFieldReference(node) && node.target.ref?.$container === decl) {
549+
// enum field is referenced
550+
return true;
551+
}
552+
return false;
553+
});
550554
});
551555
}
552556

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { loadSchema } from '@zenstackhq/testtools';
2+
3+
describe('issue 1835', () => {
4+
it('regression', async () => {
5+
await loadSchema(
6+
`
7+
enum Enum {
8+
SOME_VALUE
9+
ANOTHER_VALUE
10+
}
11+
12+
model Model {
13+
id String @id @default(cuid())
14+
value Enum
15+
@@ignore
16+
}
17+
18+
model AnotherModel {
19+
id String @id @default(cuid())
20+
}
21+
`,
22+
{
23+
provider: 'postgresql',
24+
pushDb: false,
25+
}
26+
);
27+
});
28+
});

0 commit comments

Comments
 (0)