lib: make event static properties non writable and configurable

The idl definition for Event makes the properties constant
this means that they shouldn't be configurable and writable.
However, they were, and this commit fixes that.

Fixes: https://github.com/nodejs/node/issues/50417
PR-URL: https://github.com/nodejs/node/pull/50425
Reviewed-By: Vinícius Lourenço Claro Cardoso <contact@viniciusl.com.br>
Reviewed-By: Matthew Aitken <maitken033380023@gmail.com>
This commit is contained in:
Muthukumar
2023-11-10 17:56:12 +05:30
committed by GitHub
parent 38cd4f7d51
commit b4850f2ee4
2 changed files with 38 additions and 5 deletions

View File

@@ -2,6 +2,7 @@
const {
ArrayFrom,
ArrayPrototypeReduce,
Boolean,
Error,
FunctionPrototypeCall,
@@ -314,11 +315,6 @@ class Event {
throw new ERR_INVALID_THIS('Event');
this.#propagationStopped = true;
}
static NONE = 0;
static CAPTURING_PHASE = 1;
static AT_TARGET = 2;
static BUBBLING_PHASE = 3;
}
ObjectDefineProperties(
@@ -354,6 +350,22 @@ ObjectDefineProperties(
isTrusted: isTrustedDescriptor,
});
const staticProps = ['NONE', 'CAPTURING_PHASE', 'AT_TARGET', 'BUBBLING_PHASE'];
ObjectDefineProperties(
Event,
ArrayPrototypeReduce(staticProps, (result, staticProp, index = 0) => {
result[staticProp] = {
__proto__: null,
writable: false,
configurable: false,
enumerable: true,
value: index,
};
return result;
}, {}),
);
function isCustomEvent(value) {
return isEvent(value) && (value?.[kDetail] !== undefined);
}

View File

@@ -0,0 +1,21 @@
'use strict';
require('../common');
const assert = require('assert');
const eventPhases = {
'NONE': 0,
'CAPTURING_PHASE': 1,
'AT_TARGET': 2,
'BUBBLING_PHASE': 3
};
for (const [prop, value] of Object.entries(eventPhases)) {
// Check if the value of the property matches the expected value
assert.strictEqual(Event[prop], value, `Expected Event.${prop} to be ${value}, but got ${Event[prop]}`);
const desc = Object.getOwnPropertyDescriptor(Event, prop);
assert.strictEqual(desc.writable, false, `${prop} should not be writable`);
assert.strictEqual(desc.configurable, false, `${prop} should not be configurable`);
assert.strictEqual(desc.enumerable, true, `${prop} should be enumerable`);
}