Actions runners
Note
Many actions runners are available. Each may:
- version: requires a minimal version of Foscia packages
- only: be available in a specific use case (JSON:API, REST, HTTP, etc.)
- provide: provide a given context to next enhancers or runners
- require: require a given context from previous enhancers or runners
Examples of this guide will omit imports of your action factories or models to provide shorter examples.
@foscia/core
when
See Conditionals on actions core concepts.
none
Run the action and ignore the content of the result. Adapter errors are not caught and so may be thrown.
Example
import { none } from '@foscia/core';
await action().run(none());
Returns
Promise<void>
raw
Run the action and retrieve the raw adapter's data.
Example
import { raw } from '@foscia/core';
// When using HttpAdapter, raw result is a fetch Response object.
const response = await action().run(raw());
// You may also transform the data by passing a function.
const data = await action().run(raw((r) => r.json()));
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<AD> where AD is your adapter's data (e.g. a fetch Response object)
or a transformed data if transform callback was provided.
all
Run the action and deserialize an array of model's instance.
Example
import { all } from '@foscia/core';
const posts = await action().run(all());
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<I[]> where I is an instance of the targeted model or a transformed
data if transform callback was provided.
one
Run the action and deserialize one model's instance. Returns null when not found.
Example
import { one } from '@foscia/core';
const post = await action().run(one());
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<I | null> where I is an instance of the targeted model or a
transformed data if transform callback was provided.
oneOrFail
Run the action and deserialize one model's instance. Throws an
ExpectedRunFailureError when not found or empty result.
Example
import { oneOrFail } from '@foscia/core';
const post = await action().run(oneOrFail());
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<I> where I is an instance of the targeted model or a transformed
data if transform callback was provided.
oneOrCurrent
Run the action and deserialize one model's instance. Returns current instance when not found or empty result.
Example
import { oneOrCurrent } from '@foscia/core';
const post = await action().run(oneOrCurrent());
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<I> where I is an instance of the targeted model or a transformed
data if transform callback was provided.
oneOr
Run the action and deserialize one model's instance.
Example
import { oneOr } from '@foscia/core';
const post = await action().run(oneOr(() => null));
Arguments
FunctionnilRunnerthe runner to use when one result is emptyFunction | undefinedtransformthe callback to transform the data object
Returns
Promise<I> where I is an instance of the targeted model, a transformed
data if transform callback was provided or the nilRunner result.
cached
Retrieve an instance from the cache. If the instance is not in cache or if the included relations are not loaded, returns null.
Example
import { cached } from '@foscia/core';
const post = await action().run(cached());
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<I | null> where I is an instance of the targeted model or a
transformed data if transform callback was provided.
cachedOrFail
Retrieve an instance from the cache. If the instance is not in cache or if the
included relations are not loaded, throws an ExpectedRunFailureError.
Example
import { cachedOrFail } from '@foscia/core';
const post = await action().run(cachedOrFail());
Arguments
Function | undefinedtransformthe callback to transform the data object
Returns
Promise<I> where I is an instance of the targeted model or a transformed
data if transform callback was provided.
cachedOr
Retrieve an instance from the cache. If the instance is not in cache or if the included relations are not loaded, runs the given runner.
Example
import { cachedOr } from '@foscia/core';
const post = await action().run(cachedOr(() => null));
Arguments
FunctionnilRunnerthe runner to use when cached result is emptyFunction | undefinedtransformthe callback to transform the data object
Returns
Promise<I> where I is an instance of the targeted model, a transformed
data if transform callback was provided or the nilRunner result.
catchIf
Run given runner and catch errors using catchCallback. If catchCallback is omitted, will return null on error. If catchCallback returns a function, will run it as an action's runner. Else, will ignore error and return null only if callback for error is truthy.
Example
import { catchIf, one } from '@foscia/core';
const postOrNull = await action().run(
catchIf(one(), (error) => error instanceof ErrorToCatch),
);
Arguments
Functionrunnerthe runner to run and catch errors fromFunction | undefinedcatchCallbackthe callback to use when an error is caught
Returns
Promise<T> where T is either the runner result, the catch runner result or
null.
@foscia/jsonapi
usingDocument
Append the JSON:API document object to data object. Use it as the parameter of
all and one (and derivatives) runners.
Example
import { all } from '@foscia/core';
import { usingDocument } from '@foscia/jsonapi';
const data = await action().run(all(usingDocument));
data.instances; // Model instances.
data.document; // JSON:API document with meta, etc.