From a28d55cab871773f336b1fed02579a0fe0515e3b Mon Sep 17 00:00:00 2001 From: Dan Gowans Date: Wed, 25 Jan 2023 14:15:03 -0500 Subject: [PATCH] Object.hasOwn polyfill --- app.d.ts | 1 + app.js | 13 +++++++------ app.ts | 14 ++++++++------ helpers/functions.api.d.ts | 1 + helpers/functions.api.js | 3 ++- helpers/functions.api.ts | 4 +++- helpers/functions.config.d.ts | 1 + helpers/functions.config.js | 3 ++- helpers/functions.config.ts | 4 +++- helpers/polyfills.d.ts | 1 + helpers/polyfills.js | 6 ++++++ helpers/polyfills.ts | 7 +++++++ 12 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 helpers/polyfills.d.ts create mode 100644 helpers/polyfills.js create mode 100644 helpers/polyfills.ts diff --git a/app.d.ts b/app.d.ts index 6a16f7b4..0dd47f8f 100644 --- a/app.d.ts +++ b/app.d.ts @@ -1,2 +1,3 @@ +import './helpers/polyfills.js'; export declare const app: import("express-serve-static-core").Express; export default app; diff --git a/app.js b/app.js index 83a39c7f..dda4e5c9 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,4 @@ +import './helpers/polyfills.js'; import createError from 'http-errors'; import express from 'express'; import compression from 'compression'; @@ -88,15 +89,15 @@ app.use(session({ } })); app.use((request, response, next) => { - if (Object.prototype.hasOwnProperty.call(request.cookies, sessionCookieName) && - !Object.prototype.hasOwnProperty.call(request.session, 'user')) { + if (Object.hasOwn(request.cookies, sessionCookieName) && + !Object.hasOwn(request.session, 'user')) { response.clearCookie(sessionCookieName); } next(); }); const sessionChecker = (request, response, next) => { - if (Object.prototype.hasOwnProperty.call(request.session, 'user') && - Object.prototype.hasOwnProperty.call(request.cookies, sessionCookieName)) { + if (Object.hasOwn(request.session, 'user') && + Object.hasOwn(request.cookies, sessionCookieName)) { next(); return; } @@ -132,8 +133,8 @@ app.all(urlPrefix + '/keepAlive', (_request, response) => { }); app.use(urlPrefix + '/login', routerLogin); app.get(urlPrefix + '/logout', (request, response) => { - if (Object.prototype.hasOwnProperty.call(request.session, 'user') && - Object.prototype.hasOwnProperty.call(request.cookies, sessionCookieName)) { + if (Object.hasOwn(request.session, 'user') && + Object.hasOwn(request.cookies, sessionCookieName)) { request.session.destroy(() => { response.clearCookie(sessionCookieName); response.redirect(urlPrefix + '/'); diff --git a/app.ts b/app.ts index 9638a6a0..c680ffec 100644 --- a/app.ts +++ b/app.ts @@ -1,3 +1,5 @@ +import './helpers/polyfills.js' + import createError from 'http-errors' import express, { type RequestHandler } from 'express' @@ -172,8 +174,8 @@ app.use( // Clear cookie if no corresponding session app.use((request, response, next) => { if ( - Object.prototype.hasOwnProperty.call(request.cookies, sessionCookieName) && - !Object.prototype.hasOwnProperty.call(request.session, 'user') + Object.hasOwn(request.cookies, sessionCookieName) && + !Object.hasOwn(request.session, 'user') ) { response.clearCookie(sessionCookieName) } @@ -188,8 +190,8 @@ const sessionChecker = ( next: express.NextFunction ): void => { if ( - Object.prototype.hasOwnProperty.call(request.session, 'user') && - Object.prototype.hasOwnProperty.call(request.cookies, sessionCookieName) + Object.hasOwn(request.session, 'user') && + Object.hasOwn(request.cookies, sessionCookieName) ) { next() return @@ -257,8 +259,8 @@ app.use(urlPrefix + '/login', routerLogin) app.get(urlPrefix + '/logout', (request, response) => { if ( - Object.prototype.hasOwnProperty.call(request.session, 'user') && - Object.prototype.hasOwnProperty.call(request.cookies, sessionCookieName) + Object.hasOwn(request.session, 'user') && + Object.hasOwn(request.cookies, sessionCookieName) ) { request.session.destroy(() => { response.clearCookie(sessionCookieName) diff --git a/helpers/functions.api.d.ts b/helpers/functions.api.d.ts index d5f58abc..1440191d 100644 --- a/helpers/functions.api.d.ts +++ b/helpers/functions.api.d.ts @@ -1,3 +1,4 @@ +import './polyfills.js'; import type * as recordTypes from '../types/recordTypes'; export declare function regenerateApiKey(userName: string): Promise; export declare function getApiKey(userName: string): Promise; diff --git a/helpers/functions.api.js b/helpers/functions.api.js index 298f2528..62576861 100644 --- a/helpers/functions.api.js +++ b/helpers/functions.api.js @@ -1,3 +1,4 @@ +import './polyfills.js'; import fs from 'node:fs/promises'; import { v4 as uuidv4 } from 'uuid'; import Debug from 'debug'; @@ -33,7 +34,7 @@ export async function getApiKey(userName) { if (apiKeys === undefined) { await loadApiKeys(); } - if (!Object.prototype.hasOwnProperty.call(apiKeys, userName)) { + if (!Object.hasOwn(apiKeys, userName)) { await regenerateApiKey(userName); } return apiKeys[userName]; diff --git a/helpers/functions.api.ts b/helpers/functions.api.ts index 48da3a24..82de8605 100644 --- a/helpers/functions.api.ts +++ b/helpers/functions.api.ts @@ -1,3 +1,5 @@ +import './polyfills.js' + import fs from 'node:fs/promises' import { v4 as uuidv4 } from 'uuid' @@ -42,7 +44,7 @@ export async function getApiKey(userName: string): Promise { await loadApiKeys() } - if (!Object.prototype.hasOwnProperty.call(apiKeys, userName)) { + if (!Object.hasOwn(apiKeys, userName)) { await regenerateApiKey(userName) } diff --git a/helpers/functions.config.d.ts b/helpers/functions.config.d.ts index 19a15081..4cf0b800 100644 --- a/helpers/functions.config.d.ts +++ b/helpers/functions.config.d.ts @@ -1,3 +1,4 @@ +import './polyfills.js'; import type * as configTypes from '../types/configTypes'; export declare function getProperty(propertyName: 'application.applicationName'): string; export declare function getProperty(propertyName: 'application.logoURL'): string; diff --git a/helpers/functions.config.js b/helpers/functions.config.js index d5afada1..085d4cf4 100644 --- a/helpers/functions.config.js +++ b/helpers/functions.config.js @@ -1,3 +1,4 @@ +import './polyfills.js'; import { config } from '../data/config.js'; const configFallbackValues = new Map(); configFallbackValues.set('application.applicationName', 'Lot Occupancy System'); @@ -52,7 +53,7 @@ export function getProperty(propertyName) { const propertyNameSplit = propertyName.split('.'); let currentObject = config; for (const propertyNamePiece of propertyNameSplit) { - if (Object.prototype.hasOwnProperty.call(currentObject, propertyNamePiece)) { + if (Object.hasOwn(currentObject, propertyNamePiece)) { currentObject = currentObject[propertyNamePiece]; continue; } diff --git a/helpers/functions.config.ts b/helpers/functions.config.ts index b3670207..cd44da9c 100644 --- a/helpers/functions.config.ts +++ b/helpers/functions.config.ts @@ -1,5 +1,7 @@ /* eslint-disable @typescript-eslint/indent, node/no-unpublished-import */ +import './polyfills.js' + import { config } from '../data/config.js' import type * as configTypes from '../types/configTypes' @@ -210,7 +212,7 @@ export function getProperty(propertyName: string): unknown { let currentObject = config for (const propertyNamePiece of propertyNameSplit) { - if (Object.prototype.hasOwnProperty.call(currentObject, propertyNamePiece)) { + if (Object.hasOwn(currentObject, propertyNamePiece)) { currentObject = currentObject[propertyNamePiece] continue } diff --git a/helpers/polyfills.d.ts b/helpers/polyfills.d.ts new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/helpers/polyfills.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/helpers/polyfills.js b/helpers/polyfills.js new file mode 100644 index 00000000..a68cf564 --- /dev/null +++ b/helpers/polyfills.js @@ -0,0 +1,6 @@ +import Debug from 'debug'; +const debug = Debug('lot-occupancy-system:polyfills'); +if (Object.hasOwn === undefined) { + debug('Applying Object.hasOwn(o, v) polyfill'); + Object.hasOwn = Object.prototype.hasOwnProperty.call; +} diff --git a/helpers/polyfills.ts b/helpers/polyfills.ts new file mode 100644 index 00000000..d353f12e --- /dev/null +++ b/helpers/polyfills.ts @@ -0,0 +1,7 @@ +import Debug from 'debug' +const debug = Debug('lot-occupancy-system:polyfills') + +if (Object.hasOwn === undefined) { + debug('Applying Object.hasOwn(o, v) polyfill') + Object.hasOwn = Object.prototype.hasOwnProperty.call +}