worker: implements nits in Web Locks code

PR-URL: https://github.com/nodejs/node/pull/59270
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Chemi Atlow <chemi@atlow.co.il>
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
This commit is contained in:
Antoine du Hamel 2025-07-31 10:14:57 +02:00 committed by GitHub
parent 5d3efaa3c8
commit 5ebfb99a96
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3,7 +3,9 @@
const {
ObjectDefineProperties,
Promise,
PromisePrototypeThen,
PromiseResolve,
SafePromisePrototypeFinally,
Symbol,
SymbolToStringTag,
} = primordials;
@ -15,6 +17,7 @@ const {
const {
kEmptyObject,
lazyDOMException,
kEnumerableProperty,
} = require('internal/util');
const {
validateAbortSignal,
@ -86,8 +89,8 @@ class Lock {
}
ObjectDefineProperties(Lock.prototype, {
name: { __proto__: null, enumerable: true },
mode: { __proto__: null, enumerable: true },
name: kEnumerableProperty,
mode: kEnumerableProperty,
[SymbolToStringTag]: {
__proto__: null,
value: 'Lock',
@ -126,13 +129,13 @@ class LockManager {
* @param {boolean} [options.ifAvailable] - Only grant if immediately available
* @param {boolean} [options.steal] - Steal existing locks with same name
* @param {AbortSignal} [options.signal] - Signal to abort pending lock request
* @param {Function} callback - Function called when lock is granted
* @param {Function} [callback] - Function called when lock is granted
* @returns {Promise} Promise that resolves when the lock is released
* @throws {TypeError} When name is not a string or callback is not a function
* @throws {DOMException} When validation fails or operation is not supported
*/
// https://w3c.github.io/web-locks/#api-lock-manager-request
async request(name, options, callback) {
async request(name, options, callback = undefined) {
if (callback === undefined) {
callback = options;
options = undefined;
@ -204,7 +207,7 @@ class LockManager {
signal.addEventListener('abort', abortListener, { once: true });
const wrappedCallback = (lock) => {
return PromiseResolve().then(() => {
return PromisePrototypeThen(PromiseResolve(), () => {
if (signal.aborted) {
return undefined;
}
@ -224,11 +227,10 @@ class LockManager {
);
// When released promise settles, clean up listener and resolve main promise
released
.then(resolve, (error) => reject(convertLockError(error)))
.finally(() => {
signal.removeEventListener('abort', abortListener);
});
SafePromisePrototypeFinally(
PromisePrototypeThen(released, resolve, (error) => reject(convertLockError(error))),
() => signal.removeEventListener('abort', abortListener),
);
} catch (error) {
signal.removeEventListener('abort', abortListener);
reject(convertLockError(error));
@ -265,8 +267,8 @@ class LockManager {
}
ObjectDefineProperties(LockManager.prototype, {
request: { __proto__: null, enumerable: true },
query: { __proto__: null, enumerable: true },
request: kEnumerableProperty,
query: kEnumerableProperty,
[SymbolToStringTag]: {
__proto__: null,
value: 'LockManager',
@ -276,16 +278,6 @@ ObjectDefineProperties(LockManager.prototype, {
},
});
ObjectDefineProperties(LockManager.prototype.request, {
length: {
__proto__: null,
value: 2,
writable: false,
enumerable: false,
configurable: true,
},
});
module.exports = {
Lock,
LockManager,