diff options
Diffstat (limited to 'packages/integrations/preact/src/signals.ts')
-rw-r--r-- | packages/integrations/preact/src/signals.ts | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/packages/integrations/preact/src/signals.ts b/packages/integrations/preact/src/signals.ts index db62961aa..3fa1529f4 100644 --- a/packages/integrations/preact/src/signals.ts +++ b/packages/integrations/preact/src/signals.ts @@ -1,6 +1,6 @@ -import type { AstroPreactAttrs, PropNameToSignalMap, SignalLike } from './types'; import type { Context } from './context'; import { incrementId } from './context.js'; +import type { AstroPreactAttrs, PropNameToSignalMap, SignalLike } from './types'; function isSignal(x: any): x is SignalLike { return x != null && typeof x === 'object' && typeof x.peek === 'function' && 'value' in x; @@ -9,40 +9,45 @@ function isSignal(x: any): x is SignalLike { export function restoreSignalsOnProps(ctx: Context, props: Record<string, any>) { // Restore signal props that were mutated for serialization let propMap: PropNameToSignalMap; - if(ctx.propsToSignals.has(props)) { - propMap = ctx.propsToSignals.get(props)! + if (ctx.propsToSignals.has(props)) { + propMap = ctx.propsToSignals.get(props)!; } else { propMap = new Map(); ctx.propsToSignals.set(props, propMap); } - for(const [key, signal] of propMap) { + for (const [key, signal] of propMap) { props[key] = signal; } return propMap; } -export function serializeSignals(ctx: Context, props: Record<string, any>, attrs: AstroPreactAttrs, map: PropNameToSignalMap){ - // Check for signals - const signals: Record<string, string> = {}; - for(const [key, value] of Object.entries(props)) { - if(isSignal(value)) { - // Set the value to the current signal value - // This mutates the props on purpose, so that it will be serialized correct. - props[key] = value.peek(); - map.set(key, value); - - let id: string; - if(ctx.signals.has(value)) { - id = ctx.signals.get(value)!; - } else { - id = incrementId(ctx); - ctx.signals.set(value, id); - } - signals[key] = id; +export function serializeSignals( + ctx: Context, + props: Record<string, any>, + attrs: AstroPreactAttrs, + map: PropNameToSignalMap +) { + // Check for signals + const signals: Record<string, string> = {}; + for (const [key, value] of Object.entries(props)) { + if (isSignal(value)) { + // Set the value to the current signal value + // This mutates the props on purpose, so that it will be serialized correct. + props[key] = value.peek(); + map.set(key, value); + + let id: string; + if (ctx.signals.has(value)) { + id = ctx.signals.get(value)!; + } else { + id = incrementId(ctx); + ctx.signals.set(value, id); } + signals[key] = id; } + } - if(Object.keys(signals).length) { - attrs['data-preact-signals'] = JSON.stringify(signals); - } + if (Object.keys(signals).length) { + attrs['data-preact-signals'] = JSON.stringify(signals); + } } |