Skip to content

Signals API Reference

The library provides several helper functions to interact with the nested signals.

makeArrayEntry

This function creates a new array entry for a given value. It will give it a unique key and create a deep signal for the value.

ts
declare function makeArrayEntry<T>(value: T): SignalArrayEntry<T>;

An example of usage:

ts
import { makeArrayEntry } from '@formsignals/form-core';

const entry = makeArrayEntry('value');
console.log(entry); // { key: '0', data: signal('value') }

SignalifiedData

This type represents a data object with all its properties signalified. Array entries are also represented with the key and data props. An example of usage:

ts
import {SignalifiedData} from '@formsignals/form-core';

type Data = {
  name: string;
  age: number;
  friends: string[];
};

type Signalified = SignalifiedData<Data>;
// { name: Signal<string>, age: Signal<number>, friends: Signal<Array<{key: number; data: Signal<string>>> }

deepSignalifyValue

This function creates a deep signal for a given value.

ts
declare function deepSignalifyValue<T>(value: T): SignalifiedData<T>;

An example of usage:

ts
import { deepSignalifyValue } from '@formsignals/form-core';

const signalified = deepSignalifyValue({
  name: 'John',
  age: 25,
  friends: ['Alice'],
});
console.log(signalified); // signals({ name: signal('John'), age: signal(25), friends: signals([ { key: 0, data: signal('Alice') } ]) })

unSignalifyValue

This function removes the signals from a signalified object. This function will only peek at the values and therefore not subscribe to them.

ts
declare function unSignalifyValue<T>(
  value: SignalifiedData<T> | SignalifiedData<T>['value'],
): T;

An example of usage:

ts
import { unSignalifyValue } from '@formsignals/form-core';

const signalified = signal({
  name: signal('John'),
  age: signal(25),
  friends: signals([ { key: 0, data: signal('Alice') } ]),
});

const value = unSignalifyValue(signalified);
console.log(value); // { name: 'John', age: 25, friends: ['Alice'] }

unSignalifyValueSubscribed

This function will do the same as unSignalifyValue but will subscribe to the signals. Due to its nature, it will listen to every nested signal values change.

getSignalValueAtPath

This function retrieves the value of a signal at a given path.

ts
declare function getSignalValueAtPath<TValue, TPath extends Paths<TValue>>(
  obj: SignalifiedData<TValue> | Signal<undefined>,
  path: TPath,
): SignalifiedData<ValueAtPath<TValue, TPath>> | undefined;

An example of usage:

ts
import { getSignalValueAtPath } from '@formsignals/form-core';

const signalified = signal({
  name: signal('John'),
  age: signal(25),
  friends: signals([ { key: 0, data: signal('Alice') } ]),
});

const value = getSignalValueAtPath(signalified, "friends.0");
console.log(value); // signal('Alice')

removeSignalValueAtPath

This function removes the value of a signal at a given path.

ts
declare function removeSignalValueAtPath<TValue, TPath extends Paths<TValue>>(
  obj: SignalifiedData<TValue> | Signal<undefined>,
  path: TPath,
): void;

An example of usage:

ts
import { removeSignalValueAtPath } from '@formsignals/form-core';

const signalified = signal({
  name: signal('John'),
  age: signal(25),
  friends: signals([ { key: 0, data: signal('Alice') } ]),
});

removeSignalValueAtPath(signalified, "friends.0");
console.log(signalified); // signals({ name: signal('John'), age: signal(25), friends: signals([]) })

setSignalValuesFromObject

This function sets all values from a given object to a signalified object. You can also pass a partial object when given the isPartial parameter as true.

INFO

If the partial parameter is not given, missing array items or object keys will be removed.

ts
declare function setSignalValuesFromObject<
  TValue,
  IsPartial extends boolean = false,
>(
  obj: SignalifiedData<TValue> | Signal<undefined>,
  value: IsPartial extends true ? Partial<TValue> : TValue | undefined,
  isPartial?: IsPartial,
): SignalifiedData<TValue> | Signal<undefined>;

An example of usage:

ts
import { setSignalValuesFromObject } from '@formsignals/form-core';

const signalified = signal({
  name: signal('John'),
  age: signal(25),
  friends: signals([ { key: 0, data: signal('Alice') } ]),
});

setSignalValuesFromObject(signalified, {
  name: 'Alice',
  age: 30,
  friends: ['John'],
});
console.log(signalified); // signals({ name: signal('Alice'), age: signal(30), friends: signals([ { key: 0, data: signal('John') } ]) })

setSignalValueAtPath

This function sets the value of a signal at a given path.

ts
declare function setSignalValueAtPath<TValue, TPath extends Paths<TValue>>(
  obj: SignalifiedData<TValue> | Signal<undefined>,
  path: TPath,
  value: ValueAtPath<TValue, TPath> | undefined,
): SignalifiedData<ValueAtPath<TValue, TPath>> | undefined;

An example of usage:

ts
import { setSignalValueAtPath } from '@formsignals/form-core';

const signalified = signal({
  name: signal('John'),
  age: signal(25),
  friends: signals([ { key: 0, data: signal('Alice') } ]),
});

setSignalValueAtPath(signalified, "friends.0", 'Bob');
console.log(signalified); // signals({ name: signal('John'), age: signal(25), friends: signals([ { key: 0, data: signal('Bob') } ]) })