Skip to main content

Models utilities

Common​

fill​

Fill the model instance's values with the given values.

Example​

import { fill } from '@foscia/core';

const post = fill(new Post(), { title: 'Hello', description: 'World' });

Arguments​

Returns​

I, the affected instance.

forceFill​

version: v0.6.1+

Fill the model instance's values with the given values, even read-only values. forceFill will temporary disable strictReadOnly policy on the model.

Example​

import { forceFill } from '@foscia/core';

const post = forceFill(new Post(), { author: user });

Arguments​

Returns​

I, the affected instance.

isSame​

Check if two values are the same model instance. Ensure the equality by checking if the two instances:

  • Are Foscia model instances
  • Have the same type
  • Have the same and non-NIL ID

This function does not deeply compare instances' values.

Example​

import { isSame } from '@foscia/core';

const areSameInstances = isSame(foo, bar);
if (areSameInstances) {
/* do something */
}

Arguments​

  • unknown value
  • unknown otherValue

Returns​

boolean

filled​

version: v0.9.3+

Check if instance contains any values, even defined as null. It excludes ID and LID from checked values. This can be useful to check if any data has been loaded on an instance from the store. If no attributes/relations are declared on model, it will always return true.

Example​

import { filled } from '@foscia/core';

const isFilled = filled(post);
if (isFilled) {
/* probably not fetched from data source */
}

Arguments​

Returns​

boolean

loaded​

Check if the given relations are loaded on the instance or its related instances. Can check for sub relations using dot relation keys: will check each related instances regardless of the number of concerned instances. If no relations are provided, wont perform any check.

Example​

import { loaded } from '@foscia/core';

const isFullyLoaded = loaded(post, ['comments', 'comments.author']);
if (!isFullyLoaded) {
/* do something */
}

Arguments​

Returns​

boolean

changed​

Check if the given keys have been changed since last instance sync. If no keys are provided, will check whole original snapshot (including IDs).

Example​

import { changed } from '@foscia/core';

const wasChanged = changed(post, ['title', 'description']);
if (wasChanged) {
/* do something */
}

Arguments​

Returns​

boolean if keys (or instance) changed since last sync.

markSynced​

Mark the model instance's values as synced. If no keys are provided, will replace whole original snapshot (including IDs).

Example​

import { markSynced } from '@foscia/core';

markSynced(post, ['title', 'description']);

Arguments​

Returns​

I, the affected instance.

restore​

Restore the model instance's original values. If no keys are provided, will restore whole original snapshot (including IDs).

Example​

import { restore } from '@foscia/core';

restore(post, ['title', 'description']);

Arguments​

Returns​

I, the affected instance.

takeSnapshot​

Take a snapshot of the model's state (IDs, values, etc.).

Example​

import { takeSnapshot } from '@foscia/core';

const postSnapshot = takeSnapshot(post);

Arguments​

Returns​

ModelSnapshot<I>, the snapshot.

restoreSnapshot​

Restore a snapshot of the model's state (IDs, values, etc.). If no keys are provided, will restore whole original snapshot (including IDs).

Example​

import { restoreSnapshot } from '@foscia/core';

restoreSnapshot(post, postSnapshot, ['title', 'description']);

Arguments​

Returns​

I, the affected instance.

compareSnapshots​

Check if the given keys are different between two snapshots. If no keys are provided, will check whole snapshots (including IDs).

Example​

import { compareSnapshots } from '@foscia/core';

compareSnapshots(nextSnapshot, prevSnapshot, ['title', 'description']);

Arguments​

Returns​

boolean if keys (or all values) are different on given snapshots.

Factories​

makeModel​

Create a model class.

Example​

import { makeModel } from '@foscia/core';

const PostModel = makeModel('posts', {
/* definition */
});

Arguments​

Returns​

ModelClass

makeModelFactory​

Create a model class factory.

Example​

import { makeModelFactory } from '@foscia/core';

const makeModel = makeModelFactory(
{
/* ...common configuration */
},
{
/* ...common definition */
},
);

Arguments​

Returns​

makeModel, a customized model factory function.

makeComposable​

Create a composable definition to integrate in models.

Example​

import { makeComposable } from '@foscia/core';

const publishable = makeComposable({
/* definition */
});

Arguments​

  • ModelDefinition rawDefinition

Returns​

ModelParsedDefinition