179 lines
6.5 KiB
TypeScript
179 lines
6.5 KiB
TypeScript
|
|
import Database from './Database';
|
||
|
|
import Node from './Node';
|
||
|
|
export declare type ErrCallback = (err) => void;
|
||
|
|
export declare type NodeCallback = (err, node?: Node) => void;
|
||
|
|
export declare type CountCallback = (err, count?: number) => void;
|
||
|
|
export declare type NodeConstructor = new (...args: any[]) => Node;
|
||
|
|
/** KnowledgeDatabase Class. Represents a single KB instance or
|
||
|
|
* "slice" (e.g. `/jibo.loop` or `/snap`) with all it's nodes and
|
||
|
|
* assets. Uses a Database class instance (i.e. Node Embedded Database [NeDB]) to load/store
|
||
|
|
* the nodes.
|
||
|
|
*
|
||
|
|
* Not usually used directly. Instead A Model assembles one or more
|
||
|
|
* KnowledgeDatabase objects into a model and interaction with the
|
||
|
|
* databases is done through the Model.
|
||
|
|
*
|
||
|
|
* This version of the class is intended for the server side of the KB
|
||
|
|
* service which maniplates the on disk files using the Database class
|
||
|
|
* (which uses itself NeDB). WebClient is a subclass of this class
|
||
|
|
* and is what is used client side.
|
||
|
|
*
|
||
|
|
* @class KnowledgeDatabase
|
||
|
|
* @memberof jibo.kb
|
||
|
|
* @param {string} kbName Name of this KB slice.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
declare class KnowledgeDatabase {
|
||
|
|
kbName: string;
|
||
|
|
dbDirectory: string;
|
||
|
|
dbFilename: string;
|
||
|
|
database: Database;
|
||
|
|
/** Return the root directory for all KnowledgeDatabases.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase.getRootDirectory
|
||
|
|
* @static
|
||
|
|
* @returns {string} Full path to the root directory of all
|
||
|
|
* KnowledgeDatabases.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
static getRootDirectory(): string;
|
||
|
|
/** Calculate the full path to the directory of a KB slice.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase.getKbDirectory
|
||
|
|
* @static
|
||
|
|
* @param {string} kbName Name of KB slice.
|
||
|
|
* @returns {string} Full path to the KB slice directory.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
static getKbDirectory(kbName: string): string;
|
||
|
|
/** Calculate the full path to the NeDB file of a KB slice.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase.getKbFilename
|
||
|
|
* @static
|
||
|
|
* @param {string} kbName Name of KB slice.
|
||
|
|
* @returns {string} Full path to the NeDB `nodes` file.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
static getKbFilename(kbName: string): string;
|
||
|
|
/** Validate the kbName. We are starting out very conservatively.
|
||
|
|
* Throws an error if the name doesn't pass.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase.validateKbName
|
||
|
|
* @static
|
||
|
|
* @param {string} kbName Name of KB slice.
|
||
|
|
* @private
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
private static _validateKbName(kbName);
|
||
|
|
/** Determine if we are running on the robot or in the simulator.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#_onRobot
|
||
|
|
* @returns {boolean} `true` if on robot. `false` if in simulator.
|
||
|
|
* @static
|
||
|
|
* @private
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
private static _onRobot();
|
||
|
|
constructor(kbName: string);
|
||
|
|
/** Initalize this KnowledgeDatabase slice - Attach to or create
|
||
|
|
* the underlying file on disk (via the Database class).
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#init
|
||
|
|
* @param {Function} callback Called with (err) when done.
|
||
|
|
*/
|
||
|
|
init(callback: ErrCallback): void;
|
||
|
|
/** Load a node of a given ID.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#load
|
||
|
|
* @param {string} id ID of node to load via the KB service.
|
||
|
|
* @param {Function} callback Called with (err, node).
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
load(id: string, callback: NodeCallback): void;
|
||
|
|
/** Load the root node of this KB slice.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#loadRoot
|
||
|
|
* @param {Function} callback Called with (err, rootNode).
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
loadRoot(callback: NodeCallback): void;
|
||
|
|
/** Save a given node into this KB slice.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#save
|
||
|
|
* @param {jibo.kb.Node} node The node to be saved.
|
||
|
|
* @param {Function} callback Called with (err) when done.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
save(node: Node, callback: ErrCallback): void;
|
||
|
|
/** Remove a node from this KB slice.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#remove
|
||
|
|
* @param {string|jibo.kb.Node} idOrNode Id string or Node object to be
|
||
|
|
* removed.
|
||
|
|
* @param {Function} callback Called with (err) when done.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
remove(idOrNode: string | Node, callback: CountCallback): void;
|
||
|
|
/** Given an object from a Database (or from a web request),
|
||
|
|
* convert into a full Node object. Uses the Node Class registry
|
||
|
|
* on the `kb` object to find the proper Node subclass, if any.
|
||
|
|
* Also binds the Node to this KnowledgeDatabase.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#createNodeFromObject
|
||
|
|
* @param {Object} object Object to be converted to a Node
|
||
|
|
* object. Must have an `_id` property, should have a `type`
|
||
|
|
* property (defaults to `node`).
|
||
|
|
* @returns {jibo.kb.Node} The Node object, or a Node subclass object.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
createNodeFromObject(object: {
|
||
|
|
type: string;
|
||
|
|
}): Node;
|
||
|
|
/** Create a new Node object. Uses the Node Class registry on the
|
||
|
|
* `kb` object to find a proper Node subclass, if any. Also binds
|
||
|
|
* the Node to this KnowledgeDatabase.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#createNode
|
||
|
|
* @param {string|Class} nodeTypeOrClass A string stating the node
|
||
|
|
* type, or a Node Class constructor.
|
||
|
|
* @param {Object} [data] Inital node.data.
|
||
|
|
* @returns {jibo.kb.Node} The new Node or Node subclass object.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
createNode(nodeTypeOrClass: string | NodeConstructor, data?: any): Node;
|
||
|
|
/** Bind a given node to this KB slice.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#adoptNodeAsOurOwn
|
||
|
|
* @param {jibo.kb.Node} node Node to be adopted.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
adoptNodeAsOurOwn(node: Node): void;
|
||
|
|
/** Return the directory for this KnowledgeDatabase.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#getDirectory
|
||
|
|
* @returns {string} Full path to the directory of this
|
||
|
|
* KnowledgeDatabase.
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
getDirectory(): string;
|
||
|
|
/** Convert an idOrNode parameter to an id if it's a node.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#toId
|
||
|
|
* @param {string|jibo.kb.Node} Id string, or node with an ._id property.
|
||
|
|
* @returns {string} ID
|
||
|
|
* @private
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
protected toId(idOrNode: string | Node): string;
|
||
|
|
/** Create directory for this KnowledgeDatabase if it doesn't
|
||
|
|
* exist.
|
||
|
|
*
|
||
|
|
* @method jibo.kb.KnowledgeDatabase#_setupDirectory
|
||
|
|
* @param {Function} callback Called with (err) when done.
|
||
|
|
* @private
|
||
|
|
* @internal
|
||
|
|
*/
|
||
|
|
private _setupDirectory(callback);
|
||
|
|
}
|
||
|
|
export default KnowledgeDatabase;
|