@ -1,4 +1,4 @@
/** @import { Decode, Hydratable, Transport } from '#shared' */
/** @import { Decode, Transport } from '#shared' */
import { async _mode _flag } from '../flags/index.js' ;
import { async _mode _flag } from '../flags/index.js' ;
import { hydrating } from './dom/hydration.js' ;
import { hydrating } from './dom/hydration.js' ;
import * as w from './warnings.js' ;
import * as w from './warnings.js' ;
@ -9,87 +9,25 @@ import { DEV } from 'esm-env';
* @ template T
* @ template T
* @ param { string } key
* @ param { string } key
* @ param { ( ) => T } fn
* @ param { ( ) => T } fn
* @ param { { transport ? : Transport < T > } } [ options ]
* @ param { Transport < T > } [ transport ]
* @ returns { T }
* @ returns { T }
* /
* /
function isomorphic_ hydratable( key , fn , options ) {
export function hydratable( key , fn , transport ) {
if ( ! async _mode _flag ) {
if ( ! async _mode _flag ) {
e . experimental _async _required ( 'hydratable' ) ;
e . experimental _async _required ( 'hydratable' ) ;
}
}
return access _hydratable _store (
if ( ! hydrating ) {
key ,
( val , has ) => {
if ( ! has ) {
hydratable _missing _but _expected ( key ) ;
return fn ( ) ;
return fn ( ) ;
}
}
return decode ( val , options ? . transport ? . decode ) ;
} ,
fn
) ;
}
isomorphic _hydratable [ 'get' ] = get _hydratable _value ;
isomorphic _hydratable [ 'has' ] = has _hydratable _value ;
isomorphic _hydratable [ 'set' ] = ( ) => e . fn _unavailable _on _client ( 'hydratable.set' ) ;
/** @type {Hydratable} */
const store = window . _ _svelte ? . h ;
const hydratable = isomorphic _hydratable ;
if ( ! store ? . has ( key ) ) {
export { hydratable } ;
/ * *
* @ template T
* @ param { string } key
* @ param { { decode ? : Decode < T > } } [ options ]
* @ returns { T | undefined }
* /
function get _hydratable _value ( key , options = { } ) {
if ( ! async _mode _flag ) {
e . experimental _async _required ( 'hydratable.get' ) ;
}
return access _hydratable _store (
key ,
( val , has ) => {
if ( ! has ) {
hydratable _missing _but _expected ( key ) ;
hydratable _missing _but _expected ( key ) ;
}
return fn ( ) ;
return decode ( val , options . decode ) ;
} ,
( ) => undefined
) ;
}
/ * *
* @ param { string } key
* @ returns { boolean }
* /
function has _hydratable _value ( key ) {
if ( ! async _mode _flag ) {
e . experimental _async _required ( 'hydratable.set' ) ;
}
return access _hydratable _store (
key ,
( _ , has ) => has ,
( ) => false
) ;
}
}
/ * *
return decode ( store . get ( key ) , transport ? . decode ) ;
* @ template T
* @ param { string } key
* @ param { ( val : unknown , has : boolean ) => T } on _hydrating
* @ param { ( ) => T } on _not _hydrating
* @ returns { T }
* /
function access _hydratable _store ( key , on _hydrating , on _not _hydrating ) {
if ( ! hydrating ) {
return on _not _hydrating ( ) ;
}
var store = window . _ _svelte ? . h ;
return on _hydrating ( store ? . get ( key ) , store ? . has ( key ) ? ? false ) ;
}
}
/ * *
/ * *