| 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<RoaringBitmap>; | |
| prefixMatches(): AsyncGenerator<RoaringBitmap>; | |
| keysExcludeSuffixOnly(): Uint8Array; | |
| childrenExcludeSuffixOnly(): [number, Promise<Trie>][]; | |
| child(id: number): Promise<Trie>?; | |
| } | |
| /** | |
| * The client interface to Stringdex. | |
| */ | |
| interface DataColumn { | |
| isEmpty(id: number): boolean; | |
| at(id: number): Promise<Uint8Array>|Uint8Array|undefined; | |
| search(name: Uint8Array|string): Promise<Trie?>; | |
| searchLev(name: Uint8Array|string): AsyncGenerator<Trie>; | |
| 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<number>; | |
| 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<Database>, | |
| }; | |
| const Stringdex: Stringdex; | |
| const RoaringBitmap: Class<stringdex.RoaringBitmap>; | |
| } | |
| declare global { | |
| interface Window { | |
| Stringdex: stringdex.Stringdex; | |
| RoaringBitmap: Class<stringdex.RoaringBitmap>; | |
| StringdexOnload: Array<function(stringdex.Stringdex): any>?; | |
| }; | |
| } |