albex 0.3.0 → 0.6.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 (41) hide show
  1. package/CHANGELOG.md +275 -0
  2. package/README.md +4 -2
  3. package/dist/albex-worker.js +1 -1
  4. package/dist/albex.d.ts +157 -17
  5. package/dist/albex.d.ts.map +1 -1
  6. package/dist/albex.js +405 -232
  7. package/dist/albex.js.map +1 -1
  8. package/dist/errors.d.ts +16 -2
  9. package/dist/errors.d.ts.map +1 -1
  10. package/dist/errors.js +6 -3
  11. package/dist/errors.js.map +1 -1
  12. package/dist/persistence.js +1 -1
  13. package/dist/profile.d.ts +11 -6
  14. package/dist/profile.d.ts.map +1 -1
  15. package/dist/profile.js +6 -13
  16. package/dist/profile.js.map +1 -1
  17. package/dist/resource-manager.js +1 -1
  18. package/dist/tiered-store.js +1 -1
  19. package/dist/wasm-bindings.d.ts +46 -5
  20. package/dist/wasm-bindings.d.ts.map +1 -1
  21. package/dist/wasm-bindings.js +102 -7
  22. package/dist/wasm-bindings.js.map +1 -1
  23. package/dist/worker-protocol.js +1 -1
  24. package/dist/worker-runtime.js +12 -3
  25. package/dist/worker-runtime.js.map +1 -1
  26. package/package.json +13 -9
  27. package/src/albex.ts +478 -246
  28. package/src/errors.ts +18 -2
  29. package/src/profile.ts +11 -10
  30. package/src/wasm-bindings.ts +157 -8
  31. package/src/worker-runtime.ts +12 -2
  32. package/wasm/pkg/albex_pdf.wasm +0 -0
  33. package/wasm/pkg/albex_wasm.wasm +0 -0
  34. package/wasm/pkg/albex_wasm_bg.wasm +0 -0
  35. package/wasm/pkg/albex_wasm_simd.wasm +0 -0
  36. package/wasm/pkg/albex_wasm_mini.wasm +0 -0
  37. package/wasm/pkg/albex_wasm_mini_simd.wasm +0 -0
  38. package/wasm/pkg/albex_wasm_pro.wasm +0 -0
  39. package/wasm/pkg/albex_wasm_pro_simd.wasm +0 -0
  40. package/wasm/pkg/albex_wasm_std.wasm +0 -0
  41. package/wasm/pkg/albex_wasm_std_simd.wasm +0 -0
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * albex v0.3.0
2
+ * albex v0.6.0
3
3
  * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
@@ -17,17 +17,112 @@
17
17
  * in `wasm/src/lib.rs` and `pdf-wasm/src/lib.rs`.
18
18
  */
19
19
  // ─────────────────────────────────────────────────────────────────────────────
20
- // Narrowing helpers for instantiation results
20
+ // Runtime validators
21
21
  // ─────────────────────────────────────────────────────────────────────────────
22
- /**
23
- * Cast `WebAssembly.Exports` to the typed Albex main interface.
24
- * Runtime check is intentionally minimal — if the .wasm doesn't match,
25
- * the first call site that touches a missing function throws naturally.
26
- */
22
+ //
23
+ // These replace the pre-0.5.0 `as unknown as` casts. They check three
24
+ // things at instantiation time:
25
+ // 1. memory is a WebAssembly.Memory instance.
26
+ // 2. abiVersion() returns a number inside the supported range.
27
+ // 3. every required export exists and is a function.
28
+ //
29
+ // If any of these fails, the loader throws a typed error before the
30
+ // engine returns from init(). This eliminates the audit 3.2 issue:
31
+ // previously a missing export only surfaced when its call site ran.
32
+ /** Range of ABI versions this host code understands for the main module.
33
+ * Update both ends together with the Rust `abiVersion()` constant when
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;
41
+ /** Range of ABI versions for the PDF module. */
42
+ const PDF_ABI_MIN = 1;
43
+ const PDF_ABI_MAX = 3;
44
+ /** Required function names on the main WASM. Adding a new one here forces
45
+ * the validator to check it; removing one is a breaking ABI bump. */
46
+ const MAIN_REQUIRED = [
47
+ 'abiVersion', 'getBuffer', 'init',
48
+ 'setDocumentName', 'beginDocument', 'feedXmlBytes', 'endDocument',
49
+ 'beginXlsx', 'feedXlsxBytes',
50
+ 'feedText', 'flushParagraph',
51
+ 'setMaxErrors', 'setThreshold', 'setMaxResults',
52
+ 'prepareQuery', 'getQueryKind', 'getQueryBranchCount',
53
+ 'getQueryBranchPattern', 'selectQueryBranch',
54
+ 'setPattern', 'search',
55
+ 'searchBegin', 'searchSlice', 'getSearchCursor', 'getSearchTotal',
56
+ 'getResultCount',
57
+ 'getResultDocId', 'getResultLocation', 'getResultScore',
58
+ 'getResultStart', 'getResultEnd', 'getResultChunkIdx',
59
+ 'getResultDocName', 'getResultMatchCount',
60
+ 'getResultMatchStartAt', 'getResultMatchEndAt',
61
+ 'getSnippet', 'getSnippetWindow', 'getSnippetWindowOffset',
62
+ 'getStatBloomTested', 'getStatBloomPassed', 'getStatBitapMatched',
63
+ 'getChunkCount', 'getDocCount', 'getTextUsed', 'getTextCapacity',
64
+ 'getLastIndexOverflow',
65
+ 'snapshotSize', 'snapshotChunk',
66
+ 'restoreBegin', 'restoreFeed', 'restoreCommit',
67
+ 'getDocId', 'getDocChunkCount', 'getDocName', 'isDocDeleted',
68
+ 'removeDocument', 'compact',
69
+ 'setLanguage',
70
+ 'getTier', 'getMaxChunks', 'getMaxDocs', 'getNameCapacity',
71
+ 'getChunksPtr', 'getChunkStructSize',
72
+ 'setCandidateMask', 'clearCandidateMask',
73
+ 'getDocContentHashPtr', 'getDocContentHashLen', 'setDocumentContentHash',
74
+ 'hashBegin', 'hashFeed', 'hashFinish',
75
+ ];
76
+ const PDF_REQUIRED = [
77
+ 'abiVersion', 'allocInput', 'extractPdf',
78
+ 'getPageLen', 'getPagePtr', 'getErrorLen', 'getErrorPtr',
79
+ 'getPageCount', 'extractPageImages',
80
+ 'getPageImageLen', 'getPageImagePtr', 'getPageImageKind',
81
+ ];
82
+ /** Thrown when an instantiated WASM module fails the ABI contract. */
83
+ export class AlbexAbiMismatchError extends Error {
84
+ module;
85
+ missing;
86
+ version;
87
+ constructor(module, message, opts) {
88
+ super(message);
89
+ this.name = 'AlbexAbiMismatchError';
90
+ this.module = module;
91
+ if (opts?.missing)
92
+ this.missing = opts.missing;
93
+ if (opts?.version !== undefined)
94
+ this.version = opts.version;
95
+ }
96
+ }
97
+ function validateExports(exports, required, module, abiMin, abiMax) {
98
+ const mem = exports['memory'];
99
+ if (!(mem instanceof WebAssembly.Memory)) {
100
+ throw new AlbexAbiMismatchError(module, `${module}: \`memory\` is missing or not a WebAssembly.Memory instance.`);
101
+ }
102
+ const missing = [];
103
+ for (const name of required) {
104
+ if (typeof exports[name] !== 'function')
105
+ missing.push(name);
106
+ }
107
+ if (missing.length) {
108
+ throw new AlbexAbiMismatchError(module, `${module}: WASM binary missing required exports: ${missing.join(', ')}. ` +
109
+ `The .wasm was built with an incompatible source — rebuild with the current toolchain.`, { missing });
110
+ }
111
+ const version = exports['abiVersion']();
112
+ if (version < abiMin || version > abiMax) {
113
+ throw new AlbexAbiMismatchError(module, `${module}: abiVersion ${version} outside supported range [${abiMin}..${abiMax}]. ` +
114
+ `The host TypeScript expects a different binary — upgrade albex or rebuild the WASM.`, { version });
115
+ }
116
+ }
117
+ /** Validate and narrow `WebAssembly.Exports` to the typed Albex main
118
+ * interface. Throws `AlbexAbiMismatchError` if the contract is broken. */
27
119
  export function asAlbexExports(exports) {
120
+ validateExports(exports, MAIN_REQUIRED, 'main', MAIN_ABI_MIN, MAIN_ABI_MAX);
28
121
  return exports;
29
122
  }
123
+ /** Validate and narrow `WebAssembly.Exports` to the typed PDF interface. */
30
124
  export function asAlbexPdfExports(exports) {
125
+ validateExports(exports, PDF_REQUIRED, 'pdf', PDF_ABI_MIN, PDF_ABI_MAX);
31
126
  return exports;
32
127
  }
33
128
  //# sourceMappingURL=wasm-bindings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wasm-bindings.js","sourceRoot":"","sources":["../src/wasm-bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA8KH,gFAAgF;AAChF,8CAA8C;AAC9C,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,OAA4B;IACzD,OAAO,OAAsC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,OAAO,OAAqC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"wasm-bindings.js","sourceRoot":"","sources":["../src/wasm-bindings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAmNH,gFAAgF;AAChF,qBAAqB;AACrB,gFAAgF;AAChF,EAAE;AACF,sEAAsE;AACtE,gCAAgC;AAChC,gDAAgD;AAChD,iEAAiE;AACjE,uDAAuD;AACvD,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AACnE,oEAAoE;AAEpE;;iCAEiC;AACjC,wEAAwE;AACxE,sEAAsE;AACtE,6EAA6E;AAC7E,gFAAgF;AAChF,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB,gDAAgD;AAChD,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,CAAC;AAEtB;qEACqE;AACrE,MAAM,aAAa,GAAG;IACpB,YAAY,EAAE,WAAW,EAAE,MAAM;IACjC,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa;IACjE,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,cAAc,EAAE,cAAc,EAAE,eAAe;IAC/C,cAAc,EAAE,cAAc,EAAE,qBAAqB;IACrD,uBAAuB,EAAE,mBAAmB;IAC5C,YAAY,EAAE,QAAQ;IACtB,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB;IACjE,gBAAgB;IAChB,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB;IACvD,gBAAgB,EAAE,cAAc,EAAE,mBAAmB;IACrD,kBAAkB,EAAE,qBAAqB;IACzC,uBAAuB,EAAE,qBAAqB;IAC9C,YAAY,EAAE,kBAAkB,EAAE,wBAAwB;IAC1D,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB;IACjE,eAAe,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB;IAChE,sBAAsB;IACtB,cAAc,EAAE,eAAe;IAC/B,cAAc,EAAE,aAAa,EAAE,eAAe;IAC9C,UAAU,EAAE,kBAAkB,EAAE,YAAY,EAAE,cAAc;IAC5D,gBAAgB,EAAE,SAAS;IAC3B,aAAa;IACb,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB;IAC1D,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,sBAAsB,EAAE,sBAAsB,EAAE,wBAAwB;IACxE,WAAW,EAAE,UAAU,EAAE,YAAY;CAC7B,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,YAAY,EAAE,YAAY,EAAE,YAAY;IACxC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa;IACxD,cAAc,EAAE,mBAAmB;IACnC,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB;CAChD,CAAC;AAEX,sEAAsE;AACtE,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,MAAM,CAAiB;IACvB,OAAO,CAAqB;IAC5B,OAAO,CAAU;IAC1B,YAAY,MAAsB,EAAE,OAAe,EAAE,IAAwD;QAC3G,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,IAAI,EAAE,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/C,IAAI,IAAI,EAAE,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC/D,CAAC;CACF;AAED,SAAS,eAAe,CACtB,OAA4B,EAC5B,QAA2B,EAC3B,MAAsB,EACtB,MAAc,EACd,MAAc;IAEd,MAAM,GAAG,GAAI,OAAmC,CAAC,QAAQ,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,GAAG,YAAY,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAqB,CAAC,MAAM,EAAE,GAAG,MAAM,+DAA+D,CAAC,CAAC;IACpH,CAAC;IACD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,OAAQ,OAAmC,CAAC,IAAI,CAAC,KAAK,UAAU;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,qBAAqB,CAC7B,MAAM,EACN,GAAG,MAAM,2CAA2C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;YAC1E,uFAAuF,EACvF,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAK,OAAmC,CAAC,YAAY,CAAkB,EAAE,CAAC;IACvF,IAAI,OAAO,GAAG,MAAM,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAqB,CAC7B,MAAM,EACN,GAAG,MAAM,gBAAgB,OAAO,6BAA6B,MAAM,KAAK,MAAM,KAAK;YACnF,qFAAqF,EACrF,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED;0EAC0E;AAC1E,MAAM,UAAU,cAAc,CAAC,OAA4B;IACzD,eAAe,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;IAC5E,OAAO,OAAsC,CAAC;AAChD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACxE,OAAO,OAAqC,CAAC;AAC/C,CAAC"}
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * albex v0.3.0
2
+ * albex v0.6.0
3
3
  * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * albex v0.3.0
2
+ * albex v0.6.0
3
3
  * Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.
4
4
  * (c) 2026 RafaCalRob
5
5
  * @license MIT
@@ -77,8 +77,8 @@ async function dispatch(op) {
77
77
  return ensureEngine().listSnapshots();
78
78
  }
79
79
  }
80
- self.onmessage = async (ev) => {
81
- const { id, op } = ev.data;
80
+ async function handle(req) {
81
+ const { id, op } = req;
82
82
  try {
83
83
  const result = await dispatch(op);
84
84
  const res = { id, ok: true, result };
@@ -96,5 +96,14 @@ self.onmessage = async (ev) => {
96
96
  };
97
97
  self.postMessage(res);
98
98
  }
99
+ }
100
+ // Process messages strictly in arrival order. The engine guards its own
101
+ // state, but a sync `search` arriving mid-`indexFile` await would otherwise
102
+ // be rejected as "busy"; queueing keeps the worker's externally-observable
103
+ // behaviour serial and matches the main-thread engine's serialization.
104
+ let _queue = Promise.resolve();
105
+ self.onmessage = (ev) => {
106
+ const req = ev.data;
107
+ _queue = _queue.then(() => handle(req));
99
108
  };
100
109
  //# sourceMappingURL=worker-runtime.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../src/worker-runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-runtime.js","sourceRoot":"","sources":["../src/worker-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGrD,IAAI,MAAM,GAAuB,IAAI,CAAC;AAEtC,SAAS,YAAY;IACnB,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,EAAY;IAClC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,gEAAgE;YAChE,2BAA2B;YAC3B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,YAAY,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QACrD,KAAK,gBAAgB;YACnB,OAAO,YAAY,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9C,KAAK,SAAS;YACZ,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,KAAK,OAAO;YACV,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC;QACnC,KAAK,oBAAoB;YACvB,OAAO,YAAY,EAAE,CAAC,kBAAkB,EAAE,CAAC;QAC7C,KAAK,cAAc;YACjB,OAAO,YAAY,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC1C,KAAK,cAAc;YACjB,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,KAAK,cAAc;YACjB,YAAY,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClC,OAAO,SAAS,CAAC;QACnB,KAAK,eAAe;YAClB,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,SAAS,CAAC;QACnB,KAAK,aAAa;YAChB,YAAY,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACpC,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,YAAY;YACf,OAAO,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAC5C,KAAK,gBAAgB;YACnB,OAAO,YAAY,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QAChD,KAAK,eAAe;YAClB,OAAO,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,GAAkB;IACtC,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,GAAG,GAAmB,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACpD,IAA0B,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,GAAG,GAAgC,CAAC;QAC3C,MAAM,GAAG,GAAmB;YAC1B,EAAE,EAAE,EAAE,EAAE,KAAK;YACb,KAAK,EAAE;gBACL,IAAI,EAAK,CAAC,CAAC,IAAI,IAAI,OAAO;gBAC1B,IAAI,EAAK,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACzD,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC;aAClC;SACF,CAAC;QACD,IAA0B,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,wEAAwE;AACxE,4EAA4E;AAC5E,2EAA2E;AAC3E,uEAAuE;AACvE,IAAI,MAAM,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;AAC9C,IAAI,CAAC,SAAS,GAAG,CAAC,EAA+B,EAAE,EAAE;IACnD,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;IACpB,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "albex",
3
- "version": "0.3.0",
3
+ "version": "0.6.0",
4
4
  "description": "Zero-config local full-text search for documents — runs entirely in the browser, no server, no upload.",
5
5
  "type": "module",
6
6
  "main": "./dist/albex.js",
@@ -42,18 +42,21 @@
42
42
  ],
43
43
  "scripts": {
44
44
  "build": "tsc && node scripts/banner.mjs",
45
- "prepublishOnly": "npm run build",
46
- "build:wasm": "node scripts/build-wasm.mjs std && node scripts/wasm-banner.mjs",
47
- "build:wasm:mini": "node scripts/build-wasm.mjs mini && node scripts/wasm-banner.mjs",
48
- "build:wasm:pro": "node scripts/build-wasm.mjs pro && node scripts/wasm-banner.mjs",
49
- "build:wasm:tiers": "node scripts/build-wasm.mjs && node scripts/wasm-banner.mjs",
50
- "build:pdf-wasm": "cd pdf-wasm && cargo build --target wasm32-unknown-unknown --release && cp ../target/wasm32-unknown-unknown/release/albex_pdf.wasm ../wasm/pkg/albex_pdf.wasm && node scripts/wasm-banner.mjs",
51
- "build:all": "npm run build:wasm:tiers && npm run build:pdf-wasm && npm run build",
45
+ "prepublishOnly": "npm run build:all && npm test",
46
+ "build:wasm": "node scripts/build-wasm.mjs && node scripts/wasm-banner.mjs",
47
+ "build:wasm:baseline": "node scripts/build-wasm.mjs --no-simd && node scripts/wasm-banner.mjs",
48
+ "build:pdf-wasm": "node scripts/build-pdf-wasm.mjs && node scripts/wasm-banner.mjs",
49
+ "build:all": "npm run build:wasm && npm run build:pdf-wasm && npm run build",
52
50
  "typecheck": "tsc --noEmit",
53
51
  "test": "vitest run",
54
52
  "test:watch": "vitest",
55
53
  "bench": "vitest bench --run",
56
- "serve": "npx --yes serve@14 -p 5173 -L ."
54
+ "test:e2e": "playwright test",
55
+ "build:ocr": "npm --prefix packages/ocr run build",
56
+ "clean": "node scripts/clean.mjs",
57
+ "clean:all": "node scripts/clean.mjs --all",
58
+ "serve": "npx --yes serve@14 -p 5173 -L .",
59
+ "relaunch": "npm run clean && npm run build:all && npm run build:ocr && npm test && npm pack && node scripts/relaunch-banner.mjs && npm run serve"
57
60
  },
58
61
  "repository": {
59
62
  "type": "git",
@@ -94,6 +97,7 @@
94
97
  "node": ">=18"
95
98
  },
96
99
  "devDependencies": {
100
+ "@playwright/test": "^1.60.0",
97
101
  "typescript": "^5.4.0",
98
102
  "vitest": "^2.0.0"
99
103
  }