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