summaryrefslogtreecommitdiff
path: root/packages/integrations/preact/src/signals.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/preact/src/signals.ts')
-rw-r--r--packages/integrations/preact/src/signals.ts55
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);
+ }
}