1- /** @import { Transport } from '#shared' */
1+ /** @import { Stringify, Transport } from '#shared' */
22
33import { get_render_context } from './render-context' ;
44
@@ -12,58 +12,39 @@ export function set_hydratable_key(key) {
1212
1313/**
1414 * @template T
15- * @overload
1615 * @param {string } key
17- * @param {() => Promise<T> } fn
16+ * @param {() => T } fn
1817 * @param {{ transport?: Transport<T> } } [options]
19- * @returns {Promise<T> }
20- */
21- /**
22- * @template T
23- * @overload
24- * @param {() => Promise<T> } fn
25- * @param {{ transport?: Transport<T> } } [options]
26- * @returns {Promise<T> }
18+ * @returns {T }
2719 */
20+ export function hydratable ( key , fn , options = { } ) {
21+ const store = get_render_context ( ) ;
22+
23+ if ( store . hydratables . has ( key ) ) {
24+ // TODO error
25+ throw new Error ( "can't have two hydratables with the same key" ) ;
26+ }
27+
28+ const result = fn ( ) ;
29+ store . hydratables . set ( key , { value : result , stringify : options . transport ?. stringify } ) ;
30+ return result ;
31+ }
2832/**
2933 * @template T
30- * @param {string | (() => Promise<T>) } key_or_fn
31- * @param {(() => Promise<T>) | { transport?: Transport<T> } } [fn_or_options]
32- * @param {{ transport?: Transport<T> } } [maybe_options]
33- * @returns {Promise<T> }
34+ * @param {string } key
35+ * @param {T } value
36+ * @param {{ stringify?: Stringify<T> } } [options]
3437 */
35- export async function hydratable ( key_or_fn , fn_or_options = { } , maybe_options = { } ) {
36- // TODO DRY out with #shared
37- /** @type {string } */
38- let key ;
39- /** @type {() => Promise<T> } */
40- let fn ;
41- /** @type {{ transport?: Transport<T> } } */
42- let options ;
43-
44- if ( typeof key_or_fn === 'string' ) {
45- key = key_or_fn ;
46- fn = /** @type {() => Promise<T> } */ ( fn_or_options ) ;
47- options = /** @type {{ transport?: Transport<T> } } */ ( maybe_options ) ;
48- } else {
49- if ( hydratable_key === null ) {
50- throw new Error (
51- 'TODO error: `hydratable` must be called synchronously within `cache` in order to omit the key'
52- ) ;
53- } else {
54- key = hydratable_key ;
55- }
56- fn = /** @type {() => Promise<T> } */ ( key_or_fn ) ;
57- options = /** @type {{ transport?: Transport<T> } } */ ( fn_or_options ) ;
58- }
59- const store = await get_render_context ( ) ;
38+ export function set_hydratable_value ( key , value , options = { } ) {
39+ const store = get_render_context ( ) ;
6040
6141 if ( store . hydratables . has ( key ) ) {
6242 // TODO error
6343 throw new Error ( "can't have two hydratables with the same key" ) ;
6444 }
6545
66- const result = fn ( ) ;
67- store . hydratables . set ( key , { value : result , transport : options . transport } ) ;
68- return result ;
46+ store . hydratables . set ( key , {
47+ value,
48+ stringify : options . stringify
49+ } ) ;
6950}
0 commit comments