albex 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG.md +223 -0
  2. package/README.md +84 -30
  3. package/dist/_generated/inline-wasm.d.ts +2 -0
  4. package/dist/_generated/inline-wasm.d.ts.map +1 -0
  5. package/dist/_generated/inline-wasm.js +9 -0
  6. package/dist/_generated/inline-wasm.js.map +1 -0
  7. package/dist/albex-worker.d.ts +65 -2
  8. package/dist/albex-worker.d.ts.map +1 -1
  9. package/dist/albex-worker.js +98 -21
  10. package/dist/albex-worker.js.map +1 -1
  11. package/dist/albex.d.ts +250 -42
  12. package/dist/albex.d.ts.map +1 -1
  13. package/dist/albex.js +492 -120
  14. package/dist/albex.js.map +1 -1
  15. package/dist/errors.d.ts +35 -4
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js +38 -3
  18. package/dist/errors.js.map +1 -1
  19. package/dist/index.d.ts +47 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +82 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/inline.d.ts +10 -0
  24. package/dist/inline.d.ts.map +1 -0
  25. package/dist/inline.js +17 -0
  26. package/dist/inline.js.map +1 -0
  27. package/dist/persistence.js +2 -2
  28. package/dist/pool/coordinator.d.ts +14 -6
  29. package/dist/pool/coordinator.d.ts.map +1 -1
  30. package/dist/pool/coordinator.js +65 -28
  31. package/dist/pool/coordinator.js.map +1 -1
  32. package/dist/profile.js +2 -2
  33. package/dist/resource-manager.js +2 -2
  34. package/dist/tiered-store.js +2 -2
  35. package/dist/wasm-bindings.d.ts +50 -1
  36. package/dist/wasm-bindings.d.ts.map +1 -1
  37. package/dist/wasm-bindings.js +20 -12
  38. package/dist/wasm-bindings.js.map +1 -1
  39. package/dist/worker-protocol.d.ts +23 -2
  40. package/dist/worker-protocol.d.ts.map +1 -1
  41. package/dist/worker-protocol.js +2 -2
  42. package/dist/worker-runtime.js +17 -2
  43. package/dist/worker-runtime.js.map +1 -1
  44. package/package.json +14 -9
  45. package/src/_generated/inline-wasm.ts +9 -0
  46. package/src/albex-worker.ts +103 -18
  47. package/src/albex.ts +3053 -2524
  48. package/src/errors.ts +49 -4
  49. package/src/index.ts +81 -0
  50. package/src/inline.ts +9 -0
  51. package/src/pool/coordinator.ts +61 -34
  52. package/src/wasm-bindings.ts +78 -12
  53. package/src/worker-protocol.ts +12 -2
  54. package/src/worker-runtime.ts +16 -1
  55. package/wasm/pkg/albex_pdf.wasm +0 -0
  56. package/wasm/pkg/albex_wasm.wasm +0 -0
  57. package/wasm/pkg/albex_wasm_bg.wasm +0 -0
  58. package/wasm/pkg/albex_wasm_simd.wasm +0 -0
package/dist/inline.js ADDED
@@ -0,0 +1,17 @@
1
+ /*!
2
+ * albex v0.7.0
3
+ * Local full-text search for documents — runs entirely in the browser, no server, no upload. Zero-config: the WASM core is embedded (~19 KB gzipped), so `npm install albex` then `new AlbexEngine()` works in any bundler, esbuild/Angular included.
4
+ * (c) 2026 RafaCalRob
5
+ * @license MIT
6
+ * https://github.com/RafaCalRob/Albex#readme
7
+ */
8
+ /**
9
+ * `albex/inline` — compatibility alias for the default entry.
10
+ *
11
+ * The embedded core is now the DEFAULT (`import { AlbexEngine } from 'albex'`
12
+ * already needs no setup), so this subpath exists only so existing
13
+ * `from 'albex/inline'` imports keep resolving. It re-exports the default
14
+ * entry verbatim — there is no behavioural difference.
15
+ */
16
+ export * from './index.js';
17
+ //# sourceMappingURL=inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,cAAc,YAAY,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * albex v0.6.0
3
- * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
2
+ * albex v0.7.0
3
+ * Local full-text search for documents — runs entirely in the browser, no server, no upload. Zero-config: the WASM core is embedded (~19 KB gzipped), so `npm install albex` then `new AlbexEngine()` works in any bundler, esbuild/Angular included.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
6
6
  * https://github.com/RafaCalRob/Albex#readme
@@ -22,7 +22,6 @@
22
22
  * variant in a future iteration) but defaults to off.
23
23
  */
24
24
  import type { AlbexOptions, IndexedDocument, SearchOptions, SearchResult, EngineStats, SearchStats } from '../albex.js';
25
- import type { Tier } from '../profile.js';
26
25
  export interface AlbexPoolOptions extends AlbexOptions {
27
26
  /** Worker runtime URL (the `worker-runtime.js` from this package). */
28
27
  workerUrl: string | URL;
@@ -44,7 +43,9 @@ export declare class AlbexPool {
44
43
  private _docsCache;
45
44
  private _rrCursor;
46
45
  private _lastSearch;
47
- private _tier;
46
+ /** Global result cap applied AFTER the cross-shard merge. Mirrors the
47
+ * last `setMaxResults` call (the WASM engine default is 50). */
48
+ private _maxResults;
48
49
  constructor(opts: AlbexPoolOptions);
49
50
  init(): Promise<void>;
50
51
  private _spawnShard;
@@ -56,10 +57,17 @@ export declare class AlbexPool {
56
57
  * Map-reduce search:
57
58
  * 1. broadcast the query to every shard,
58
59
  * 2. each shard runs its local Bloom→Bitap→top-K,
59
- * 3. coordinator merges the K-best from each shard,
60
+ * 3. coordinator merges the K-best from each shard, deduplicating
61
+ * identical hits (same document name, chunk id and match offset —
62
+ * the case where the same file was indexed into two shards),
60
63
  * 4. global top-K returned in descending score order.
61
64
  *
62
65
  * Capped to `setMaxResults` results (default 50) AFTER merge.
66
+ *
67
+ * Per-shard search stats are requested in the same posting batch as the
68
+ * search itself: each worker processes its queue in arrival order, so the
69
+ * stats reply is guaranteed to belong to THIS query even when several
70
+ * `search()` calls overlap.
63
71
  */
64
72
  search(query: string, opts?: SearchOptions): Promise<SearchResult[]>;
65
73
  /**
@@ -81,7 +89,9 @@ export declare class AlbexPool {
81
89
  removeDocument(id: string): Promise<boolean>;
82
90
  compact(): Promise<void>;
83
91
  reset(): Promise<void>;
84
- /** Aggregate engine stats across all shards. */
92
+ /** Aggregate engine stats across all shards. Capacities are the RUNTIME
93
+ * per-shard capacities summed (each shard was initialised with the same
94
+ * `capacity` option, forwarded through the wire protocol). */
85
95
  getStats(): Promise<EngineStats>;
86
96
  getLastSearchStats(): SearchStats | null;
87
97
  getDocuments(): Promise<readonly IndexedDocument[]>;
@@ -91,8 +101,6 @@ export declare class AlbexPool {
91
101
  setLanguage(lang: 'off' | 'es'): Promise<void>;
92
102
  /** Number of shards currently running. */
93
103
  get workerCount(): number;
94
- /** Tier loaded by the shards (same value across all of them). */
95
- get tier(): Tier | null;
96
104
  [Symbol.dispose](): void;
97
105
  }
98
106
  //# sourceMappingURL=coordinator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/pool/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS1C,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,sEAAsE;IACtE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;CAChC;AAkBD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,KAAK,CAAqB;gBAEtB,IAAI,EAAE,gBAAgB;IAI5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC3B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAYZ,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAerD;;;;;;;;OAQG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAkC9E;;;;;;OAMG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,aAAa,CAAC,YAAY,CAAC;IAK9F;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,aAAa,CAAC,YAAY,CAAC;IAQzF;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,gDAAgD;IAC1C,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAmBtC,kBAAkB,IAAI,WAAW,GAAG,IAAI;IAIlC,YAAY,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAInD,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAS,OAAO,CAAC,IAAI,CAAC;IACnD,YAAY,CAAC,CAAC,EAAE,MAAM,GAAgB,OAAO,CAAC,IAAI,CAAC;IACnD,aAAa,CAAC,CAAC,EAAE,MAAM,GAAe,OAAO,CAAC,IAAI,CAAC;IACnD,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAQ,OAAO,CAAC,IAAI,CAAC;IAEzD,0CAA0C;IAC1C,IAAI,WAAW,IAAI,MAAM,CAAgC;IAEzD,iEAAiE;IACjE,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAuB;IAE9C,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CASzB"}
1
+ {"version":3,"file":"coordinator.d.ts","sourceRoot":"","sources":["../../src/pool/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EACf,aAAa,EACb,YAAY,EACZ,WAAW,EACX,WAAW,EACZ,MAAM,aAAa,CAAC;AASrB,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IACpD,sEAAsE;IACtE,SAAS,EAAE,MAAM,GAAG,GAAG,CAAC;IACxB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAAC;CAChC;AAkBD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAA4B;IAC/C;oEACgE;IAChE,OAAO,CAAC,WAAW,CAAM;gBAEb,IAAI,EAAE,gBAAgB;IAI5B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC3B,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAYZ,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAkBrD;;;;;;;;;;;;;;;OAeG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA+C9E;;;;;;OAMG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,aAAa,CAAC,YAAY,CAAC;IAK9F;;OAEG;IACI,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,aAAa,CAAC,YAAY,CAAC;IAQzF;;;OAGG;IACG,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B;;kEAE8D;IACxD,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC;IAoBtC,kBAAkB,IAAI,WAAW,GAAG,IAAI;IAIlC,YAAY,IAAI,OAAO,CAAC,SAAS,eAAe,EAAE,CAAC;IAInD,YAAY,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAS,OAAO,CAAC,IAAI,CAAC;IACnD,YAAY,CAAC,CAAC,EAAE,MAAM,GAAgB,OAAO,CAAC,IAAI,CAAC;IACnD,aAAa,CAAC,CAAC,EAAE,MAAM,GAAe,OAAO,CAAC,IAAI,CAAC;IAMnD,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,GAAQ,OAAO,CAAC,IAAI,CAAC;IAEzD,0CAA0C;IAC1C,IAAI,WAAW,IAAI,MAAM,CAAgC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;CASzB"}
@@ -22,7 +22,7 @@
22
22
  * variant in a future iteration) but defaults to off.
23
23
  */
24
24
  import { detectProfile, pickWorkerCount } from '../profile.js';
25
- import { AlbexInitError, AlbexError } from '../errors.js';
25
+ import { AlbexInitError, AlbexError, assertFileSizeWithinLimit } from '../errors.js';
26
26
  let _poolSearchStreamWarned = false;
27
27
  export class AlbexPool {
28
28
  _opts;
@@ -30,7 +30,9 @@ export class AlbexPool {
30
30
  _docsCache = [];
31
31
  _rrCursor = 0;
32
32
  _lastSearch = null;
33
- _tier = null;
33
+ /** Global result cap applied AFTER the cross-shard merge. Mirrors the
34
+ * last `setMaxResults` call (the WASM engine default is 50). */
35
+ _maxResults = 50;
34
36
  constructor(opts) {
35
37
  this._opts = opts;
36
38
  }
@@ -46,21 +48,22 @@ export class AlbexPool {
46
48
  if (this._opts.mode === 'shared' && !profile.coopCoep) {
47
49
  console.warn('[albex] pool mode=shared requested but cross-origin isolation is not active; falling back to replicated');
48
50
  }
49
- const shardOpts = {
50
- wasmUrl: this._opts.wasmUrl,
51
- wasmBaseUrl: this._opts.wasmBaseUrl,
52
- pdfWasmUrl: this._opts.pdfWasmUrl,
53
- tier: this._opts.tier,
54
- simd: this._opts.simd,
55
- };
51
+ // Forward every serializable engine option to the shards; strip the
52
+ // pool-only fields (workerUrl/workers/mode) and anything non-clonable.
53
+ // Same policy as AlbexEngineWorker.init (audit 1.4).
54
+ const shardOpts = {};
55
+ for (const [k, v] of Object.entries(this._opts)) {
56
+ if (k === 'workerUrl' || k === 'workers' || k === 'mode')
57
+ continue;
58
+ if (v === undefined || typeof v === 'function')
59
+ continue;
60
+ shardOpts[k] = v;
61
+ }
56
62
  for (let i = 0; i < n; i++) {
57
63
  const shard = this._spawnShard();
58
64
  await this._send(shard, { kind: 'init', opts: shardOpts });
59
65
  this._shards.push(shard);
60
66
  }
61
- // Tier is the same across shards — capture it from shard 0 stats.
62
- const stats0 = await this._send(this._shards[0], { kind: 'getStats' });
63
- this._tier = stats0.tier;
64
67
  }
65
68
  // ── Shard plumbing ─────────────────────────────────────────────────────
66
69
  _spawnShard() {
@@ -109,6 +112,9 @@ export class AlbexPool {
109
112
  async indexFile(file) {
110
113
  if (this._shards.length === 0)
111
114
  throw new AlbexInitError('Pool not initialised');
115
+ // Size guard BEFORE reading — same limit the shard engine enforces, but
116
+ // checked here so an oversized file is never buffered on the main thread.
117
+ assertFileSizeWithinLimit(file, this._opts.maxFileBytes);
112
118
  const idx = this._rrCursor++ % this._shards.length;
113
119
  const shard = this._shards[idx];
114
120
  const buffer = await file.arrayBuffer();
@@ -121,25 +127,50 @@ export class AlbexPool {
121
127
  * Map-reduce search:
122
128
  * 1. broadcast the query to every shard,
123
129
  * 2. each shard runs its local Bloom→Bitap→top-K,
124
- * 3. coordinator merges the K-best from each shard,
130
+ * 3. coordinator merges the K-best from each shard, deduplicating
131
+ * identical hits (same document name, chunk id and match offset —
132
+ * the case where the same file was indexed into two shards),
125
133
  * 4. global top-K returned in descending score order.
126
134
  *
127
135
  * Capped to `setMaxResults` results (default 50) AFTER merge.
136
+ *
137
+ * Per-shard search stats are requested in the same posting batch as the
138
+ * search itself: each worker processes its queue in arrival order, so the
139
+ * stats reply is guaranteed to belong to THIS query even when several
140
+ * `search()` calls overlap.
128
141
  */
129
142
  async search(query, opts = {}) {
130
143
  if (this._shards.length === 0)
131
144
  return [];
132
145
  const t0 = performance.now();
133
- const buckets = await Promise.all(this._shards.map(s => this._send(s, { kind: 'search', query, options: opts })));
134
- // Merge: simple flatten + sort (descending). Each shard already returned
135
- // up to its local cap; the global cap could be different but in practice
136
- // matches the per-shard cap.
137
- const merged = buckets.flat();
146
+ // Post `search` and `getLastSearchStats` back-to-back (synchronously,
147
+ // per shard) so no other request can slot between them in the worker's
148
+ // FIFO queue the stats round can't race a subsequent search.
149
+ const perShard = await Promise.all(this._shards.map(s => {
150
+ const results = this._send(s, { kind: 'search', query, options: opts });
151
+ const stats = this._send(s, { kind: 'getLastSearchStats' });
152
+ return Promise.all([results, stats]);
153
+ }));
154
+ // Merge: flatten + dedup + sort (descending) + global cap. Shard-local
155
+ // docIds collide across shards, so the dedup identity also includes the
156
+ // document name: it only collapses true duplicates (the same document
157
+ // indexed into more than one shard yields identical name/chunkId/offset).
158
+ const seen = new Set();
159
+ const merged = [];
160
+ for (const [bucket] of perShard) {
161
+ for (const r of bucket) {
162
+ const key = `${r.documentName}:${r.chunkId}:${r.matchStart}`;
163
+ if (!seen.has(key)) {
164
+ seen.add(key);
165
+ merged.push(r);
166
+ }
167
+ }
168
+ }
138
169
  merged.sort((a, b) => b.score - a.score);
170
+ const capped = merged.slice(0, this._maxResults);
139
171
  // Aggregate search stats across shards.
140
- const stats = await Promise.all(this._shards.map(s => this._send(s, { kind: 'getLastSearchStats' })));
141
172
  let bloomTested = 0, bloomPassed = 0, bitapMatched = 0;
142
- for (const s of stats) {
173
+ for (const [, s] of perShard) {
143
174
  if (!s)
144
175
  continue;
145
176
  bloomTested += s.bloomTested;
@@ -149,10 +180,10 @@ export class AlbexPool {
149
180
  this._lastSearch = {
150
181
  query,
151
182
  timeMs: performance.now() - t0,
152
- results: merged.length,
183
+ results: capped.length,
153
184
  bloomTested, bloomPassed, bitapMatched,
154
185
  };
155
- return merged;
186
+ return capped;
156
187
  }
157
188
  /**
158
189
  * Cooperative variant of `search`. The coordinator awaits every shard,
@@ -200,11 +231,13 @@ export class AlbexPool {
200
231
  for (const s of this._shards)
201
232
  s.docCount = 0;
202
233
  }
203
- /** Aggregate engine stats across all shards. */
234
+ /** Aggregate engine stats across all shards. Capacities are the RUNTIME
235
+ * per-shard capacities summed (each shard was initialised with the same
236
+ * `capacity` option, forwarded through the wire protocol). */
204
237
  async getStats() {
205
238
  const all = await this._broadcast({ kind: 'getStats' });
206
239
  let documents = 0, chunks = 0, textUsed = 0, textCapacity = 0, wasmMemoryBytes = 0;
207
- let maxChunks = 0, maxDocs = 0;
240
+ let maxChunks = 0, maxDocs = 0, namePoolBytes = 0;
208
241
  for (const s of all) {
209
242
  documents += s.documents;
210
243
  chunks += s.chunks;
@@ -213,10 +246,11 @@ export class AlbexPool {
213
246
  wasmMemoryBytes += s.wasmMemoryBytes;
214
247
  maxChunks += s.maxChunks;
215
248
  maxDocs += s.maxDocs;
249
+ namePoolBytes += s.namePoolBytes;
216
250
  }
217
251
  return {
218
252
  documents, chunks, textUsed, textCapacity, wasmMemoryBytes,
219
- tier: this._tier, maxChunks, maxDocs,
253
+ maxChunks, maxDocs, namePoolBytes,
220
254
  };
221
255
  }
222
256
  getLastSearchStats() {
@@ -227,12 +261,15 @@ export class AlbexPool {
227
261
  }
228
262
  async setMaxErrors(n) { await this._broadcast({ kind: 'setMaxErrors', n }); }
229
263
  async setThreshold(n) { await this._broadcast({ kind: 'setThreshold', n }); }
230
- async setMaxResults(n) { await this._broadcast({ kind: 'setMaxResults', n }); }
264
+ async setMaxResults(n) {
265
+ // Track the effective cap (same clamp as the WASM engine) so search()
266
+ // can enforce it globally after the cross-shard merge.
267
+ this._maxResults = Math.max(1, Math.min(200, Math.floor(n)));
268
+ await this._broadcast({ kind: 'setMaxResults', n });
269
+ }
231
270
  async setLanguage(lang) { await this._broadcast({ kind: 'setLanguage', lang }); }
232
271
  /** Number of shards currently running. */
233
272
  get workerCount() { return this._shards.length; }
234
- /** Tier loaded by the shards (same value across all of them). */
235
- get tier() { return this._tier; }
236
273
  [Symbol.dispose]() {
237
274
  for (const s of this._shards) {
238
275
  for (const [, p] of s.pending)
@@ -1 +1 @@
1
- {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/pool/coordinator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/pool/coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAqCrF,IAAI,uBAAuB,GAAG,KAAK,CAAC;AAEpC,MAAM,OAAO,SAAS;IACH,KAAK,CAAmB;IACjC,OAAO,GAAY,EAAE,CAAC;IACtB,UAAU,GAAsB,EAAE,CAAC;IACnC,SAAS,GAAG,CAAC,CAAC;IACd,WAAW,GAAuB,IAAI,CAAC;IAC/C;oEACgE;IACxD,WAAW,GAAG,EAAE,CAAC;IAEzB,YAAY,IAAsB;QAChC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;QACtC,MAAM,CAAC,GACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC;YAC9D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;YAChC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE/B,uEAAuE;QACvE,wEAAwE;QACxE,yEAAyE;QACzE,kCAAkC;QAClC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,yGAAyG,CAAC,CAAC;QAC1H,CAAC;QAED,oEAAoE;QACpE,uEAAuE;QACvE,qDAAqD;QACrD,MAAM,SAAS,GAAiB,EAAE,CAAC;QACnC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,MAAM;gBAAE,SAAS;YACnE,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,UAAU;gBAAE,SAAS;YACxD,SAAqC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACjC,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,0EAA0E;IAElE,WAAW;QACjB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,MAAM,KAAK,GAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC5E,MAAM,CAAC,SAAS,GAAG,CAAC,EAAgC,EAAE,EAAE;YACtD,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,CAAC;gBAAE,OAAO;YACf,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE;gBAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;gBAC1B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC;QACF,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO;gBAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjD,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CACX,KAAY,EACZ,EAAY,EACZ,WAA2B,EAAE;QAE7B,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;QACtC,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAA+B,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5E,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,UAAU,CAAc,EAAY;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;IAEO,UAAU,CAAC,CAAmD;QACpE,oEAAoE;QACpE,sEAAsE;QACtE,+BAA+B;QAC/B,IAAI,CAAC,CAAC,IAAI;YAAE,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACjC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;QAClB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,yEAAyE;IAEzE,KAAK,CAAC,SAAS,CAAC,IAAU;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,sBAAsB,CAAC,CAAC;QAChF,wEAAwE;QACxE,0EAA0E;QAC1E,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAC1B,KAAK,EACL,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAC9C,CAAC,MAAM,CAAC,CACT,CAAC;QACF,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,OAAsB,EAAE;QAClD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC7B,sEAAsE;QACtE,uEAAuE;QACvE,+DAA+D;QAC/D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACnB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAiB,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxF,MAAM,KAAK,GAAK,IAAI,CAAC,KAAK,CAAqB,CAAC,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAClF,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,CAAU,CAAC,CAAC;QAChD,CAAC,CAAC,CACH,CAAC;QAEF,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,0EAA0E;QAC1E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YAChC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjD,wCAAwC;QACxC,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;QACvD,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,WAAW,IAAK,CAAC,CAAC,WAAW,CAAC;YAC9B,WAAW,IAAK,CAAC,CAAC,WAAW,CAAC;YAC9B,YAAY,IAAI,CAAC,CAAC,YAAY,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG;YACjB,KAAK;YACL,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;YAC9B,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,WAAW,EAAE,WAAW,EAAE,YAAY;SACvC,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,CAAC,iBAAiB,CAAC,KAAa,EAAE,OAAsB,EAAE;QAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,YAAY,CAAC,KAAa,EAAE,OAAsB,EAAE;QACzD,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC7B,uBAAuB,GAAG,IAAI,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,wGAAwG,CAAC,CAAC;QACzH,CAAC;QACD,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,EAAU;QAC7B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAU,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5E,IAAI,EAAE,EAAE,CAAC;gBACP,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBACjD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;gBACrF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO;YAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC/C,CAAC;IAED;;kEAE8D;IAC9D,KAAK,CAAC,QAAQ;QACZ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAc,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACrE,IAAI,SAAS,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC;QACnF,IAAI,SAAS,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,aAAa,GAAG,CAAC,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,SAAS,IAAU,CAAC,CAAC,SAAS,CAAC;YAC/B,MAAM,IAAa,CAAC,CAAC,MAAM,CAAC;YAC5B,QAAQ,IAAW,CAAC,CAAC,QAAQ,CAAC;YAC9B,YAAY,IAAO,CAAC,CAAC,YAAY,CAAC;YAClC,eAAe,IAAI,CAAC,CAAC,eAAe,CAAC;YACrC,SAAS,IAAU,CAAC,CAAC,SAAS,CAAC;YAC/B,OAAO,IAAY,CAAC,CAAC,OAAO,CAAC;YAC7B,aAAa,IAAM,CAAC,CAAC,aAAa,CAAC;QACrC,CAAC;QACD,OAAO;YACL,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe;YAC1D,SAAS,EAAE,OAAO,EAAE,aAAa;SAClC,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,CAAgB,IAAyB,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClH,KAAK,CAAC,YAAY,CAAC,CAAS,IAAgC,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjH,KAAK,CAAC,aAAa,CAAC,CAAS;QAC3B,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,IAAkB,IAAwB,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnH,0CAA0C;IAC1C,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzD,CAAC,MAAM,CAAC,OAAO,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO;gBAAE,CAAC,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;YACrF,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;IACvB,CAAC;CACF"}
package/dist/profile.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * albex v0.6.0
3
- * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
2
+ * albex v0.7.0
3
+ * Local full-text search for documents — runs entirely in the browser, no server, no upload. Zero-config: the WASM core is embedded (~19 KB gzipped), so `npm install albex` then `new AlbexEngine()` works in any bundler, esbuild/Angular included.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
6
6
  * https://github.com/RafaCalRob/Albex#readme
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * albex v0.6.0
3
- * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
2
+ * albex v0.7.0
3
+ * Local full-text search for documents — runs entirely in the browser, no server, no upload. Zero-config: the WASM core is embedded (~19 KB gzipped), so `npm install albex` then `new AlbexEngine()` works in any bundler, esbuild/Angular included.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
6
6
  * https://github.com/RafaCalRob/Albex#readme
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * albex v0.6.0
3
- * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
2
+ * albex v0.7.0
3
+ * Local full-text search for documents — runs entirely in the browser, no server, no upload. Zero-config: the WASM core is embedded (~19 KB gzipped), so `npm install albex` then `new AlbexEngine()` works in any bundler, esbuild/Angular included.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
6
6
  * https://github.com/RafaCalRob/Albex#readme
@@ -13,7 +13,18 @@ export interface AlbexWasmExports {
13
13
  readonly memory: WebAssembly.Memory;
14
14
  abiVersion(): number;
15
15
  getBuffer(size: number): number;
16
+ /** Reset with the std default capacities (128 docs · 100k chunks · 16 MB
17
+ * text · 32 KB names) — identical behaviour to every pre-ABI-7 release. */
16
18
  init(): void;
19
+ /** (Re-)initialise the engine with runtime capacities (ABI 7, decision
20
+ * A16). Allocates the capacity-dependent pools on the WASM heap. Returns
21
+ * 1 on success; 0 on invalid parameters (floors/ceilings documented in
22
+ * wasm/src/lib.rs: ≥1 doc, docs ≤ 65 536, chunks ≥ docs and ≤ 4 M, text
23
+ * pool 4 KiB–1 GiB, name pool 256 B–16 MiB) or on allocation failure —
24
+ * never traps. Re-init with the same capacities is a plain reset; with
25
+ * different capacities the pools are freed and re-allocated (no leak,
26
+ * but the linear-memory high-water mark never shrinks). */
27
+ initWithCapacity(maxDocs: number, maxChunks: number, textPoolBytes: number, namePoolBytes: number): number;
17
28
  /** Reset the streaming FNV-1a 64-bit hash state. Optional on the first
18
29
  * hash of a session because the static initialiser is also FNV_OFFSET. */
19
30
  hashBegin(): void;
@@ -39,12 +50,26 @@ export interface AlbexWasmExports {
39
50
  getQueryBranchCount(): number;
40
51
  getQueryBranchPattern(i: number): number;
41
52
  selectQueryBranch(i: number): number;
53
+ /** Bitflags of what the most recent prepareQuery dropped or clipped
54
+ * (ABI 5): 1 = OR branches beyond 8 discarded, 2 = tokens dropped
55
+ * (> 4 per branch) or clipped (> 64 bytes), 4 = raw query cut at
56
+ * 1024 bytes. 0 = compiled in full. */
57
+ getQueryTruncationFlags(): number;
42
58
  setPattern(len: number): number;
43
59
  search(): number;
44
60
  searchBegin(): number;
45
61
  searchSlice(maxChunks: number): number;
46
62
  getSearchCursor(): number;
47
63
  getSearchTotal(): number;
64
+ /** Base pointer of the `#[repr(C)]` RESULTS array (ABI 6). Read
65
+ * `getResultCount()` records of `getResultStride()` bytes each with one
66
+ * DataView pass instead of ~12 frontier calls per result. Field offsets
67
+ * are documented (and compile-time asserted) in wasm/src/lib.rs. Copy
68
+ * everything out before any call that could grow WASM memory. */
69
+ getResultsPtr(): number;
70
+ /** Byte stride between consecutive RESULTS records (= sizeof(DocMatch),
71
+ * 60 today). Exported so the host never hardcodes the struct size. */
72
+ getResultStride(): number;
48
73
  getResultCount(): number;
49
74
  getResultDocId(i: number): number;
50
75
  getResultLocation(i: number): number;
@@ -91,6 +116,24 @@ export interface AlbexWasmExports {
91
116
  isDocDeleted(index: number): number;
92
117
  removeDocument(docId: number): number;
93
118
  compact(): void;
119
+ /** First CHUNKS[] index for the document at slot `index` (= chunk_start).
120
+ * `ord = resultChunkIdx - getDocChunkBase(slot)` gives the doc-relative
121
+ * ordinal of a search hit. */
122
+ getDocChunkBase(index: number): number;
123
+ /** `location` (paragraph/page) of the `ord`-th chunk; u32::MAX if OOB. */
124
+ getChunkLocationAt(index: number, ord: number): number;
125
+ /** Byte length of the `ord`-th chunk's text; 0 if OOB. */
126
+ getChunkByteLenAt(index: number, ord: number): number;
127
+ /** Copy the `ord`-th chunk's UTF-8 text into the scratchpad; returns byte
128
+ * length (0 if OOB). Lets a host enumerate a doc's authoritative chunks
129
+ * right after indexing, with no query. */
130
+ getChunkTextAt(index: number, ord: number): number;
131
+ /** Batch chunk enumeration (ABI 6). Packs up to `maxChunks` records
132
+ * `[u32 text_len][u32 location][text bytes]` (LE, tightly packed) into
133
+ * the scratchpad starting at ordinal `startOrd`; returns how many were
134
+ * written. One frontier call per scratchpad-full instead of 2-3 per
135
+ * chunk. */
136
+ listChunksBatch(index: number, startOrd: number, maxChunks: number): number;
94
137
  /**
95
138
  * Per-document content hash (snapshot v2). Returns a pointer to 8 bytes
96
139
  * holding the FNV-1a 64-bit hash of the original file bytes, or 0 if the
@@ -106,7 +149,6 @@ export interface AlbexWasmExports {
106
149
  * pending slot. endDocument() then writes it into doc_hashes[]. */
107
150
  setDocumentContentHash(len: number): void;
108
151
  setLanguage(lang: number): void;
109
- getTier(): number;
110
152
  getMaxChunks(): number;
111
153
  getMaxDocs(): number;
112
154
  getNameCapacity(): number;
@@ -114,6 +156,13 @@ export interface AlbexWasmExports {
114
156
  getChunkStructSize(): number;
115
157
  setCandidateMask(byteLen: number): void;
116
158
  clearCandidateMask(): void;
159
+ /** Low 32 bits of the active pattern's aggregate character Bloom
160
+ * (ABI 6). Computed WASM-side in setPattern through the same pipeline
161
+ * searchBegin uses (split → optional stemming → fold), so the GPU
162
+ * pre-filter tests exactly the bits the CPU path would. */
163
+ getPatternBloomLo(): number;
164
+ /** High 32 bits of the active pattern's aggregate character Bloom. */
165
+ getPatternBloomHi(): number;
117
166
  }
118
167
  export interface AlbexPdfExports {
119
168
  readonly memory: WebAssembly.Memory;
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-bindings.d.ts","sourceRoot":"","sources":["../src/wasm-bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAGpC,UAAU,IAAI,MAAM,CAAC;IACrB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,IAAI,IAAI,IAAI,CAAC;IAEb;8EAC0E;IAC1E,SAAS,IAAI,IAAI,CAAC;IAClB;kEAC8D;IAC9D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;+EAC2E;IAC3E,UAAU,IAAI,IAAI,CAAC;IAGnB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,IAAI,MAAM,CAAC;IACxB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,IAAI,MAAM,CAAC;IAGtB,SAAS,IAAI,MAAM,CAAC;IACpB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,cAAc,IAAI,IAAI,CAAC;IAGvB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAGjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,IAAI,MAAM,CAAC;IACvB,mBAAmB,IAAI,MAAM,CAAC;IAC9B,qBAAqB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAGrC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,MAAM,IAAI,MAAM,CAAC;IAEjB,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,eAAe,IAAI,MAAM,CAAC;IAC1B,cAAc,IAAI,MAAM,CAAC;IAGzB,cAAc,IAAI,MAAM,CAAC;IACzB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrC,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvC,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpD,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClD,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACnE,sBAAsB,IAAI,MAAM,CAAC;IAGjC,kBAAkB,IAAI,MAAM,CAAC;IAC7B,kBAAkB,IAAI,MAAM,CAAC;IAC7B,mBAAmB,IAAI,MAAM,CAAC;IAC9B,aAAa,IAAI,MAAM,CAAC;IACxB,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,IAAI,MAAM,CAAC;IACtB,eAAe,IAAI,MAAM,CAAC;IAC1B;;;6EAGyE;IACzE,oBAAoB,IAAI,MAAM,CAAC;IAG/B,YAAY,IAAI,MAAM,CAAC;IACvB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACtD;;qDAEiD;IACjD,YAAY,IAAI,MAAM,CAAC;IACvB;kEAC8D;IAC9D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC;;;gCAG4B;IAC5B,aAAa,IAAI,MAAM,CAAC;IAGxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACxC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACpC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;IAEhB;;;;;;OAMG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5C;mEAC+D;IAC/D,oBAAoB,IAAI,MAAM,CAAC;IAC/B;uEACmE;IACnE,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhC,OAAO,IAAI,MAAM,CAAC;IAClB,YAAY,IAAI,MAAM,CAAC;IACvB,UAAU,IAAI,MAAM,CAAC;IACrB,eAAe,IAAI,MAAM,CAAC;IAG1B,YAAY,IAAI,MAAM,CAAC;IACvB,kBAAkB,IAAI,MAAM,CAAC;IAC7B,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,kBAAkB,IAAI,IAAI,CAAC;CAC5B;AAMD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC;IAEpC;0DACsD;IACtD,UAAU,IAAI,MAAM,CAAC;IAErB,sEAAsE;IACtE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC;;;;;;;;OAQG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAEhC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,WAAW,IAAI,MAAM,CAAC;IACtB,WAAW,IAAI,MAAM,CAAC;IAQtB,2EAA2E;IAC3E,YAAY,IAAI,MAAM,CAAC;IAEvB;;;;;;;;;;;;;;;OAeG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAExC,8EAA8E;IAC9E,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC,kDAAkD;IAClD,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC,4EAA4E;IAC5E,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACrC;AAsED,sEAAsE;AACtE,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;gBACd,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;CAO9G;AAoCD;0EAC0E;AAC1E,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,GAAG,gBAAgB,CAG7E;AAED,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,GAAG,eAAe,CAG/E"}
1
+ {"version":3,"file":"wasm-bindings.d.ts","sourceRoot":"","sources":["../src/wasm-bindings.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /*!
2
- * albex v0.6.0
3
- * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
2
+ * albex v0.7.0
3
+ * Local full-text search for documents — runs entirely in the browser, no server, no upload. Zero-config: the WASM core is embedded (~19 KB gzipped), so `npm install albex` then `new AlbexEngine()` works in any bundler, esbuild/Angular included.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
6
6
  * https://github.com/RafaCalRob/Albex#readme
@@ -32,28 +32,33 @@
32
32
  /** Range of ABI versions this host code understands for the main module.
33
33
  * Update both ends together with the Rust `abiVersion()` constant when
34
34
  * the export surface changes. */
35
- // 0.6.0 requires ABI 3 (trigram pre-filter + getLastIndexOverflow). The
36
- // required-exports list below already makes any older binary fail the
37
- // missing-exports check, so a tolerant lower bound was dead code — the range
38
- // is pinned to the one ABI this host actually speaks (audit 0.6.0, finding #7).
39
- const MAIN_ABI_MIN = 3;
40
- const MAIN_ABI_MAX = 3;
35
+ // ABI 7 adds runtime capacity (initWithCapacity, decision A16) and removes
36
+ // the compile-time tier system (`getTier` is gone), on top of ABI 6's batch
37
+ // frontier reads, ABI 5's truncation signalling and ABI 4's authoritative
38
+ // chunk enumeration. The required-exports list below already makes any
39
+ // older binary fail the missing-exports check, so a tolerant lower bound
40
+ // was dead code — the range is pinned to the one ABI this host actually
41
+ // speaks (audit 0.6.0, finding #7). The .wasm ships inside this package
42
+ // (files: wasm/pkg/*.wasm), so host TS and binary are always
43
+ // version-matched.
44
+ const MAIN_ABI_MIN = 7;
45
+ const MAIN_ABI_MAX = 7;
41
46
  /** Range of ABI versions for the PDF module. */
42
47
  const PDF_ABI_MIN = 1;
43
48
  const PDF_ABI_MAX = 3;
44
49
  /** Required function names on the main WASM. Adding a new one here forces
45
50
  * the validator to check it; removing one is a breaking ABI bump. */
46
51
  const MAIN_REQUIRED = [
47
- 'abiVersion', 'getBuffer', 'init',
52
+ 'abiVersion', 'getBuffer', 'init', 'initWithCapacity',
48
53
  'setDocumentName', 'beginDocument', 'feedXmlBytes', 'endDocument',
49
54
  'beginXlsx', 'feedXlsxBytes',
50
55
  'feedText', 'flushParagraph',
51
56
  'setMaxErrors', 'setThreshold', 'setMaxResults',
52
57
  'prepareQuery', 'getQueryKind', 'getQueryBranchCount',
53
- 'getQueryBranchPattern', 'selectQueryBranch',
58
+ 'getQueryBranchPattern', 'selectQueryBranch', 'getQueryTruncationFlags',
54
59
  'setPattern', 'search',
55
60
  'searchBegin', 'searchSlice', 'getSearchCursor', 'getSearchTotal',
56
- 'getResultCount',
61
+ 'getResultCount', 'getResultsPtr', 'getResultStride',
57
62
  'getResultDocId', 'getResultLocation', 'getResultScore',
58
63
  'getResultStart', 'getResultEnd', 'getResultChunkIdx',
59
64
  'getResultDocName', 'getResultMatchCount',
@@ -66,10 +71,13 @@ const MAIN_REQUIRED = [
66
71
  'restoreBegin', 'restoreFeed', 'restoreCommit',
67
72
  'getDocId', 'getDocChunkCount', 'getDocName', 'isDocDeleted',
68
73
  'removeDocument', 'compact',
74
+ 'getDocChunkBase', 'getChunkLocationAt', 'getChunkByteLenAt', 'getChunkTextAt',
75
+ 'listChunksBatch',
69
76
  'setLanguage',
70
- 'getTier', 'getMaxChunks', 'getMaxDocs', 'getNameCapacity',
77
+ 'getMaxChunks', 'getMaxDocs', 'getNameCapacity',
71
78
  'getChunksPtr', 'getChunkStructSize',
72
79
  'setCandidateMask', 'clearCandidateMask',
80
+ 'getPatternBloomLo', 'getPatternBloomHi',
73
81
  'getDocContentHashPtr', 'getDocContentHashLen', 'setDocumentContentHash',
74
82
  'hashBegin', 'hashFeed', 'hashFinish',
75
83
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-bindings.js","sourceRoot":"","sources":["../src/wasm-bindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wasm-bindings.js","sourceRoot":"","sources":["../src/wasm-bindings.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@
9
9
  * `Transferable` is opt-in per op; we use it for `indexFile` to avoid
10
10
  * copying the file bytes into the worker.
11
11
  */
12
- import type { AlbexOptions, IndexedDocument, SearchOptions, SearchResult, EngineStats, SearchStats } from './albex.js';
12
+ import type { AlbexDiagnostic, AlbexOptions, AuthoritativeChunk, IndexedDocument, SearchOptions, SearchResult, EngineStats, SearchStats } from './albex.js';
13
13
  export type WorkerOp = {
14
14
  kind: 'init';
15
15
  opts: AlbexOptions;
@@ -21,9 +21,23 @@ export type WorkerOp = {
21
21
  kind: 'search';
22
22
  query: string;
23
23
  options: SearchOptions;
24
+ } | {
25
+ kind: 'listChunks';
26
+ docId: number;
24
27
  } | {
25
28
  kind: 'removeDocument';
26
29
  id: string;
30
+ }
31
+ /** Replace doc `name` with new content. `fileName` is the replacement
32
+ * file's own name (may differ from `name`); the bytes travel as a
33
+ * transferred ArrayBuffer like `indexFile`. */
34
+ | {
35
+ kind: 'replaceDocument';
36
+ name: string;
37
+ fileName: string;
38
+ buffer: ArrayBuffer;
39
+ } | {
40
+ kind: 'takeDiagnostics';
27
41
  } | {
28
42
  kind: 'compact';
29
43
  } | {
@@ -69,18 +83,25 @@ export type WorkerResponse = {
69
83
  id: number;
70
84
  ok: true;
71
85
  result: unknown;
72
- } | {
86
+ }
87
+ /** `limit`/`max` are populated for capacity errors so the rehydrated
88
+ * AlbexCapacityError keeps reporting the runtime limit that overflowed. */
89
+ | {
73
90
  id: number;
74
91
  ok: false;
75
92
  error: {
76
93
  name: string;
77
94
  kind?: string;
78
95
  message: string;
96
+ limit?: string;
97
+ max?: number;
79
98
  };
80
99
  };
81
100
  export type IndexFileResult = IndexedDocument;
82
101
  export type SearchResultArr = SearchResult[];
102
+ export type ChunksResult = AuthoritativeChunk[];
83
103
  export type StatsResult = EngineStats;
84
104
  export type SearchStatsRes = SearchStats | null;
85
105
  export type DocsResult = readonly IndexedDocument[];
106
+ export type DiagnosticsRes = AlbexDiagnostic[];
86
107
  //# sourceMappingURL=worker-protocol.d.ts.map