@solid-primitives/signal-builders
v0.1.17
Published
A collection of chainable and composable reactive signal calculations, aka Signal Builders.
Downloads
5,107
Readme
@solid-primitives/signal-builders
A collection of chainable and composable reactive signal calculations, AKA Signal Builders.
Installation
npm install @solid-primitives/signal-builders
# or
yarn add @solid-primitives/signal-builders
How to use it
Signal builders create computations when used, so they need to be used under a reactive root.
Note, since all of the signal builders use createMemo
to wrap the calculation, updates will be caused only when the calculated value changes. Also the calculations should stay 'pure' – try to not cause side effects inside them.
Array
import { push, flatten, remove } from "@solid-primitives/signal-builders";
const [fruits, setFruits] = createSignal(["apples", "bananas", "oranges", "tomatoes"]);
const [toRemove, setToRemove] = createSignal("tomatoes");
const list = flatten(remove(push(fruits, ["kiwis", "avocados"]), toRemove));
list(); // ["apples", "bananas", "oranges", "kiwis", "avocados"]
Object
import { update, merge } from "@solid-primitives/signal-builders";
const [user, setUser] = createSignal({ name: { first: "John", last: "Doe" } });
const [last, setLast] = createSignal("Solid");
const modifiedUser = merge(update(user, "name", "last", last), { age: 21 });
modifiedUser(); // { name: { first: "John", last: "Solid" }, age: 21 }
Number
import { add, multiply, clamp, int } from "@solid-primitives/signal-builders";
const [input, setInput] = createSignal("123");
const [ing, setIng] = createSignal(-45);
const [max, setMax] = createSignal(1000);
const value = clamp(multiply(int(input), add(ing, 54, 9)), 0, max);
String
import { lowercase, substring, template, add } from "@solid-primitives/signal-builders";
const [greeting, setGreeting] = createSignal("Hello");
const [target, setTarget] = createSignal("World");
const message = template`${greeting}, ${target}!`;
message(); // => Hello, World!
const solidMessage = lowercase(add(substring(message, 0, 7), "Solid"));
solidMessage(); // => hello, solid
List of builders
Array
push
- basicallyArray.prototype.push()
drop
- drop n items from the array startdropRight
- drop n items from the end of the arrayfilter
- basicallyArray.prototype.filter()
filterOut
- filter out passed item from an arrayremove
- removes passed item from an array (first one from the start)removeItems
- removes multiple items from an arraysplice
- signal-builderArray.prototype.splice()
slice
- signal-builderArray.prototype.slice()
map
- signal-builderArray.prototype.map()
sort
- signal-builderArray.prototype.sort()
concat
- Append multiple arrays togetherflatten
- Flattens a nested array into a one-level arrayfilterInstance
- filter list: only leave items that are instances of specified ClassesfilterOutInstance
- filter list: remove items that are instances of specified Classes
Object/Array
get
- Get a single property value of an object by specifying a path to it.update
- Change single value in an object by key, or series of recursing keys.
Object
omit
- get an object copy without the provided keyspick
- get an object copy with only the provided keysmerge
- Merges multiple objects into a single one.
Convert
string
- turns passed value to a stringfloat
- turns passed string to an float numberint
- turns passed string to an intigerjoin
- join array with a separator to a string
Number
add
-a + b + c + ...
substract
-a - b - c - ...
multiply
-a * b * c * ...
divide
-a / b / c / ...
power
-a ** b ** c ** ...
clamp
- clamp a number value between two other valuesround
-Math.round()
ceil
-Math.ceil()
floor
-Math.floor()
String
add
-a + b + c + ...
lowercase
- signal builderString.prototype.toLowerCase()
uppercase
- signal builderString.prototype.toUpperCase()
capitalize
- capitalize a string input e.g."solidJS"
->"Solidjs"
substring
- signal builderString.prototype.substring()
template
- Create reactive string templates
A call for feedback
signal-builders
package is now a proof of concept of a fresh and experimental idea. Therefore all feedback/ideas/issues are highly welcome! :)
Changelog
See CHANGELOG.md