Files
modules/indexes-search/hyper-p2p-trie-prefix/docs/api.md
T
2026-05-20 23:36:32 -04:00

93 lines
1.9 KiB
Markdown

# API: hyper-p2p-trie-prefix
**Export:** `{ HyperP2PTriePrefix, PROTOCOL }`
**Protocol:** `trie-prefix/v1` (identifier only — **no P2P wire messages**)
## Overview
`HyperP2PTriePrefix` is a lowercase character trie supporting insert, prefix enumeration, membership test, and delete with path compaction. Ideal for autocomplete, command palettes, and namespace browsing in Bare/Pear UIs.
## Constructor
```js
const { HyperP2PTriePrefix } = require('hyper-p2p-trie-prefix')
const trie = new HyperP2PTriePrefix()
```
Root is internal `TrieNode` with `children: Map`, `terminal`, `count`.
## Methods
### `insert(word)`
- Normalizes to lowercase string
- **Returns:** `true` (always after successful path walk)
- **Emits:** `insert` only when word newly terminal
- **Increments:** `stats.inserted` on first insert
### `prefixSearch(prefix)`
- **Returns:** sorted list of full words sharing prefix (includes prefix itself if terminal)
- DFS from prefix node
- **Increments:** `stats.queries`
### `has(word)`
Exact membership in `_words` set.
### `remove(word)`
Deletes terminal flag, decrements `count` along path, prunes empty child nodes. Returns `false` if missing.
### `list()`
Sorted all words.
### `getStats()`
```js
{ inserted, queries, words, protocol }
```
### `ready()` / `close()`
`close()` resets root trie and `_words`, emits `closed`.
## TrieNode fields
| Field | Meaning |
|-------|---------|
| `children` | `Map<char, TrieNode>` |
| `terminal` | Word ends here |
| `count` | Prefix reference count for compaction |
## Events
| Event | Payload |
|-------|---------|
| `insert` | `{ word }` |
| `closed` | — |
## Wire messages
None.
## Errors
`assertNonEmpty` on `insert`.
## Example
```js
const trie = new HyperP2PTriePrefix()
trie.insert('hyper')
trie.insert('hyperbee')
console.log(trie.prefixSearch('hyp'))
```
## Testing
```bash
npm install && npm test
```