Interface SohlLogicData<TParent, TLogic>

The base data interface for all Logic classes.

Every actor/item data interface (e.g., sohl.document.item.logic.SohlItemData, sohl.document.actor.logic.SohlActorData, sohl.document.item.logic.GearData) ultimately extends this. The corresponding SohlDataModel class implements it via Foundry's schema system.

The base shape of every document's system data, reachable as document.system and (typed as the interface) document.logic.data.

interface SohlLogicData<
    TParent extends SohlDocument
    | SohlTokenDocument = SohlDocument,
    TLogic extends SohlLogic<any> = SohlLogic<any>,
> {
    actionDefs: sohl.entity.action.SohlAction.Data[];
    actorLogic: null | SohlActorLogic<any>;
    id: string;
    isOwner: boolean;
    kind: string;
    lastRun?: Record<string, number>;
    logic: TLogic;
    name: string;
    parent: null | TParent;
    scheduledActions?: ScheduledAction[];
    shortcode: string;
    type: string;
    uuid: string;
    getFlag(scope: string, key: string): unknown;
    setFlag(scope: string, key: string, value: unknown): Promise<unknown>;
    update(data: object): Promise<unknown>;
}

Type Parameters

  • TParent extends SohlDocument | SohlTokenDocument = SohlDocument
  • TLogic extends SohlLogic<any> = SohlLogic<any>

Hierarchy (View Summary)

Properties

Serialized action definitions used to build the logic's actions map.

actorLogic: null | SohlActorLogic<any>

The logic of the owning actor — this actor's own logic when the data is an actor's, the owning actor's logic when it is an item's, or null.

id: string

The owning document's id.

isOwner: boolean

Whether the current user owns the document (edit permission).

kind: string

The document kind (its actor or item type id).

lastRun?: Record<string, number>

Generic run record (issue #579) — a map of actionName → the world time (seconds) that action last performed on this document, stamped at the action chokepoint for actions flagged recordsLastRun. The past-tense mirror of scheduledActions: "when did X last happen here?" for any action, without a bespoke field, and it survives after a schedule ends. For an event-driven trigger (no computable next fire) it is the only meaningful temporal fact.

logic: TLogic

The logic instance built from this data.

name: string

The owning document's name.

parent: null | TParent

The Foundry document (actor or item) this data belongs to, or null.

scheduledActions?: ScheduledAction[]

Persisted recurring/deferred schedules for this document (issue #588) — each entry defers actionName to anchor + interval. The generic store that replaces the retired bespoke last*Date anchors; a recurring effect's finalize() re-arms these into the event queue on every preparation. Only documents whose data model extends the base SohlDataModel (actors, items, combatants) carry it — hence optional here. See https://kb.heroiclands.org/dev/reference/event-queue/.

shortcode: string

Short identity code for this document.

type: string

The owning document's type (its actor or item kind).

uuid: string

The owning document's globally-unique id, treated as an opaque identity token: pass it through (e.g. into chat-card data) and resolve it back to logic via fvttLogicFromUuid / fvttLogicFromUuidSync — never fromUuid it to a Foundry document inside the logic layer.

Methods

  • Read a namespaced flag from the owning document.

    Parameters

    • scope: string
    • key: string

    Returns unknown

  • Write a namespaced flag on the owning document.

    Parameters

    • scope: string
    • key: string
    • value: unknown

    Returns Promise<unknown>

  • Persist a partial update to the owning document (self-mutation only).

    Parameters

    • data: object

    Returns Promise<unknown>