mirror of
https://github.com/zebrajr/node.git
synced 2026-01-15 12:15:26 +00:00
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:
@@ -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);
|
||||
}
|
||||
|
||||
21
test/parallel/test-event-target.js
Normal file
21
test/parallel/test-event-target.js
Normal 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`);
|
||||
}
|
||||
Reference in New Issue
Block a user