@@ -393,40 +393,30 @@ function makeIterable(next) {
393
393
} )
394
394
}
395
395
396
+ /** These traps all use the `Reflect` API on the `source(state)` */
397
+ const basicTraps = [
398
+ "ownKeys" ,
399
+ "has" ,
400
+ "set" ,
401
+ "deleteProperty" ,
402
+ "defineProperty" ,
403
+ "getOwnPropertyDescriptor" ,
404
+ "preventExtensions" ,
405
+ "isExtensible" ,
406
+ "getPrototypeOf"
407
+ ] . reduce ( ( traps , name ) => {
408
+ traps [ name ] = ( state , ...args ) => Reflect [ name ] ( source ( state ) , ...args )
409
+ return traps
410
+ } , { } )
411
+
396
412
function makeTrapsForGetters ( getters ) {
397
413
return {
414
+ ...basicTraps ,
398
415
get ( state , prop , receiver ) {
399
416
return getters . hasOwnProperty ( prop )
400
417
? getters [ prop ] ( state , prop , receiver )
401
418
: Reflect . get ( state , prop , receiver )
402
419
} ,
403
- ownKeys ( state ) {
404
- return Reflect . ownKeys ( source ( state ) )
405
- } ,
406
- set ( state , ...args ) {
407
- return Reflect . set ( source ( state ) , ...args )
408
- } ,
409
- has ( state , ...args ) {
410
- return Reflect . has ( source ( state ) , ...args )
411
- } ,
412
- deleteProperty ( state , ...args ) {
413
- return Reflect . deleteProperty ( source ( state ) , ...args )
414
- } ,
415
- defineProperty ( state , ...args ) {
416
- return Reflect . defineProperty ( source ( state ) , ...args )
417
- } ,
418
- getOwnPropertyDescriptor ( state , ...args ) {
419
- return Reflect . getOwnPropertyDescriptor ( source ( state ) , ...args )
420
- } ,
421
- preventExtensions ( state ) {
422
- return Reflect . preventExtensions ( source ( state ) )
423
- } ,
424
- isExtensible ( state ) {
425
- return Reflect . isExtensible ( source ( state ) )
426
- } ,
427
- getPrototypeOf ( state ) {
428
- return Reflect . getPrototypeOf ( source ( state ) )
429
- } ,
430
420
setPrototypeOf ( state ) {
431
421
throw new Error ( "Object.setPrototypeOf() cannot be used on an Immer draft" ) // prettier-ignore
432
422
}
0 commit comments