Skip to content

Commit

Permalink
Release 0.5.19
Browse files Browse the repository at this point in the history
  • Loading branch information
dennemark committed Sep 20, 2024
1 parent a327b0e commit 7bd7083
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 1 deletion.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@


## [0.5.19](https://github.com/dennemark/prisma-extension-casl/compare/0.5.18...0.5.19) (2024-09-20)


### Bug Fixes

* :bug: retransform data query on updateMany query ([a327b0e](https://github.com/dennemark/prisma-extension-casl/commit/a327b0e7d8f5b8987fd18281cc5330f5ab29d8b9))

## [0.5.18](https://github.com/dennemark/prisma-extension-casl/compare/0.5.17...0.5.18) (2024-09-19)


Expand Down
35 changes: 35 additions & 0 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -1204,6 +1204,38 @@ function getNestedQueryRelations(args, abilities, action, model, creationSelectQ
return queryRelations;
}

// src/transformDataToWhereQuery.ts
function transformDataToWhereQuery(args, model) {
;
["connect", "disconnect"].forEach((action) => {
Object.entries(args.data).forEach(([relation, obj]) => {
if (typeof obj === "object" && !Array.isArray(obj) && obj[action]) {
const ANDArgs = { AND: [...obj[action].AND ?? [], ...args.where[relation]?.AND ?? []] };
const relationTo = relationFieldsByModel[model][relation].relationToFields?.[0];
const relationFrom = relationFieldsByModel[model][relation].relationFromFields?.[0];
if (!relationTo || !relationFrom) {
throw new Error("Cannot find correct relations to transform updateMany to casl query.");
}
args.where = {
...args.where ?? {},
[relation]: {
...args.where[relation] ?? {},
...obj[action],
...ANDArgs.AND.length > 0 ? ANDArgs : {}
}
};
args.data = {
...args.data,
[relationFrom]: obj[action][relationTo]
};
delete args.data[relation];
delete args.where[relation][relationTo];
}
});
});
return args;
}

// src/applyCaslToQuery.ts
function applyCaslToQuery(operation, args, abilities, model) {
const operationAbility = caslOperationDict[operation];
Expand All @@ -1213,6 +1245,9 @@ function applyCaslToQuery(operation, args, abilities, model) {
const { args: dataArgs, creationTree: dataCreationTree } = applyDataQuery(abilities, args.data, operationAbility.action, model);
creationTree = dataCreationTree;
args.data = dataArgs;
if (operation === "updateMany") {
args = transformDataToWhereQuery(args, model);
}
}
if (operationAbility.whereQuery) {
args = applyWhereQuery(abilities, args, operationAbility.action, model);
Expand Down
35 changes: 35 additions & 0 deletions dist/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -1179,6 +1179,38 @@ function getNestedQueryRelations(args, abilities, action, model, creationSelectQ
return queryRelations;
}

// src/transformDataToWhereQuery.ts
function transformDataToWhereQuery(args, model) {
;
["connect", "disconnect"].forEach((action) => {
Object.entries(args.data).forEach(([relation, obj]) => {
if (typeof obj === "object" && !Array.isArray(obj) && obj[action]) {
const ANDArgs = { AND: [...obj[action].AND ?? [], ...args.where[relation]?.AND ?? []] };
const relationTo = relationFieldsByModel[model][relation].relationToFields?.[0];
const relationFrom = relationFieldsByModel[model][relation].relationFromFields?.[0];
if (!relationTo || !relationFrom) {
throw new Error("Cannot find correct relations to transform updateMany to casl query.");
}
args.where = {
...args.where ?? {},
[relation]: {
...args.where[relation] ?? {},
...obj[action],
...ANDArgs.AND.length > 0 ? ANDArgs : {}
}
};
args.data = {
...args.data,
[relationFrom]: obj[action][relationTo]
};
delete args.data[relation];
delete args.where[relation][relationTo];
}
});
});
return args;
}

// src/applyCaslToQuery.ts
function applyCaslToQuery(operation, args, abilities, model) {
const operationAbility = caslOperationDict[operation];
Expand All @@ -1188,6 +1220,9 @@ function applyCaslToQuery(operation, args, abilities, model) {
const { args: dataArgs, creationTree: dataCreationTree } = applyDataQuery(abilities, args.data, operationAbility.action, model);
creationTree = dataCreationTree;
args.data = dataArgs;
if (operation === "updateMany") {
args = transformDataToWhereQuery(args, model);
}
}
if (operationAbility.whereQuery) {
args = applyWhereQuery(abilities, args, operationAbility.action, model);
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "prisma-extension-casl",
"version": "0.5.18",
"version": "0.5.19",
"description": "Enforce casl abilities on prisma client ",
"main": "dist/index.js",
"types": "dist/index.d.ts",
Expand Down

0 comments on commit 7bd7083

Please sign in to comment.