From 22fa7f874438f2c3bcfec7fae357e64c5d8b3610 Mon Sep 17 00:00:00 2001 From: Serhii Stotskyi Date: Mon, 25 Jul 2022 07:33:44 +0300 Subject: [PATCH] fix: replaces object.hasOwnProperty with static calls to Object.hasOwn (+ polyfill) Fixes #604 --- packages/casl-ability/src/utils.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/casl-ability/src/utils.ts b/packages/casl-ability/src/utils.ts index 49a81422f..0ad93821b 100644 --- a/packages/casl-ability/src/utils.ts +++ b/packages/casl-ability/src/utils.ts @@ -21,13 +21,16 @@ export function setByPath(object: AnyObject, path: string, value: unknown): void ref[lastKey] = value; } +const hasOwnProperty = (Object as any).hasOwn + || Object.prototype.hasOwnProperty.call.bind(Object.prototype.hasOwnProperty); + const TYPE_FIELD = '__caslSubjectType__'; export function setSubjectType< T extends string, U extends Record >(type: T, object: U): U & ForcedSubject { if (object) { - if (!object.hasOwnProperty(TYPE_FIELD)) { + if (!hasOwnProperty(object, TYPE_FIELD)) { Object.defineProperty(object, TYPE_FIELD, { value: type }); } else if (type !== object[TYPE_FIELD]) { throw new Error(`Trying to cast object to subject type ${type} but previously it was casted to ${object[TYPE_FIELD]}`); @@ -48,8 +51,8 @@ export const getSubjectTypeName = (value: SubjectType) => { }; export function detectSubjectType(subject: Exclude): string { - if (subject.hasOwnProperty(TYPE_FIELD)) { - return (subject as any)[TYPE_FIELD]; + if (hasOwnProperty(subject, TYPE_FIELD)) { + return subject[TYPE_FIELD]; } return getSubjectClassName(subject.constructor as SubjectClass); @@ -63,7 +66,7 @@ function expandActions(aliasMap: AliasesMap, rawActions: string | string[], merg while (i < actions.length) { const action = actions[i++]; - if (aliasMap.hasOwnProperty(action)) { + if (hasOwnProperty(aliasMap, action)) { actions = merge(actions, aliasMap[action]); } }