33const {
44 ObjectDefineProperties,
55 Promise,
6+ PromisePrototypeThen,
67 PromiseResolve,
8+ SafePromisePrototypeFinally,
79 Symbol,
810 SymbolToStringTag,
911} = primordials ;
@@ -15,6 +17,7 @@ const {
1517const {
1618 kEmptyObject,
1719 lazyDOMException,
20+ kEnumerableProperty,
1821} = require ( 'internal/util' ) ;
1922const {
2023 validateAbortSignal,
@@ -86,8 +89,8 @@ class Lock {
8689}
8790
8891ObjectDefineProperties ( Lock . prototype , {
89- name : { __proto__ : null , enumerable : true } ,
90- mode : { __proto__ : null , enumerable : true } ,
92+ name : kEnumerableProperty ,
93+ mode : kEnumerableProperty ,
9194 [ SymbolToStringTag ] : {
9295 __proto__ : null ,
9396 value : 'Lock' ,
@@ -126,13 +129,13 @@ class LockManager {
126129 * @param {boolean } [options.ifAvailable] - Only grant if immediately available
127130 * @param {boolean } [options.steal] - Steal existing locks with same name
128131 * @param {AbortSignal } [options.signal] - Signal to abort pending lock request
129- * @param {Function } callback - Function called when lock is granted
132+ * @param {Function } [ callback] - Function called when lock is granted
130133 * @returns {Promise } Promise that resolves when the lock is released
131134 * @throws {TypeError } When name is not a string or callback is not a function
132135 * @throws {DOMException } When validation fails or operation is not supported
133136 */
134137 // https://w3c.github.io/web-locks/#api-lock-manager-request
135- async request ( name , options , callback ) {
138+ async request ( name , options , callback = undefined ) {
136139 if ( callback === undefined ) {
137140 callback = options ;
138141 options = undefined ;
@@ -204,7 +207,7 @@ class LockManager {
204207 signal . addEventListener ( 'abort' , abortListener , { once : true } ) ;
205208
206209 const wrappedCallback = ( lock ) => {
207- return PromiseResolve ( ) . then ( ( ) => {
210+ return PromisePrototypeThen ( PromiseResolve ( ) , ( ) => {
208211 if ( signal . aborted ) {
209212 return undefined ;
210213 }
@@ -224,11 +227,10 @@ class LockManager {
224227 ) ;
225228
226229 // When released promise settles, clean up listener and resolve main promise
227- released
228- . then ( resolve , ( error ) => reject ( convertLockError ( error ) ) )
229- . finally ( ( ) => {
230- signal . removeEventListener ( 'abort' , abortListener ) ;
231- } ) ;
230+ SafePromisePrototypeFinally (
231+ PromisePrototypeThen ( released , resolve , ( error ) => reject ( convertLockError ( error ) ) ) ,
232+ ( ) => signal . removeEventListener ( 'abort' , abortListener ) ,
233+ ) ;
232234 } catch ( error ) {
233235 signal . removeEventListener ( 'abort' , abortListener ) ;
234236 reject ( convertLockError ( error ) ) ;
@@ -265,8 +267,8 @@ class LockManager {
265267}
266268
267269ObjectDefineProperties ( LockManager . prototype , {
268- request : { __proto__ : null , enumerable : true } ,
269- query : { __proto__ : null , enumerable : true } ,
270+ request : kEnumerableProperty ,
271+ query : kEnumerableProperty ,
270272 [ SymbolToStringTag ] : {
271273 __proto__ : null ,
272274 value : 'LockManager' ,
@@ -276,16 +278,6 @@ ObjectDefineProperties(LockManager.prototype, {
276278 } ,
277279} ) ;
278280
279- ObjectDefineProperties ( LockManager . prototype . request , {
280- length : {
281- __proto__ : null ,
282- value : 2 ,
283- writable : false ,
284- enumerable : false ,
285- configurable : true ,
286- } ,
287- } ) ;
288-
289281module . exports = {
290282 Lock,
291283 LockManager,
0 commit comments