@@ -150,9 +150,9 @@ interface SlotsToTypes {
150150
151151type  SlotKey  =  keyof  SlotsToTypes ; 
152152
153- const  globalSlots  =  new  WeakMap ( ) ; 
153+ const  globalSlots  =  new  WeakMap < Slots [ keyof   Slots ] [ 'usedBy' ] ,   Record < keyof   Slots ,   Slots [ keyof   Slots ] [ 'value' ] > > ( ) ; 
154154
155- function  _GetSlots ( container : Slots [ SlotKey ] [ 'usedBy' ] )  { 
155+ function  _GetSlots ( container : Slots [ keyof   Slots ] [ 'usedBy' ] )  { 
156156  return  globalSlots . get ( container ) ; 
157157} 
158158
@@ -161,9 +161,9 @@ const GetSlotsSymbol = Symbol.for('@@Temporal__GetSlots');
161161// expose GetSlots to avoid dual package hazards 
162162( globalThis  as  any ) [ GetSlotsSymbol ]  ||=  _GetSlots ; 
163163
164- const  GetSlots  =  ( globalThis  as  any ) [ GetSlotsSymbol ] ; 
164+ const  GetSlots  =  ( globalThis  as  any ) [ GetSlotsSymbol ]   as   typeof   _GetSlots ; 
165165
166- function  _CreateSlots ( container : Slots [ SlotKey ] [ 'usedBy' ] ) : void   { 
166+ function  _CreateSlots ( container : Slots [ keyof   Slots ] [ 'usedBy' ] ) : void   { 
167167  globalSlots . set ( container ,  Object . create ( null ) ) ; 
168168} 
169169
@@ -172,7 +172,7 @@ const CreateSlotsSymbol = Symbol.for('@@Temporal__CreateSlots');
172172// expose CreateSlots to avoid dual package hazards 
173173( globalThis  as  any ) [ CreateSlotsSymbol ]  ||=  _CreateSlots ; 
174174
175- export  const  CreateSlots  =  ( globalThis  as  any ) [ CreateSlotsSymbol ] ; 
175+ export  const  CreateSlots  =  ( globalThis  as  any ) [ CreateSlotsSymbol ]   as   typeof   _CreateSlots ; 
176176
177177// TODO: is there a better way than 9 overloads to make HasSlot into a type 
178178// guard that takes a variable number of parameters? 
@@ -294,7 +294,7 @@ export function GetSlot<KeyT extends keyof Slots>(
294294  container : Slots [ typeof  id ] [ 'usedBy' ] , 
295295  id : KeyT 
296296) : Slots [ KeyT ] [ 'value' ]  { 
297-   const  value  =  GetSlots ( container ) [ id ] ; 
297+   const  value  =  GetSlots ( container ) ?. [ id ] ; 
298298  if  ( value  ===  undefined )  throw  new  TypeError ( `Missing internal slot ${ id }  ` ) ; 
299299  return  value ; 
300300} 
@@ -303,11 +303,15 @@ export function SetSlot<KeyT extends SlotKey>(
303303  id : KeyT , 
304304  value : Slots [ KeyT ] [ 'value' ] 
305305) : void   { 
306-   const  slot  =  GetSlots ( container ) ; 
306+   const  slots  =  GetSlots ( container ) ; 
307307
308-   if  ( id  in  slot )  { 
308+   if  ( slots  ===  undefined )  { 
309+     throw  new  TypeError ( `Missing slots for the given container` ) ; 
310+   } 
311+ 
312+   if  ( id  in  slots )  { 
309313    throw  new  TypeError ( `${ id }   already has set` ) ; 
310314  } 
311315
312-   slot [ id ]  =  value ; 
316+   slots [ id ]  =  value ; 
313317} 
0 commit comments