@cerbos/orm-prisma 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js CHANGED
@@ -240,7 +240,16 @@ function createScopedMapper(collectionPath, variableName, fullMapper) {
240
240
  * Builds a Prisma filter from a Cerbos expression.
241
241
  */
242
242
  function buildPrismaFilterFromCerbosExpression(expression, mapper) {
243
- // Validate expression structure
243
+ // A bare named operand represents a boolean field reference (e.g. `R.attr.booleanAttr`)
244
+ if (isNamedOperand(expression)) {
245
+ const { path, relations } = resolveFieldReference(expression.name, mapper);
246
+ const fieldName = getLeafField(path);
247
+ const fieldFilter = { [fieldName]: { equals: true } };
248
+ if (relations && relations.length > 0) {
249
+ return buildNestedRelationFilter(relations, fieldFilter);
250
+ }
251
+ return fieldFilter;
252
+ }
244
253
  if (!isOperatorOperand(expression)) {
245
254
  throw new Error("Invalid Cerbos expression structure");
246
255
  }
@@ -260,6 +269,13 @@ function buildPrismaFilterFromCerbosExpression(expression, mapper) {
260
269
  if (!operand) {
261
270
  throw new Error("not operator requires an operand");
262
271
  }
272
+ if (isNamedOperand(operand)) {
273
+ const { path, relations } = resolveFieldReference(operand.name, mapper);
274
+ if (!relations || relations.length === 0) {
275
+ const fieldName = getLeafField(path);
276
+ return { [fieldName]: { equals: false } };
277
+ }
278
+ }
263
279
  return {
264
280
  NOT: buildPrismaFilterFromCerbosExpression(operand, mapper),
265
281
  };
@@ -303,6 +319,40 @@ function buildPrismaFilterFromCerbosExpression(expression, mapper) {
303
319
  throw new Error(`Unsupported operator: ${operator}`);
304
320
  }
305
321
  }
322
+ function handleSizeComparison(operator, sizeOperand, valueOperand, mapper) {
323
+ const collectionOperand = sizeOperand.operands[0];
324
+ if (!collectionOperand || !isNamedOperand(collectionOperand)) {
325
+ throw new Error("size operator requires a named collection operand");
326
+ }
327
+ if (!isValueOperand(valueOperand)) {
328
+ throw new Error("size comparison requires a numeric value operand");
329
+ }
330
+ const count = valueOperand.value;
331
+ if (typeof count !== "number") {
332
+ throw new Error("size comparison requires a numeric value");
333
+ }
334
+ const isNonEmpty = (operator === "gt" && count === 0) || (operator === "ge" && count === 1);
335
+ const isEmpty = (operator === "eq" && count === 0) ||
336
+ (operator === "lt" && count === 1) ||
337
+ (operator === "le" && count === 0);
338
+ if (!isNonEmpty && !isEmpty) {
339
+ throw new Error(`Unsupported size comparison: size(...) ${operator} ${count}`);
340
+ }
341
+ const { relations } = resolveFieldReference(collectionOperand.name, mapper);
342
+ if (!relations || relations.length === 0) {
343
+ throw new Error("size operator requires a relation mapping");
344
+ }
345
+ const deepest = relations[relations.length - 1];
346
+ if (!deepest) {
347
+ throw new Error("size operator requires a relation mapping");
348
+ }
349
+ const prismaOp = isNonEmpty ? "some" : "none";
350
+ const leafFilter = { [deepest.name]: { [prismaOp]: {} } };
351
+ if (relations.length === 1) {
352
+ return leafFilter;
353
+ }
354
+ return buildNestedRelationFilter(relations.slice(0, -1), leafFilter);
355
+ }
306
356
  /**
307
357
  * Helper function to process relational operators (eq, ne, lt, etc.)
308
358
  */
@@ -324,6 +374,9 @@ function handleRelationalOperator(operator, operands, mapper) {
324
374
  const rightOperand = operands.find((o) => o !== leftOperand);
325
375
  if (!rightOperand)
326
376
  throw new Error("No valid right operand found");
377
+ if (isOperatorOperand(leftOperand) && leftOperand.operator === "size") {
378
+ return handleSizeComparison(operator, leftOperand, rightOperand, mapper);
379
+ }
327
380
  const left = resolveOperand(leftOperand, mapper);
328
381
  const right = resolveOperand(rightOperand, mapper);
329
382
  if (isResolvedFieldReference(left)) {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cerbos/orm-prisma",
3
- "version": "3.1.0",
3
+ "version": "3.1.1",
4
4
  "homepage": "https://cerbos.dev",
5
5
  "description": "Prisma adapter for Cerbos query plans",
6
6
  "repository": {
@@ -38,7 +38,6 @@
38
38
  "clean": "rimraf lib",
39
39
  "build": "tsc --build",
40
40
  "prepare": "npm run build",
41
- "prepublishOnly": "npm test",
42
41
  "version": "git add -A src",
43
42
  "prisma:generate": "bash scripts/generate-clients.sh",
44
43
  "test": "npm run test:v7",
@@ -70,8 +69,8 @@
70
69
  "@prisma/client": "^5.0.0 || ^6.0.0 || ^7.0.0"
71
70
  },
72
71
  "dependencies": {
73
- "@cerbos/core": "^0.26.0",
74
- "@cerbos/grpc": "^0.23.0"
72
+ "@cerbos/core": "^0.27.0",
73
+ "@cerbos/grpc": "^0.24.0"
75
74
  },
76
75
  "keywords": [
77
76
  "cerbos",
@@ -17,8 +17,8 @@ import type * as Prisma from "./prismaNamespace.js"
17
17
 
18
18
  const config: runtime.GetPrismaClientConfig = {
19
19
  "previewFeatures": [],
20
- "clientVersion": "7.2.0",
21
- "engineVersion": "0c8ef2ce45c83248ab3df073180d5eda9e8be7a3",
20
+ "clientVersion": "7.3.0",
21
+ "engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735",
22
22
  "activeProvider": "sqlite",
23
23
  "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\ngenerator client {\n provider = \"prisma-client\" // or `prisma-client-js`\n output = \"../src/generated/prisma\"\n engineType = \"client\" // enable Prisma ORM without Rust\n moduleFormat = \"cjs\"\n}\n\ndatasource db {\n provider = \"sqlite\"\n}\n\nmodel Resource {\n id String @id @default(cuid())\n aString String\n aNumber Int\n aBool Boolean\n ownedBy User[]\n createdBy User @relation(fields: [creatorId], references: [id], name: \"creator\")\n creatorId String\n nested NestedResource @relation(fields: [nestedResourceId], references: [id])\n nestedResourceId String\n tags Tag[] // Add many-to-many relationship\n aOptionalString String?\n categories Category[] // Add categories relation\n}\n\nmodel User {\n id String @id @default(cuid())\n aString String\n aNumber Int\n aBool Boolean\n resources Resource[]\n createdResources Resource[] @relation(name: \"creator\")\n}\n\nmodel NestedResource {\n id String @id @default(cuid())\n aString String\n aNumber Int\n aBool Boolean\n aOptionalString String?\n\n Resource Resource[]\n nextlevel NextLevelNestedResource @relation(fields: [nextLevelNestedResourceId], references: [id])\n nextLevelNestedResourceId String\n}\n\nmodel NextLevelNestedResource {\n id String @id @default(cuid())\n aString String\n aNumber Int\n aBool Boolean\n NestedResource NestedResource[]\n}\n\nmodel Tag {\n id String @id @default(cuid())\n name String @unique\n resources Resource[]\n}\n\n// Add new models for nested many-to-many relations\nmodel Category {\n id String @id @default(cuid())\n name String @unique\n resources Resource[]\n subCategories SubCategory[]\n}\n\nmodel SubCategory {\n id String @id @default(cuid())\n name String @unique\n categories Category[]\n labels Label[]\n}\n\nmodel Label {\n id String @id @default(cuid())\n name String @unique\n subCategories SubCategory[]\n}\n",
24
24
  "runtimeDataModel": {
@@ -37,12 +37,14 @@ async function decodeBase64AsWasm(wasmBase64: string): Promise<WebAssembly.Modul
37
37
  }
38
38
 
39
39
  config.compilerWasm = {
40
- getRuntime: async () => await import("@prisma/client/runtime/query_compiler_bg.sqlite.js"),
40
+ getRuntime: async () => await import("@prisma/client/runtime/query_compiler_fast_bg.sqlite.js"),
41
41
 
42
42
  getQueryCompilerWasmModule: async () => {
43
- const { wasm } = await import("@prisma/client/runtime/query_compiler_bg.sqlite.wasm-base64.js")
43
+ const { wasm } = await import("@prisma/client/runtime/query_compiler_fast_bg.sqlite.wasm-base64.js")
44
44
  return await decodeBase64AsWasm(wasm)
45
- }
45
+ },
46
+
47
+ importName: "./query_compiler_fast_bg.js"
46
48
  }
47
49
 
48
50
 
@@ -80,12 +80,12 @@ export type PrismaVersion = {
80
80
  }
81
81
 
82
82
  /**
83
- * Prisma Client JS version: 7.2.0
84
- * Query Engine version: 0c8ef2ce45c83248ab3df073180d5eda9e8be7a3
83
+ * Prisma Client JS version: 7.3.0
84
+ * Query Engine version: 9d6ad21cbbceab97458517b147a6a09ff43aa735
85
85
  */
86
86
  export const prismaVersion: PrismaVersion = {
87
- client: "7.2.0",
88
- engine: "0c8ef2ce45c83248ab3df073180d5eda9e8be7a3"
87
+ client: "7.3.0",
88
+ engine: "9d6ad21cbbceab97458517b147a6a09ff43aa735"
89
89
  }
90
90
 
91
91
  /**
@@ -67,9 +67,9 @@ export type ModelName = (typeof ModelName)[keyof typeof ModelName]
67
67
  * Enums
68
68
  */
69
69
 
70
- export const TransactionIsolationLevel = {
70
+ export const TransactionIsolationLevel = runtime.makeStrictEnum({
71
71
  Serializable: 'Serializable'
72
- } as const
72
+ } as const)
73
73
 
74
74
  export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]
75
75
 
package/src/index.test.ts CHANGED
@@ -540,6 +540,457 @@ describe("Field Operations", () => {
540
540
  });
541
541
  });
542
542
 
543
+ describe("Bare Boolean Tests", () => {
544
+ test("conditional - bare boolean true (no value operand)", () => {
545
+ // #given
546
+ const queryPlan = createConditionalPlan({
547
+ name: "request.resource.attr.aBool",
548
+ });
549
+
550
+ // #when
551
+ const result = queryPlanToPrisma({
552
+ queryPlan,
553
+ mapper: {
554
+ "request.resource.attr.aBool": { field: "aBool" },
555
+ },
556
+ });
557
+
558
+ // #then
559
+ expect(result).toStrictEqual({
560
+ kind: PlanKind.CONDITIONAL,
561
+ filters: { aBool: { equals: true } },
562
+ });
563
+ });
564
+
565
+ test("conditional - bare boolean negated (not with single named operand)", () => {
566
+ // #given
567
+ const queryPlan = createConditionalPlan({
568
+ operator: "not",
569
+ operands: [{ name: "request.resource.attr.aBool" }],
570
+ });
571
+
572
+ // #when
573
+ const result = queryPlanToPrisma({
574
+ queryPlan,
575
+ mapper: {
576
+ "request.resource.attr.aBool": { field: "aBool" },
577
+ },
578
+ });
579
+
580
+ // #then
581
+ expect(result).toStrictEqual({
582
+ kind: PlanKind.CONDITIONAL,
583
+ filters: { aBool: { equals: false } },
584
+ });
585
+ });
586
+
587
+ test("conditional - bare boolean without mapper", () => {
588
+ // #given
589
+ const queryPlan = createConditionalPlan({
590
+ name: "request.resource.attr.aBool",
591
+ });
592
+
593
+ // #when
594
+ const result = queryPlanToPrisma({ queryPlan });
595
+
596
+ // #then
597
+ expect(result).toStrictEqual({
598
+ kind: PlanKind.CONDITIONAL,
599
+ filters: { "request.resource.attr.aBool": { equals: true } },
600
+ });
601
+ });
602
+
603
+ test("conditional - negated bare boolean without mapper", () => {
604
+ // #given
605
+ const queryPlan = createConditionalPlan({
606
+ operator: "not",
607
+ operands: [{ name: "request.resource.attr.aBool" }],
608
+ });
609
+
610
+ // #when
611
+ const result = queryPlanToPrisma({ queryPlan });
612
+
613
+ // #then
614
+ expect(result).toStrictEqual({
615
+ kind: PlanKind.CONDITIONAL,
616
+ filters: { "request.resource.attr.aBool": { equals: false } },
617
+ });
618
+ });
619
+
620
+ test("conditional - bare boolean inside AND", () => {
621
+ // #given
622
+ const queryPlan = createConditionalPlan({
623
+ operator: "and",
624
+ operands: [
625
+ { name: "request.resource.attr.aBool" },
626
+ {
627
+ operator: "eq",
628
+ operands: [
629
+ { name: "request.resource.attr.aString" },
630
+ { value: "string" },
631
+ ],
632
+ },
633
+ ],
634
+ });
635
+
636
+ // #when
637
+ const result = queryPlanToPrisma({
638
+ queryPlan,
639
+ mapper: {
640
+ "request.resource.attr.aBool": { field: "aBool" },
641
+ "request.resource.attr.aString": { field: "aString" },
642
+ },
643
+ });
644
+
645
+ // #then
646
+ expect(result).toStrictEqual({
647
+ kind: PlanKind.CONDITIONAL,
648
+ filters: {
649
+ AND: [
650
+ { aBool: { equals: true } },
651
+ { aString: { equals: "string" } },
652
+ ],
653
+ },
654
+ });
655
+ });
656
+
657
+ test("conditional - bare boolean inside OR", () => {
658
+ // #given
659
+ const queryPlan = createConditionalPlan({
660
+ operator: "or",
661
+ operands: [
662
+ { name: "request.resource.attr.aBool" },
663
+ {
664
+ operator: "eq",
665
+ operands: [
666
+ { name: "request.resource.attr.aNumber" },
667
+ { value: 1 },
668
+ ],
669
+ },
670
+ ],
671
+ });
672
+
673
+ // #when
674
+ const result = queryPlanToPrisma({
675
+ queryPlan,
676
+ mapper: {
677
+ "request.resource.attr.aBool": { field: "aBool" },
678
+ "request.resource.attr.aNumber": { field: "aNumber" },
679
+ },
680
+ });
681
+
682
+ // #then
683
+ expect(result).toStrictEqual({
684
+ kind: PlanKind.CONDITIONAL,
685
+ filters: {
686
+ OR: [
687
+ { aBool: { equals: true } },
688
+ { aNumber: { equals: 1 } },
689
+ ],
690
+ },
691
+ });
692
+ });
693
+
694
+ test("conditional - double negation bare boolean", () => {
695
+ // #given
696
+ const queryPlan = createConditionalPlan({
697
+ operator: "not",
698
+ operands: [
699
+ {
700
+ operator: "not",
701
+ operands: [{ name: "request.resource.attr.aBool" }],
702
+ },
703
+ ],
704
+ });
705
+
706
+ // #when
707
+ const result = queryPlanToPrisma({
708
+ queryPlan,
709
+ mapper: {
710
+ "request.resource.attr.aBool": { field: "aBool" },
711
+ },
712
+ });
713
+
714
+ // #then
715
+ expect(result).toStrictEqual({
716
+ kind: PlanKind.CONDITIONAL,
717
+ filters: { NOT: { aBool: { equals: false } } },
718
+ });
719
+ });
720
+
721
+ test("conditional - bare boolean with relation", () => {
722
+ // #given
723
+ const queryPlan = createConditionalPlan({
724
+ name: "request.resource.attr.nested.aBool",
725
+ });
726
+
727
+ // #when
728
+ const result = queryPlanToPrisma({
729
+ queryPlan,
730
+ mapper: {
731
+ "request.resource.attr.nested": {
732
+ relation: {
733
+ name: "nestedResource",
734
+ type: "one",
735
+ },
736
+ },
737
+ "request.resource.attr.nested.aBool": {
738
+ relation: {
739
+ name: "nestedResource",
740
+ type: "one",
741
+ },
742
+ field: "aBool",
743
+ },
744
+ },
745
+ });
746
+
747
+ // #then
748
+ expect(result).toStrictEqual({
749
+ kind: PlanKind.CONDITIONAL,
750
+ filters: {
751
+ nestedResource: { is: { aBool: { equals: true } } },
752
+ },
753
+ });
754
+ });
755
+
756
+ test("conditional - negated bare boolean with relation", () => {
757
+ // #given
758
+ const queryPlan = createConditionalPlan({
759
+ operator: "not",
760
+ operands: [{ name: "request.resource.attr.nested.aBool" }],
761
+ });
762
+
763
+ // #when
764
+ const result = queryPlanToPrisma({
765
+ queryPlan,
766
+ mapper: {
767
+ "request.resource.attr.nested": {
768
+ relation: {
769
+ name: "nestedResource",
770
+ type: "one",
771
+ },
772
+ },
773
+ "request.resource.attr.nested.aBool": {
774
+ relation: {
775
+ name: "nestedResource",
776
+ type: "one",
777
+ },
778
+ field: "aBool",
779
+ },
780
+ },
781
+ });
782
+
783
+ // #then
784
+ expect(result).toStrictEqual({
785
+ kind: PlanKind.CONDITIONAL,
786
+ filters: {
787
+ NOT: { nestedResource: { is: { aBool: { equals: true } } } },
788
+ },
789
+ });
790
+ });
791
+
792
+ test("conditional - negated bare boolean with many relation", () => {
793
+ // #given
794
+ const queryPlan = createConditionalPlan({
795
+ operator: "not",
796
+ operands: [{ name: "request.resource.attr.tags.active" }],
797
+ });
798
+
799
+ // #when
800
+ const result = queryPlanToPrisma({
801
+ queryPlan,
802
+ mapper: {
803
+ "request.resource.attr.tags.active": {
804
+ relation: {
805
+ name: "tags",
806
+ type: "many",
807
+ },
808
+ field: "active",
809
+ },
810
+ },
811
+ });
812
+
813
+ // #then — must be NOT { some { equals: true } }, not some { equals: false }
814
+ expect(result).toStrictEqual({
815
+ kind: PlanKind.CONDITIONAL,
816
+ filters: {
817
+ NOT: { tags: { some: { active: { equals: true } } } },
818
+ },
819
+ });
820
+ });
821
+
822
+ test("conditional - bare boolean via cerbos policy", async () => {
823
+ const queryPlan = await cerbos.planResources({
824
+ principal: { id: "user1", roles: ["USER"] },
825
+ resource: { kind: "resource" },
826
+ action: "bare-bool",
827
+ });
828
+
829
+ expect(queryPlan.kind).toEqual(PlanKind.CONDITIONAL);
830
+ expect(
831
+ (queryPlan as PlanResourcesConditionalResponse).condition
832
+ ).toEqual({ name: "request.resource.attr.aBool" });
833
+
834
+ const result = queryPlanToPrisma({
835
+ queryPlan,
836
+ mapper: {
837
+ "request.resource.attr.aBool": { field: "aBool" },
838
+ },
839
+ });
840
+
841
+ expect(result).toStrictEqual({
842
+ kind: PlanKind.CONDITIONAL,
843
+ filters: { aBool: { equals: true } },
844
+ });
845
+
846
+ if (result.kind !== PlanKind.CONDITIONAL) {
847
+ throw new Error("Expected CONDITIONAL result");
848
+ }
849
+
850
+ const query = await prisma.resource.findMany({
851
+ where: { ...result.filters },
852
+ });
853
+ expect(query.map((r) => r.id)).toEqual(
854
+ fixtureResources.filter((a) => a.aBool).map((r) => r.id)
855
+ );
856
+ });
857
+
858
+ test("conditional - negated bare boolean via cerbos policy", async () => {
859
+ const queryPlan = await cerbos.planResources({
860
+ principal: { id: "user1", roles: ["USER"] },
861
+ resource: { kind: "resource" },
862
+ action: "bare-bool-negated",
863
+ });
864
+
865
+ expect(queryPlan.kind).toEqual(PlanKind.CONDITIONAL);
866
+ expect(
867
+ (queryPlan as PlanResourcesConditionalResponse).condition
868
+ ).toEqual({
869
+ operator: "not",
870
+ operands: [{ name: "request.resource.attr.aBool" }],
871
+ });
872
+
873
+ const result = queryPlanToPrisma({
874
+ queryPlan,
875
+ mapper: {
876
+ "request.resource.attr.aBool": { field: "aBool" },
877
+ },
878
+ });
879
+
880
+ expect(result).toStrictEqual({
881
+ kind: PlanKind.CONDITIONAL,
882
+ filters: { aBool: { equals: false } },
883
+ });
884
+
885
+ if (result.kind !== PlanKind.CONDITIONAL) {
886
+ throw new Error("Expected CONDITIONAL result");
887
+ }
888
+
889
+ const query = await prisma.resource.findMany({
890
+ where: { ...result.filters },
891
+ });
892
+ expect(query.map((r) => r.id)).toEqual(
893
+ fixtureResources.filter((a) => !a.aBool).map((r) => r.id)
894
+ );
895
+ });
896
+
897
+ test("conditional - bare boolean nested via cerbos policy", async () => {
898
+ const queryPlan = await cerbos.planResources({
899
+ principal: { id: "user1", roles: ["USER"] },
900
+ resource: { kind: "resource" },
901
+ action: "bare-bool-nested",
902
+ });
903
+
904
+ expect(queryPlan.kind).toEqual(PlanKind.CONDITIONAL);
905
+ expect(
906
+ (queryPlan as PlanResourcesConditionalResponse).condition
907
+ ).toEqual({ name: "request.resource.attr.nested.aBool" });
908
+
909
+ const result = queryPlanToPrisma({
910
+ queryPlan,
911
+ mapper: {
912
+ "request.resource.attr.nested": {
913
+ relation: {
914
+ name: "nested",
915
+ type: "one",
916
+ fields: {
917
+ aBool: { field: "aBool" },
918
+ },
919
+ },
920
+ },
921
+ },
922
+ });
923
+
924
+ expect(result).toStrictEqual({
925
+ kind: PlanKind.CONDITIONAL,
926
+ filters: { nested: { is: { aBool: { equals: true } } } },
927
+ });
928
+
929
+ if (result.kind !== PlanKind.CONDITIONAL) {
930
+ throw new Error("Expected CONDITIONAL result");
931
+ }
932
+
933
+ const query = await prisma.resource.findMany({
934
+ where: { ...result.filters },
935
+ include: { nested: true },
936
+ });
937
+ expect(query.length).toBeGreaterThan(0);
938
+ for (const resource of query) {
939
+ expect(resource.nested.aBool).toBe(true);
940
+ }
941
+ });
942
+
943
+ test("conditional - negated bare boolean nested via cerbos policy", async () => {
944
+ const queryPlan = await cerbos.planResources({
945
+ principal: { id: "user1", roles: ["USER"] },
946
+ resource: { kind: "resource" },
947
+ action: "bare-bool-nested-negated",
948
+ });
949
+
950
+ expect(queryPlan.kind).toEqual(PlanKind.CONDITIONAL);
951
+ expect(
952
+ (queryPlan as PlanResourcesConditionalResponse).condition
953
+ ).toEqual({
954
+ operator: "not",
955
+ operands: [{ name: "request.resource.attr.nested.aBool" }],
956
+ });
957
+
958
+ const result = queryPlanToPrisma({
959
+ queryPlan,
960
+ mapper: {
961
+ "request.resource.attr.nested": {
962
+ relation: {
963
+ name: "nested",
964
+ type: "one",
965
+ fields: {
966
+ aBool: { field: "aBool" },
967
+ },
968
+ },
969
+ },
970
+ },
971
+ });
972
+
973
+ expect(result).toStrictEqual({
974
+ kind: PlanKind.CONDITIONAL,
975
+ filters: {
976
+ NOT: { nested: { is: { aBool: { equals: true } } } },
977
+ },
978
+ });
979
+
980
+ if (result.kind !== PlanKind.CONDITIONAL) {
981
+ throw new Error("Expected CONDITIONAL result");
982
+ }
983
+
984
+ const query = await prisma.resource.findMany({
985
+ where: { ...result.filters },
986
+ include: { nested: true },
987
+ });
988
+ for (const resource of query) {
989
+ expect(resource.nested.aBool).not.toBe(true);
990
+ }
991
+ });
992
+ });
993
+
543
994
  describe("Comparison Tests", () => {
544
995
  test("conditional - gt", async () => {
545
996
  const queryPlan = await cerbos.planResources({
@@ -2463,6 +2914,174 @@ describe("Relations", () => {
2463
2914
  .map((r) => r.id)
2464
2915
  );
2465
2916
  });
2917
+
2918
+ test("conditional - size(field) > 0 produces some", () => {
2919
+ const result = queryPlanToPrisma({
2920
+ queryPlan: createConditionalPlan({
2921
+ operator: "gt",
2922
+ operands: [
2923
+ {
2924
+ operator: "size",
2925
+ operands: [{ name: "request.resource.attr.ownedBy" }],
2926
+ },
2927
+ { value: 0 },
2928
+ ],
2929
+ }),
2930
+ mapper: {
2931
+ "request.resource.attr.ownedBy": {
2932
+ relation: { name: "ownedBy", type: "many", field: "id" },
2933
+ },
2934
+ },
2935
+ });
2936
+
2937
+ expect(result).toStrictEqual({
2938
+ kind: PlanKind.CONDITIONAL,
2939
+ filters: { ownedBy: { some: {} } },
2940
+ });
2941
+ });
2942
+
2943
+ test("conditional - size(field) == 0 produces none", () => {
2944
+ const result = queryPlanToPrisma({
2945
+ queryPlan: createConditionalPlan({
2946
+ operator: "eq",
2947
+ operands: [
2948
+ {
2949
+ operator: "size",
2950
+ operands: [{ name: "request.resource.attr.ownedBy" }],
2951
+ },
2952
+ { value: 0 },
2953
+ ],
2954
+ }),
2955
+ mapper: {
2956
+ "request.resource.attr.ownedBy": {
2957
+ relation: { name: "ownedBy", type: "many", field: "id" },
2958
+ },
2959
+ },
2960
+ });
2961
+
2962
+ expect(result).toStrictEqual({
2963
+ kind: PlanKind.CONDITIONAL,
2964
+ filters: { ownedBy: { none: {} } },
2965
+ });
2966
+ });
2967
+
2968
+ test("conditional - not(size(field) > 0) produces NOT some", () => {
2969
+ const result = queryPlanToPrisma({
2970
+ queryPlan: createConditionalPlan({
2971
+ operator: "not",
2972
+ operands: [
2973
+ {
2974
+ operator: "gt",
2975
+ operands: [
2976
+ {
2977
+ operator: "size",
2978
+ operands: [{ name: "request.resource.attr.ownedBy" }],
2979
+ },
2980
+ { value: 0 },
2981
+ ],
2982
+ },
2983
+ ],
2984
+ }),
2985
+ mapper: {
2986
+ "request.resource.attr.ownedBy": {
2987
+ relation: { name: "ownedBy", type: "many", field: "id" },
2988
+ },
2989
+ },
2990
+ });
2991
+
2992
+ expect(result).toStrictEqual({
2993
+ kind: PlanKind.CONDITIONAL,
2994
+ filters: { NOT: { ownedBy: { some: {} } } },
2995
+ });
2996
+ });
2997
+
2998
+ test("conditional - size(field) >= 1 produces some", () => {
2999
+ const result = queryPlanToPrisma({
3000
+ queryPlan: createConditionalPlan({
3001
+ operator: "ge",
3002
+ operands: [
3003
+ {
3004
+ operator: "size",
3005
+ operands: [{ name: "request.resource.attr.ownedBy" }],
3006
+ },
3007
+ { value: 1 },
3008
+ ],
3009
+ }),
3010
+ mapper: {
3011
+ "request.resource.attr.ownedBy": {
3012
+ relation: { name: "ownedBy", type: "many", field: "id" },
3013
+ },
3014
+ },
3015
+ });
3016
+
3017
+ expect(result).toStrictEqual({
3018
+ kind: PlanKind.CONDITIONAL,
3019
+ filters: { ownedBy: { some: {} } },
3020
+ });
3021
+ });
3022
+
3023
+ test("conditional - size on nested relation walks full chain", () => {
3024
+ const result = queryPlanToPrisma({
3025
+ queryPlan: createConditionalPlan({
3026
+ operator: "gt",
3027
+ operands: [
3028
+ {
3029
+ operator: "size",
3030
+ operands: [
3031
+ { name: "request.resource.attr.team.members" },
3032
+ ],
3033
+ },
3034
+ { value: 0 },
3035
+ ],
3036
+ }),
3037
+ mapper: {
3038
+ "request.resource.attr.team": {
3039
+ relation: {
3040
+ name: "team",
3041
+ type: "one",
3042
+ fields: {
3043
+ members: {
3044
+ relation: { name: "members", type: "many" },
3045
+ },
3046
+ },
3047
+ },
3048
+ },
3049
+ },
3050
+ });
3051
+
3052
+ expect(result).toStrictEqual({
3053
+ kind: PlanKind.CONDITIONAL,
3054
+ filters: {
3055
+ team: {
3056
+ is: {
3057
+ members: { some: {} },
3058
+ },
3059
+ },
3060
+ },
3061
+ });
3062
+ });
3063
+
3064
+ test("conditional - unsupported size comparison throws", () => {
3065
+ expect(() =>
3066
+ queryPlanToPrisma({
3067
+ queryPlan: createConditionalPlan({
3068
+ operator: "gt",
3069
+ operands: [
3070
+ {
3071
+ operator: "size",
3072
+ operands: [{ name: "request.resource.attr.ownedBy" }],
3073
+ },
3074
+ { value: 5 },
3075
+ ],
3076
+ }),
3077
+ mapper: {
3078
+ "request.resource.attr.ownedBy": {
3079
+ relation: { name: "ownedBy", type: "many", field: "id" },
3080
+ },
3081
+ },
3082
+ })
3083
+ ).toThrow("Unsupported size comparison: size(...) gt 5");
3084
+ });
2466
3085
  });
2467
3086
  });
2468
3087
 
@@ -4309,6 +4928,88 @@ describe("Integration", () => {
4309
4928
  // .map((r) => r.id)
4310
4929
  // );
4311
4930
  });
4931
+
4932
+ test("conditional - relation-has-members (size > 0)", async () => {
4933
+ const queryPlan = await cerbos.planResources({
4934
+ principal: { id: "user1", roles: ["USER"] },
4935
+ resource: { kind: "resource" },
4936
+ action: "relation-has-members",
4937
+ });
4938
+
4939
+ expect(queryPlan.kind).toEqual(PlanKind.CONDITIONAL);
4940
+
4941
+ const result = queryPlanToPrisma({
4942
+ queryPlan,
4943
+ mapper: {
4944
+ "request.resource.attr.ownedBy": {
4945
+ relation: { name: "ownedBy", type: "many", field: "id" },
4946
+ },
4947
+ },
4948
+ });
4949
+
4950
+ expect(result).toStrictEqual({
4951
+ kind: PlanKind.CONDITIONAL,
4952
+ filters: { ownedBy: { some: {} } },
4953
+ });
4954
+
4955
+ if (result.kind !== PlanKind.CONDITIONAL) {
4956
+ throw new Error("Expected CONDITIONAL result");
4957
+ }
4958
+
4959
+ const query = await prisma.resource.findMany({
4960
+ where: { ...result.filters },
4961
+ });
4962
+
4963
+ expect(query.map((r) => r.id)).toEqual(
4964
+ fixtureResources
4965
+ .filter((r) => {
4966
+ if (!r.ownedBy?.connect) return false;
4967
+ return (r.ownedBy.connect as { id: string }[]).length > 0;
4968
+ })
4969
+ .map((r) => r.id)
4970
+ );
4971
+ });
4972
+
4973
+ test("conditional - relation-has-no-members (negated size > 0)", async () => {
4974
+ const queryPlan = await cerbos.planResources({
4975
+ principal: { id: "user1", roles: ["USER"] },
4976
+ resource: { kind: "resource" },
4977
+ action: "relation-has-no-members",
4978
+ });
4979
+
4980
+ expect(queryPlan.kind).toEqual(PlanKind.CONDITIONAL);
4981
+
4982
+ const result = queryPlanToPrisma({
4983
+ queryPlan,
4984
+ mapper: {
4985
+ "request.resource.attr.ownedBy": {
4986
+ relation: { name: "ownedBy", type: "many", field: "id" },
4987
+ },
4988
+ },
4989
+ });
4990
+
4991
+ expect(result).toStrictEqual({
4992
+ kind: PlanKind.CONDITIONAL,
4993
+ filters: { NOT: { ownedBy: { some: {} } } },
4994
+ });
4995
+
4996
+ if (result.kind !== PlanKind.CONDITIONAL) {
4997
+ throw new Error("Expected CONDITIONAL result");
4998
+ }
4999
+
5000
+ const query = await prisma.resource.findMany({
5001
+ where: { ...result.filters },
5002
+ });
5003
+
5004
+ expect(query.map((r) => r.id)).toEqual(
5005
+ fixtureResources
5006
+ .filter((r) => {
5007
+ if (!r.ownedBy?.connect) return true;
5008
+ return (r.ownedBy.connect as { id: string }[]).length === 0;
5009
+ })
5010
+ .map((r) => r.id)
5011
+ );
5012
+ });
4312
5013
  });
4313
5014
 
4314
5015
  describe("Deep Nested Relations", () => {
package/src/index.ts CHANGED
@@ -379,7 +379,17 @@ function buildPrismaFilterFromCerbosExpression(
379
379
  expression: PlanExpressionOperand,
380
380
  mapper: Mapper
381
381
  ): PrismaFilter {
382
- // Validate expression structure
382
+ // A bare named operand represents a boolean field reference (e.g. `R.attr.booleanAttr`)
383
+ if (isNamedOperand(expression)) {
384
+ const { path, relations } = resolveFieldReference(expression.name, mapper);
385
+ const fieldName = getLeafField(path);
386
+ const fieldFilter = { [fieldName]: { equals: true } };
387
+ if (relations && relations.length > 0) {
388
+ return buildNestedRelationFilter(relations, fieldFilter);
389
+ }
390
+ return fieldFilter;
391
+ }
392
+
383
393
  if (!isOperatorOperand(expression)) {
384
394
  throw new Error("Invalid Cerbos expression structure");
385
395
  }
@@ -407,6 +417,16 @@ function buildPrismaFilterFromCerbosExpression(
407
417
  if (!operand) {
408
418
  throw new Error("not operator requires an operand");
409
419
  }
420
+ if (isNamedOperand(operand)) {
421
+ const { path, relations } = resolveFieldReference(
422
+ operand.name,
423
+ mapper
424
+ );
425
+ if (!relations || relations.length === 0) {
426
+ const fieldName = getLeafField(path);
427
+ return { [fieldName]: { equals: false } };
428
+ }
429
+ }
410
430
  return {
411
431
  NOT: buildPrismaFilterFromCerbosExpression(operand, mapper),
412
432
  };
@@ -460,6 +480,60 @@ function buildPrismaFilterFromCerbosExpression(
460
480
  }
461
481
  }
462
482
 
483
+ function handleSizeComparison(
484
+ operator: string,
485
+ sizeOperand: OperatorOperand,
486
+ valueOperand: PlanExpressionOperand,
487
+ mapper: Mapper
488
+ ): PrismaFilter {
489
+ const collectionOperand = sizeOperand.operands[0];
490
+ if (!collectionOperand || !isNamedOperand(collectionOperand)) {
491
+ throw new Error("size operator requires a named collection operand");
492
+ }
493
+
494
+ if (!isValueOperand(valueOperand)) {
495
+ throw new Error("size comparison requires a numeric value operand");
496
+ }
497
+
498
+ const count = valueOperand.value;
499
+ if (typeof count !== "number") {
500
+ throw new Error("size comparison requires a numeric value");
501
+ }
502
+
503
+ const isNonEmpty =
504
+ (operator === "gt" && count === 0) || (operator === "ge" && count === 1);
505
+
506
+ const isEmpty =
507
+ (operator === "eq" && count === 0) ||
508
+ (operator === "lt" && count === 1) ||
509
+ (operator === "le" && count === 0);
510
+
511
+ if (!isNonEmpty && !isEmpty) {
512
+ throw new Error(
513
+ `Unsupported size comparison: size(...) ${operator} ${count}`
514
+ );
515
+ }
516
+
517
+ const { relations } = resolveFieldReference(collectionOperand.name, mapper);
518
+ if (!relations || relations.length === 0) {
519
+ throw new Error("size operator requires a relation mapping");
520
+ }
521
+
522
+ const deepest = relations[relations.length - 1];
523
+ if (!deepest) {
524
+ throw new Error("size operator requires a relation mapping");
525
+ }
526
+
527
+ const prismaOp = isNonEmpty ? "some" : "none";
528
+ const leafFilter = { [deepest.name]: { [prismaOp]: {} } };
529
+
530
+ if (relations.length === 1) {
531
+ return leafFilter;
532
+ }
533
+
534
+ return buildNestedRelationFilter(relations.slice(0, -1), leafFilter);
535
+ }
536
+
463
537
  /**
464
538
  * Helper function to process relational operators (eq, ne, lt, etc.)
465
539
  */
@@ -489,6 +563,10 @@ function handleRelationalOperator(
489
563
  const rightOperand = operands.find((o) => o !== leftOperand);
490
564
  if (!rightOperand) throw new Error("No valid right operand found");
491
565
 
566
+ if (isOperatorOperand(leftOperand) && leftOperand.operator === "size") {
567
+ return handleSizeComparison(operator, leftOperand, rightOperand, mapper);
568
+ }
569
+
492
570
  const left = resolveOperand(leftOperand, mapper);
493
571
  const right = resolveOperand(rightOperand, mapper);
494
572