Data storage for single page applications
npm install @tripod311/pumpPump is a lightweight zero-dependency application-layer data storage.
It provides a minimal set of building blocks for managing global and local state, API calls, and reactive dependencies without unnecessary logic or restrictions.
---
``bash`
npm install @tripod311/pump
---
, off),
- manual update trigger (trigger).`ts
const root = new Pipe();
const child = new Pipe();
root.addPipe("child", child);child.on((newOut, oldOut, newIn, oldIn) => {
console.log("Triggered!");
});
child.trigger();
`---
$3
Simple storage for global state (similar to useState, but global).
Provides data property and notifies listeners on changes.`ts
const lang = new StoragePipe();
lang.data = "en";lang.on((newVal, oldVal) => {
console.log("Language changed:", oldVal, "→", newVal);
});
lang.data = "ru";
`---
$3
Pipe for computed values.
When input is set, it runs process() and updates output.`ts
class DoublePipe extends DataPipe {
async process() {
this._output = (this.input ?? 0) * 2;
}
}const dp = new DoublePipe();
dp.on((out) => console.log("Output:", out));
dp.input = 5; // → Output: 10
`---
$3
Synchronous processor.
run(input) immediately returns a result and also notifies listeners.
Optionally, you can enable wipeInput and wipeOutput to prevent storing sensitive values.`ts
const tabPipe = new SyncFunctionPipe((tab) => {
return ["main", "settings"].includes(tab) ? tab : "main";
});
tabPipe.wipeInput = true;tabPipe.on((out) => console.log("Tab set to:", out));
console.log(tabPipe.run("settings")); // "settings"
console.log(tabPipe.run("invalid")); // "main"
`---
$3
Asynchronous processor (e.g., for API calls).
run(input) returns a Promise