// Copyright (c) Jupyter Development Team. // Distributed under the terms of the Modified BSD License. import { JSONObject } from '@phosphor/coreutils'; import { Token } from '@phosphor/application'; export * from './statedb'; /** * The command IDs used by the state database plugin. */ export namespace CommandIDs { export const clear: string = 'statedb:clear'; }; /* tslint:disable */ /** * The default state database token. */ export const IStateDB = new Token('jupyter.services.statedb'); /* tslint:enable */ /** */ export interface IStateItem { /** * The identifier key for a state item. */ id: string; /** * The data value for a state item. */ value: JSONObject; } /** * The description of a state database. */ export interface IStateDB { /** * The maximum allowed length of the data after it has been serialized. */ readonly maxLength: number; /** * The namespace prefix for all state database entries. * * #### Notes * This value should be set at instantiation and will only be used internally * by a state database. That means, for example, that an app could have * multiple, mutually exclusive state databases. */ readonly namespace: string; /** * Retrieve a saved bundle from the database. * * @param id - The identifier used to retrieve a data bundle. * * @returns A promise that bears a data payload if available. * * #### Notes * The `id` values of stored items in the state database are formatted: * `'namespace:identifier'`, which is the same convention that command * identifiers in JupyterLab use as well. While this is not a technical * requirement for `fetch()`, `remove()`, and `save()`, it *is* necessary for * using the `fetchNamespace()` method. * * The promise returned by this method may be rejected if an error occurs in * retrieving the data. Non-existence of an `id` will succeed, however. */ fetch(id: string): Promise; /** * Retrieve all the saved bundles for a namespace. * * @param namespace - The namespace to retrieve. * * @returns A promise that bears a collection data payloads for a namespace. * * #### Notes * Namespaces are entirely conventional entities. The `id` values of stored * items in the state database are formatted: `'namespace:identifier'`, which * is the same convention that command identifiers in JupyterLab use as well. * * If there are any errors in retrieving the data, they will be logged to the * console in order to optimistically return any extant data without failing. * This promise will always succeed. */ fetchNamespace(namespace: string): Promise; /** * Remove a value from the database. * * @param id - The identifier for the data being removed. * * @returns A promise that is rejected if remove fails and succeeds otherwise. */ remove(id: string): Promise; /** * Save a value in the database. * * @param id - The identifier for the data being saved. * * @param value - The data being saved. * * @returns A promise that is rejected if saving fails and succeeds otherwise. * * #### Notes * The `id` values of stored items in the state database are formatted: * `'namespace:identifier'`, which is the same convention that command * identifiers in JupyterLab use as well. While this is not a technical * requirement for `fetch()`, `remove()`, and `save()`, it *is* necessary for * using the `fetchNamespace()` method. */ save(id: string, value: JSONObject): Promise; }