Repository: nodejs/node
Pull request: worker: implements nits in Web Locks code

Those were missed in https://github.com/nodejs/node/pull/58666, it shouldn't have much runtime effect, it's mainly to make the code more consistent with the rest of the codebase.

<!--
Before submitting a pull request, please read:

- the CONTRIBUTING guide at https://github.com/nodejs/node/blob/HEAD/CONTRIBUTING.md
- the commit message formatting guidelines at
  https://github.com/nodejs/node/blob/HEAD/doc/contributing/pull-requests.md#commit-message-guidelines

For code changes:
1. Include tests for any bug fixes or new features.
2. Update documentation if relevant.
3. Ensure that `make -j4 test` (UNIX), or `vcbuild test` (Windows) passes.

If you believe this PR should be highlighted in the Node.js CHANGELOG
please add the `notable-change` label.

Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.
-->


Changed files:
filename: lib/internal/locks.js
patch: @@ -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,