Skip to content

Pumped-fn, a function on steroid

A dependency injection just made things a little bit way too easy

hold on, Dependency Injection? are we JAVA yet?

  • No, this library is built to make you pumped, enjoy all benefits without being old
  • You don't even know that you are using Dependency Injection
  • You GOT EVERYTHING, and no string attached

start in a minute (or maybe a little bit more)

install that really quickly

sh
$ npm add @pumped-fn/core-next
sh
$ pnpm add @pumped-fn/core-next
sh
$ yarn add @pumped-fn/core-next
sh
$ bun add @pumped-fn/core-next

and hop on codes

ts
import { 
provide
,
derive
,
createScope
} from "@pumped-fn/core-next";
/** * A very simple example. * * We have value containers * ... we have scope * ... and magic happens just a little bit way too quick */ const
value
=
provide
(() => 1);
const
derived
=
derive
(
value
, (
value
) =>
value
+ 1);
const
scope
=
createScope
();
const
resolvedDerived
= await
scope
.
resolve
(
derived
);
console
.
log
(
resolvedDerived
); // 2
await
scope
.
dispose
(); // Cleanup resources, release memory
ts
import { 
provide
,
derive
,
createScope
} from "@pumped-fn/core-next";
/** * A little bit more advanced to expose API surfaces * * We have more value containers, more complicated dependencies * ... we have scope * ... and nothing changes, we can resolve things so easily still */ const
config
=
provide
(() => ({
server
: {
port
: 3000,
host
: "localhost",
},
db
: {
uri
: "mongodb://localhost:27017/mydb",
},
logger
: {
defaultLevel
: "info",
transport
: "console",
}, })); const
logger
=
derive
(
config
, (
config
) => {
/** logger implementation */ }); const
connection
=
derive
({
logger
,
config
}, ({
logger
,
config
}) => {
/** connection implementation */ }); const
healthcheckRoute
=
derive
(
[
logger
,
connection
],
([
logger
,
connection
]) => {
/** healthcheck route implementation */ } ); const
server
=
derive
(
[
logger
,
config
,
healthcheckRoute
],
([
logger
,
config
,
healthcheckRoute
]) => ({
/** server implementation */
start
: () => {
console
.
log
(
`Server running at http://${
config
.
server
.
host
}:${
config
.
server
.
port
}`
); // Start server logic... }, }) ); const
scope
=
createScope
();
const
resolvedServer
= await
scope
.
resolve
(
server
);
resolvedServer
.
start
(); // Start the server
await
scope
.
dispose
(); // Cleanup resources, release memory
ts
import { 
provide
,
derive
,
createScope
} from "@pumped-fn/core-next";
/** * Pretty advanced example to expose API surfaces * * We have more value containers, more complicated dependencies * ... we have scope * ... and nothing changes, we can resolve things so easily still */ const
config
=
provide
(() => ({
server
: {
port
: 3000,
host
: "localhost",
},
db
: {
uri
: "mongodb://localhost:27017/mydb",
},
logger
: {
defaultLevel
: "info",
transport
: "console",
},
translation
: {
poll
: 5000,
source
: "https://example.com/translations",
}, })); const
logger
=
derive
(
config
, (
config
) => {
/** logger implementation */ }); const
connection
=
derive
([
logger
,
config
], ([
logger
,
config
]) => {
/** connection implementation */ }); const
translationsLoader
=
derive
(
[
logger
,
config
],
([
logger
,
config
]) =>
async () => { /** translation loader implementation */ } ); const
translations
=
derive
(
[
translationsLoader
],
async ([
translationsLoader
]) => {
return await
translationsLoader
();
} ); const
translationUpdator
=
derive
(
[
logger
,
config
,
translationsLoader
,
translations
.
static
],
([
logger
,
config
,
loader
,
translations
],
ctl
) => {
/** translation updator implementation */ const
interval
=
setInterval
(async () => {
// sample code only, don't use for production please const
newTranslations
= await
loader
();
translations
.
update
(
newTranslations
);
},
config
.
translation
.
poll
);
ctl
.
cleanup
(() => {
interval
&&
clearInterval
(
interval
);
}); } ); const
healthcheckRoute
=
derive
(
[
logger
,
connection
],
([
logger
,
connection
]) => {
/** healthcheck route implementation */ } ); const
translationRoute
=
derive
([
translations
.
static
], ([
translations
]) => {
translations
.
get
(); // retrieve the latest
}); const
server
=
derive
(
[
logger
,
config
,
healthcheckRoute
,
translationRoute
],
([
logger
,
config
,
healthcheckRoute
,
translationRoute
]) => ({
/** server implementation */
start
: () => {
// register routes ...
console
.
log
(
`Server running at http://${
config
.
server
.
host
}:${
config
.
server
.
port
}`
); // Start server logic... }, }) ); const
scope
=
createScope
();
await
scope
.
resolve
(
translationUpdator
); // Start the translation updater
const
resolvedServer
= await
scope
.
resolve
(
server
);
resolvedServer
.
start
(); // Start the server
await
scope
.
dispose
(); // Cleanup resources, release memory

Released under the MIT License.