UNPKG

node-nlp

Version:

Library for NLU (Natural Language Understanding) done in Node.js

117 lines (116 loc) 4.51 kB
/** * @module botbuilder */ /** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ import { StatePropertyAccessor } from './botStatePropertyAccessor'; import { PropertyManager } from './propertyManager'; import { Storage, StorageKeyFactory } from './storage'; import { TurnContext } from './turnContext'; /** * State information cached off the context object by a `BotState` instance. */ export interface CachedBotState { /** * Dictionary of state values. */ state: { [id: string]: any; }; /** * Hash of the last known state values. This is used to perform change detection. */ hash: string; } /** * Base class for the frameworks state persistance scopes. * * @remarks * This class will read and write state, to a provided storage provider, for each turn of * conversation with a user. Derived classes, like `ConversationState` and `UserState`, provide a * `StorageKeyFactory` which is used to determine the key used to persist a given storage object. * * The state object thats loaded will be automatically cached on the context object for the * lifetime of the turn and will only be written to storage if it has been modified. */ export declare class BotState implements PropertyManager { protected storage: Storage; protected storageKey: StorageKeyFactory; /** * Collection of state property accessors added through [createProperty()](#createproperty). */ readonly properties: Map<string, StatePropertyAccessor>; private stateKey; /** * Creates a new BotState instance. * @param storage Storage provider to persist the state object to. * @param storageKey Function called anytime the storage key for a given turn needs to be calculated. */ constructor(storage: Storage, storageKey: StorageKeyFactory); /** * Creates a new property accessor for reading and writing an individual property to the bot * states storage object. * @param T (Optional) type of property to create. Defaults to `any` type. * @param name Name of the property to add. Must be unique within the set. */ createProperty<T = any>(name: string): StatePropertyAccessor<T>; /** * Reads in and caches the backing state object for a turn. * * @remarks * Subsequent reads will return the cached object unless the `force` flag is passed in which * will force the state object to be re-read. * * This method is automatically called on first access of any of created property accessors. * * ```JavaScript * const state = await botState.load(context); * ``` * @param context Context for current turn of conversation with the user. * @param force (Optional) If `true` the cache will be bypassed and the state will always be read in directly from storage. Defaults to `false`. */ load(context: TurnContext, force?: boolean): Promise<any>; /** * Saves the cached state object if it's been changed. * * @remarks * If the `force` flag is passed in the cached state object will be saved regardless of * whether its been changed or not and if no object has been cached, an empty object will be * created and then saved. * * ```JavaScript * await botState.saveChanges(context); * ``` * @param context Context for current turn of conversation with the user. * @param force (Optional) if `true` the state will always be written out regardless of its change state. Defaults to `false`. */ saveChanges(context: TurnContext, force?: boolean): Promise<void>; /** * Clears the current state object for a turn. * * @remarks * The cleared state object will not be persisted until [saveChanges()](#savechanges) has * been called. * * ```JavaScript * await botState.clear(context); * await botState.saveChanges(context); * ``` * @param context Context for current turn of conversation with the user. */ clear(context: TurnContext): void; /** * Returns a cached state object or undefined if not cached. * * @remarks * This example shows how to synchronously get an already loaded and cached state object: * * ```JavaScript * const state = botState.get(context); * ``` * @param context Context for current turn of conversation with the user. */ get(context: TurnContext): any | undefined; }