export = stringdex; declare namespace stringdex { /** * The client interface to Stringdex. */ interface Database { getData(colname: string): DataColumn|undefined; } /** * A compressed node in the search tree. * * This object logically addresses two interleaved trees: * a "prefix tree", and a "suffix tree". If you ask for * generic matches, you get both, but if you ask for one * that excludes suffix-only entries, you'll get prefixes * alone. */ interface Trie { matches(): RoaringBitmap; substringMatches(): AsyncGenerator; prefixMatches(): AsyncGenerator; keysExcludeSuffixOnly(): Uint8Array; childrenExcludeSuffixOnly(): [number, Promise][]; child(id: number): Promise?; } /** * The client interface to Stringdex. */ interface DataColumn { isEmpty(id: number): boolean; at(id: number): Promise; search(name: Uint8Array|string): Promise; searchLev(name: Uint8Array|string): AsyncGenerator; length: number, } /** * Callbacks for a host application and VFS backend. * * These functions are calleb with mostly-raw data, * except the JSONP wrapper is removed. For example, * a file with the contents `rr_('{"A":"B"}')` should, * after being pulled in, result in the `rr_` callback * being invoked. * * The success callbacks don't need to supply the name of * the file that succeeded, but, if you want successful error * reporting, you'll need to remember which files are * in flight and report the filename as the first parameter. */ interface Callbacks { /** * Load the root of the search database * @param {string} dataString */ rr_: function(string); err_rr_: function(any); /** * Load a nodefile in the search tree. * A node file may contain multiple nodes; * each node has five fields, separated by newlines. * @param {string} inputBase64 */ rn_: function(string); err_rn_: function(string, any); /** * Load a database column partition from a string * @param {string} dataString */ rd_: function(string); err_rd_: function(string, any); /** * Load a database column partition from base64 * @param {string} dataString */ rb_: function(string); err_rb_: function(string, any); }; /** * Hooks that a VFS layer must provide for stringdex to load data. * * When the root is loaded, the Callbacks object is provided. These * functions should result in callback functions being called with * the contents of the file, or in error callbacks being invoked with * the failed-to-load filename. */ interface Hooks { /** * The first function invoked as part of loading a search database. * This function must, eventually, invoke `rr_` with the string * representation of the root file (the function call wrapper, * `rr_('` and `')`, must be removed). * * The supplied callbacks object is used to feed search data back * to the search engine core. You have to store it, so that * loadTreeByHash and loadDataByNameAndHash can use it. * * If this fails, either throw an exception, or call `err_rr_` * with the error object. */ loadRoot: function(Callbacks); /** * Load a subtree file from the search index. * * If this function succeeds, call `rn_` on the callbacks * object. If it fails, call `err_rn_(hashHex, error)`. * * @param {string} hashHex */ loadTreeByHash: function(string); /** * Load a column partition from the search database. * * If this function succeeds, call `rd_` or `rb_` on the callbacks * object. If it fails, call `err_rd_(hashHex, error)`. or `err_rb_`. * To determine which one, the wrapping function call in the js file * specifies it. * * @param {string} columnName * @param {string} hashHex */ loadDataByNameAndHash: function(string, string); }; class RoaringBitmap { constructor(array: Uint8Array|null, start?: number); static makeSingleton(number: number); static everything(): RoaringBitmap; static empty(): RoaringBitmap; isEmpty(): boolean; union(that: RoaringBitmap): RoaringBitmap; intersection(that: RoaringBitmap): RoaringBitmap; contains(number: number): boolean; entries(): Generator; first(): number|null; consumed_len_bytes: number; }; type Stringdex = { /** * Initialize Stringdex with VFS hooks. * Returns a database that you can use. */ loadDatabase: function(Hooks): Promise, }; const Stringdex: Stringdex; const RoaringBitmap: Class; } declare global { interface Window { Stringdex: stringdex.Stringdex; RoaringBitmap: Class; StringdexOnload: Array?; }; }