0.11.0 • Published 3 years ago
rocket-pipes v0.11.0
Rocket pipes
Powerful pipes for TypeScript, that chain Promise and ADT like Maybe or Either from popular FP libraries.
Features
- 🍬 Sugar pipes. No worries about promises or ADT itself. Work with resolved values directly.
- 💡 Type inference. No worries about manual typing work. Types of resolved values inferred automatically.
- ⛓️ FP libraries friendly. Understand Catamorphism/Foldable libraries.
- 🖇️ Mix of Promise with FP library. Yes! Catamorphism/Foldable can be included in Promise.
- 📉 Context. Easy pass context through all pipes.
- 🚪 Pipeline exit (even nested exit). You can exit from any place of pipeline with result value (it's also have proper type inference 🤘)
- 🏹 Pipeline replace. You can replace function on pipeline to another on the fly. Useful for mock testing.
- ➰ AOP. Use beforeAll/afterAll hooks for your pipelines.
- 🦥 Lazy. Pipeline returns function, that can be used later. It's friendly with Ramda or Sanctuary.
Library support
| Vanilla | Monet | Purify | fp-ts | RxJS / IxJS |
|---|---|---|---|---|
| Promise | Either | Either | Either | pipe |
| Maybe | Maybe | Promise\<Either> | ||
| Validation | EitherAsync | |||
| Promise\<Either> | MaybeAsync | |||
| Promise\<Maybe> | Promise\<Either> | |||
| Promise\<Validation> | Promise\<Maybe> | |||
| Promise\<EitherAsync> | ||||
| Promise\<MaybeAsync> |
if you want slim version without libraries support, install slim version npm install rocket-pipes-slim
Examples
Basic
const resp = await p(
() => 123,
(n) => n + 1
)();
expect(resp + 1).toEqual(125);Context
const resp = await p(
() => 123,
pc((ctx: {n: number}) => n => n + ctx.n),
n => n + 1
).context({n: 1})();
expect(resp + 1).toEqual(126);Exit pipeline
const resp = await p(
() => 123,
(n) => ep(n + 1),
(n) => "qwe"
)();
iep(resp) && expect(resp.r + 1).toEqual(125);Replace pipeline
const fn = p(
() => 123,
(n) => n + 1
);
const resp = await fn.replace([[0, () => 124]])();
expect(resp + 1).toEqual(126);
fn.replaceUndo();
expect(await fn()).toEqual(125);AOP beforeAll/afterAll hooks
beforeAll((label, n) => {
expect(label).toEqual("(n) => n + 1\n(n) => n + 1");
expect(n).toEqual(123);
});
afterAll((label, n) => {
expect(label).toEqual("(n) => n + 1\n(n) => n + 1");
expect(n).toEqual(125);
});
p(
(n: number) => n + 1,
(n) => n + 1
)(123);AOP clear hooks
clearAfterAll();
clearBeforeAll();Promise basic
const resp = await p(
() => Promise.resolve(123),
(n) => n + 1
)();
expect(resp + 1).toEqual(125);Either right
const resp = await p(
() => Either.right(123),
(n) => n + 1
)();
expect(resp + 1).toEqual(125);Promise can include anything supported
const resp = await p(
() => Promise.resolve(Either.right(123)),
(n) => n + 1
)();
expect(resp + 1).toEqual(125);Either left
const resp = await p(
() => Either.left(123),
(_, l) => l + 1
)();
expect(resp + 1).toEqual(125);Maybe some
const resp = await p(
() => Maybe.some(123),
(n) => n + 1
)();
expect(resp + 1).toEqual(125);Maybe none
const resp = await p(
() => Maybe.none(),
(s, n) => s || n
)();
expect(resp).toEqual(void 0);Validation success
const resp = await p(
() => Validation.success(123),
(n) => n + 1
)();
expect(resp + 1).toEqual(125);Validation fail
const resp = await p(
() => Validation.fail(123),
(_, l) => l + 1
)();
expect(resp + 1).toEqual(125);0.11.0
3 years ago
0.10.3
3 years ago
0.10.2
4 years ago
0.10.1
5 years ago
0.10.0
5 years ago
0.9.0
5 years ago
0.8.0
5 years ago
0.7.0
5 years ago
0.6.0
5 years ago
0.5.1
5 years ago
0.5.0
5 years ago
0.4.1
5 years ago
0.4.0
5 years ago
0.3.0
5 years ago
0.3.1
5 years ago
0.2.4
5 years ago
0.2.3
5 years ago
0.2.2
5 years ago
0.2.1
5 years ago
0.2.0
5 years ago
0.1.0
5 years ago
0.1.2
5 years ago
0.1.1
5 years ago
0.0.1
5 years ago