diff --git a/packages/entity/src/EntityConfiguration.ts b/packages/entity/src/EntityConfiguration.ts index 4c3b4f8c..bc50b1df 100644 --- a/packages/entity/src/EntityConfiguration.ts +++ b/packages/entity/src/EntityConfiguration.ts @@ -7,7 +7,7 @@ import { mapMap, invertMap, reduceMap } from './utils/collections/maps'; * The data storage configuration for a type of Entity. Contains information relating to IDs, * cachable fields, field mappings, and types of cache and database adapter. */ -export default class EntityConfiguration> { +export default class EntityConfiguration, 'constuctor'>> { readonly idField: keyof TFields; readonly tableName: string; readonly cacheableKeys: ReadonlySet; @@ -86,15 +86,12 @@ export default class EntityConfiguration> { } private static validateSchema>(schema: TFields): void { - const disallowedFieldsKeys = Object.getOwnPropertyNames(Object.getPrototypeOf({})); + const disallowedFieldsKeys = Object.getOwnPropertyNames(Object.prototype); for (const disallowedFieldsKey of disallowedFieldsKeys) { - // when `hasOwnProperty` is a field name, we can't call it as a method. it's still invalid though. - if (typeof schema.hasOwnProperty !== 'function') { - throw new Error(`Entity field name not allowed: hasOwnProperty`); - } - - if (schema.hasOwnProperty(disallowedFieldsKey)) { - throw new Error(`Entity field name not allowed: ${disallowedFieldsKey}`); + if (Object.hasOwn(schema, disallowedFieldsKey)) { + throw new Error( + `Entity field name not allowed to prevent conflicts with standard Object prototype fields: ${disallowedFieldsKey}` + ); } } } diff --git a/packages/entity/src/__tests__/EntityConfiguration-test.ts b/packages/entity/src/__tests__/EntityConfiguration-test.ts index 2ff8f85a..f9cfe954 100644 --- a/packages/entity/src/__tests__/EntityConfiguration-test.ts +++ b/packages/entity/src/__tests__/EntityConfiguration-test.ts @@ -109,7 +109,9 @@ describe(EntityConfiguration, () => { databaseAdapterFlavor: 'postgres', cacheAdapterFlavor: 'redis', }) - ).toThrow(`Entity field name not allowed: ${keyName}`); + ).toThrow( + `Entity field name not allowed to prevent conflicts with standard Object prototype fields: ${keyName}` + ); }); }); }); diff --git a/tsconfig.json b/tsconfig.json index b95ea8e3..f50ab8b8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "es2021", - "lib": ["es2021"], + "target": "es2022", + "lib": ["es2023"], "module": "commonjs", "sourceMap": true, "moduleResolution": "node",