albex 0.6.1 → 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.
- package/CHANGELOG.md +32 -0
- package/README.md +54 -11
- package/dist/_generated/inline-wasm.d.ts +2 -0
- package/dist/_generated/inline-wasm.d.ts.map +1 -0
- package/dist/_generated/inline-wasm.js +9 -0
- package/dist/_generated/inline-wasm.js.map +1 -0
- package/dist/albex-worker.js +2 -2
- package/dist/albex.d.ts +44 -0
- package/dist/albex.d.ts.map +1 -1
- package/dist/albex.js +109 -18
- package/dist/albex.js.map +1 -1
- package/dist/errors.js +2 -2
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/inline.d.ts +10 -0
- package/dist/inline.d.ts.map +1 -0
- package/dist/inline.js +17 -0
- package/dist/inline.js.map +1 -0
- package/dist/persistence.js +2 -2
- package/dist/profile.js +2 -2
- package/dist/resource-manager.js +2 -2
- package/dist/tiered-store.js +2 -2
- package/dist/wasm-bindings.js +2 -2
- package/dist/worker-protocol.js +2 -2
- package/dist/worker-runtime.js +2 -2
- package/package.json +14 -9
- package/src/_generated/inline-wasm.ts +9 -0
- package/src/albex.ts +130 -14
- package/src/index.ts +81 -0
- package/src/inline.ts +9 -0
- package/wasm/pkg/albex_pdf.wasm +0 -0
- package/wasm/pkg/albex_wasm.wasm +0 -0
- package/wasm/pkg/albex_wasm_bg.wasm +0 -0
- package/wasm/pkg/albex_wasm_simd.wasm +0 -0
package/package.json
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "albex",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "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.",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/
|
|
7
|
-
"module": "./dist/
|
|
8
|
-
"types": "./dist/
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
9
|
"exports": {
|
|
10
10
|
".": {
|
|
11
|
-
"import": "./dist/
|
|
12
|
-
"types": "./dist/
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./inline": {
|
|
15
|
+
"import": "./dist/inline.js",
|
|
16
|
+
"types": "./dist/inline.d.ts"
|
|
13
17
|
},
|
|
14
18
|
"./worker": {
|
|
15
19
|
"import": "./dist/albex-worker.js",
|
|
@@ -30,7 +34,8 @@
|
|
|
30
34
|
"./tiered": {
|
|
31
35
|
"import": "./dist/tiered-store.js",
|
|
32
36
|
"types": "./dist/tiered-store.d.ts"
|
|
33
|
-
}
|
|
37
|
+
},
|
|
38
|
+
"./wasm/pkg/*.wasm": "./wasm/pkg/*.wasm"
|
|
34
39
|
},
|
|
35
40
|
"files": [
|
|
36
41
|
"dist/",
|
|
@@ -41,7 +46,7 @@
|
|
|
41
46
|
"LICENSE"
|
|
42
47
|
],
|
|
43
48
|
"scripts": {
|
|
44
|
-
"build": "tsc && node scripts/banner.mjs",
|
|
49
|
+
"build": "node scripts/gen-inline.mjs && tsc && node scripts/banner.mjs",
|
|
45
50
|
"prepublishOnly": "npm run build:all && npm test",
|
|
46
51
|
"build:wasm": "node scripts/build-wasm.mjs && node scripts/wasm-banner.mjs",
|
|
47
52
|
"build:wasm:baseline": "node scripts/build-wasm.mjs --no-simd && node scripts/wasm-banner.mjs",
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// AUTO-GENERATED by scripts/gen-inline.mjs — DO NOT EDIT.
|
|
2
|
+
// Source: wasm/pkg/albex_wasm_bg.wasm (baseline core, no SIMD).
|
|
3
|
+
// Regenerated on every `npm run build`. 47205 raw bytes →
|
|
4
|
+
// 62940 base64 chars (~61 KB text, ~46 KB raw).
|
|
5
|
+
/* eslint-disable */
|
|
6
|
+
// Typed as `string` (not the literal) so the emitted .d.ts stays a few bytes
|
|
7
|
+
// instead of inlining the whole base64 blob as a literal type.
|
|
8
|
+
export const ALBEX_WASM_BASE64: string =
|
|
9
|
+
'AGFzbQEAAAABRwxgBX9/f39/AGACf38AYAR/f39/AGADf39/AGACf38Bf2ABfwF/YAF/AGAAAGADf39/AX9gAAF/YAR/f39/AX9gA35/fwF+A60BqwEAAQIDBAECBAMDAwMCAwMDAQMDAgQFAQMBAQEBBgYBAQEBBgcFBQcDAQgDBQEDBwYGBgYGBgYGBQkECAUJCQkFBQUHCgcHBgcGBgkGBgUBBQUBBwkJBgYBBQMGBwcHBgYGBgkJCgQDCQkFBgIBBQkJCQkJCQkJBQUFBQUFBQQEBQUJCAkJCQkJCQkJCQkGBwUFBQUEBAQIBQkFBQcJBAsBAQkBBQYJBgYGBwgFAwEAEgYZA38BQYCAwAALfwBBgMTFAAt/AEH6w8UACwfJC1YGbWVtb3J5AgALX19oZWFwX2Jhc2UDAQlnZXRCdWZmZXIANwphYmlWZXJzaW9uADgMcHJlcGFyZVF1ZXJ5ADsMZ2V0UXVlcnlLaW5kADwTZ2V0UXVlcnlCcmFuY2hDb3VudAA9F2dldFF1ZXJ5VHJ1bmNhdGlvbkZsYWdzAD4VZ2V0UXVlcnlCcmFuY2hQYXR0ZXJuAD8Rc2VsZWN0UXVlcnlCcmFuY2gAQApzZXRQYXR0ZXJuAEEQaW5pdFdpdGhDYXBhY2l0eQBDBGluaXQARAloYXNoQmVnaW4ARQhoYXNoRmVlZABGCmhhc2hGaW5pc2gARw9zZXREb2N1bWVudE5hbWUASBZzZXREb2N1bWVudENvbnRlbnRIYXNoAEkNYmVnaW5Eb2N1bWVudABKDGZlZWRYbWxCeXRlcwBLC2VuZERvY3VtZW50AFMJYmVnaW5YbHN4AFQNZmVlZFhsc3hCeXRlcwBVCGZlZWRUZXh0AFoOZmx1c2hQYXJhZ3JhcGgAWwxzZXRNYXhFcnJvcnMAXgxzZXRUaHJlc2hvbGQAXw1zZXRNYXhSZXN1bHRzAGALc2V0TGFuZ3VhZ2UAYRFnZXRQYXR0ZXJuQmxvb21MbwBiEWdldFBhdHRlcm5CbG9vbUhpAGMGc2VhcmNoAGcLc2VhcmNoQmVnaW4AaAtzZWFyY2hTbGljZQBpD2dldFNlYXJjaEN1cnNvcgBuDmdldFNlYXJjaFRvdGFsAG8SZ2V0U3RhdEJsb29tVGVzdGVkAHASZ2V0U3RhdEJsb29tUGFzc2VkAHETZ2V0U3RhdEJpdGFwTWF0Y2hlZAByDWdldFJlc3VsdHNQdHIAcw9nZXRSZXN1bHRTdHJpZGUAdA5nZXRSZXN1bHRDb3VudAB1DmdldFJlc3VsdERvY0lkAHYRZ2V0UmVzdWx0TG9jYXRpb24Adw5nZXRSZXN1bHRTY29yZQB4DmdldFJlc3VsdFN0YXJ0AHkMZ2V0UmVzdWx0RW5kAHoRZ2V0UmVzdWx0Q2h1bmtJZHgAexNnZXRSZXN1bHRNYXRjaENvdW50AHwVZ2V0UmVzdWx0TWF0Y2hTdGFydEF0AH0TZ2V0UmVzdWx0TWF0Y2hFbmRBdAB+EGdldFJlc3VsdERvY05hbWUAfwpnZXRTbmlwcGV0AIABFmdldFNuaXBwZXRXaW5kb3dPZmZzZXQAgQEQZ2V0U25pcHBldFdpbmRvdwCCAQ1nZXRDaHVua0NvdW50AIMBC2dldERvY0NvdW50AIQBC2dldFRleHRVc2VkAIUBD2dldFRleHRDYXBhY2l0eQCGARRnZXRMYXN0SW5kZXhPdmVyZmxvdwCHAQxnZXRNYXhDaHVua3MAiAEKZ2V0TWF4RG9jcwCJAQ9nZXROYW1lQ2FwYWNpdHkAigEMZ2V0Q2h1bmtzUHRyAIsBEmdldENodW5rU3RydWN0U2l6ZQCMARBzZXRDYW5kaWRhdGVNYXNrAI0BEmNsZWFyQ2FuZGlkYXRlTWFzawCOAQhnZXREb2NJZACPARBnZXREb2NDaHVua0NvdW50AJABCmdldERvY05hbWUAkQEPZ2V0RG9jQ2h1bmtCYXNlAJIBEmdldENodW5rTG9jYXRpb25BdACTARFnZXRDaHVua0J5dGVMZW5BdACUAQ5nZXRDaHVua1RleHRBdACVAQ9saXN0Q2h1bmtzQmF0Y2gAlgEUZ2V0RG9jQ29udGVudEhhc2hQdHIAlwEUZ2V0RG9jQ29udGVudEhhc2hMZW4AmAEMaXNEb2NEZWxldGVkAJkBDnJlbW92ZURvY3VtZW50AJoBB2NvbXBhY3QAmwEMc25hcHNob3RTaXplAJwBDXNuYXBzaG90Q2h1bmsAnQEMcmVzdG9yZUJlZ2luAKEBC3Jlc3RvcmVGZWVkAKMBDXJlc3RvcmVDb21taXQApQEKX19kYXRhX2VuZAMCCtDMAqsBQAACQAJAIAIgAUkNACACIARNDQEgAiAEEIGAgIAAAAsgASACEIGAgIAAAAsgACACIAFrNgIEIAAgAyABajYCAAsJABCpgYCAAAALSwEBfyOAgICAAEEQayIEJICAgIAAIARBCGpBACABIAIgAxCAgICAACAEKAIMIQMgACAEKAIINgIAIAAgAzYCBCAEQRBqJICAgIAAC7AEAQJ/AkAgAg0AIABBADYCBCAAQQA6AAAPCwJAAkACQAJAAkAgAS0AACIDwCIEQX9KDQBB+IHAgAAgBBCEgICAAA0DQfuBwIAAIAQQhICAgAANAkH+gcCAACAEEISAgIAADQEgAEEBNgIEIABBADoAAA8LIABBATYCBCAAQQE6AAAgACAEQb9/akH/AXFBGklBBXQgBHI6AAEPCyAAQQA6AAACQCACQQNLDQAgAEEBNgIEDwsgAEEENgIEDwsgAkECTQ0BIAEsAAFBv39KDQEgASwAAkG/f0oNASAAQQM2AgQgAEEAOgAADwsCQCACQQFGDQACQEGBgsCAACABLQABIgIQhICAgAANACAAQQE2AgQgAEEAOgAADwsCQAJAAkACQCADQb1+ag4DAAEDAgsCQCACQYABc0H/AXEiAkE/Sw0AIABBAjYCBCAAIAJBuIDAgABqLQAAIgI6AAEgACACQQBHOgAADwsgAkHAABCFgICAAAALAkAgAkGAAXNB/wFxIgJBP0sNACAAQQI2AgQgACACQfiAwIAAai0AACICOgABIAAgAkEARzoAAA8LIAJBwAAQhYCAgAAACyAAQQI2AgQgAEEAOgAADwsCQCACQYABc0H/AXEiAkHAAEkNACACQcAAEIWAgIAAAAsgAEECNgIEIAAgAkG4gcCAAGotAAAiAjoAASAAIAJBAEc6AAAPCyAAQQE2AgQgAEEAOgAADwsgAEEBNgIEIABBADoAAAtJAQF/QQAhAgJAIAAtAAEgAUH/AXFLDQAgAC0AAiECAkAgAC0AAA0AIAFB/wFxIAJB/wFxTQ8LIAFB/wFxIAJB/wFxSSECCyACCwkAEKmBgIAAAAsrAAJAIAMgAU8NACABIAMQgYCAgAAACyAAIAMgAWs2AgQgACACIAFqNgIACzUBAX9BACECAkAgACgCACABSw0AIAAoAgQhAgJAIAAtAAgNACABIAJNDwsgASACSSECCyACCycAAkAgAkGBAkkNACACQYACEIGAgIAAAAsgACACNgIEIAAgATYCAAsnAAJAIAJBwQBJDQAgAkHAABCBgICAAAALIAAgAjYCBCAAIAE2AgALKQACQCACQYHAAEkNACACQYDAABCBgICAAAALIAAgAjYCBCAAIAE2AgALSQACQAJAIAIgAUkNACACQYCABEsNASAAIAIgAWs2AgQgACABQZCVwIAAajYCAA8LIAEgAhCBgICAAAALIAJBgIAEEIGAgIAAAAtMAQF/I4CAgIAAQRBrIgQkgICAgAAgBEEIaiACIAMgAUHAABCAgICAACAEKAIMIQEgACAEKAIINgIAIAAgATYCBCAEQRBqJICAgIAAC0oBAX8jgICAgABBEGsiAySAgICAACADQQhqIAIgAUGABBCCgICAACADKAIMIQEgACADKAIINgIAIAAgATYCBCADQRBqJICAgIAAC0oBAX8jgICAgABBEGsiAySAgICAACADQQhqIAIgAUHAABCCgICAACADKAIMIQEgACADKAIINgIAIAAgATYCBCADQRBqJICAgIAAC0oBAX8jgICAgABBEGsiAySAgICAACADQQhqIAIgAUGAAhCCgICAACADKAIMIQEgACADKAIINgIAIAAgATYCBCADQRBqJICAgIAAC08BAX8jgICAgABBEGsiAiSAgICAACACQQhqIAFBkJXAgABBgIAEEIKAgIAAIAIoAgwhASAAIAIoAgg2AgAgACABNgIEIAJBEGokgICAgAALUQEBfyOAgICAAEEQayIDJICAgIAAIANBCGogASACQZCVwIAAQYCABBCAgICAACADKAIMIQIgACADKAIINgIAIAAgAjYCBCADQRBqJICAgIAAC0sBAX8jgICAgABBEGsiAySAgICAACADQQhqIAIgAUGAwAAQgoCAgAAgAygCDCEBIAAgAygCCDYCACAAIAE2AgQgA0EQaiSAgICAAAsqAAJAIAEgA0cNAAJAIAFFDQAgACACIAH8CgAACw8LIAEgAxCBgICAAAALPAEBf0EALQD4w8WAABoCQCABEJWAgIAAIgJFDQAgAkF8ai0AAEEDcUUNACABRQ0AIAJBACAB/AsACyACC/YTAgh/AX4CQAJAAkACQAJAAkAgAEH1AUkNAEEAIQEgAEFQQQAoAoiVwIAAa0F3cUF9aiICQUAgAkFASRtPDQUgAEELakF4cSEDQQAoAuCUwIAAIgRFDQNBACADayEAAkAgAxClgICAACIFQQJ0QcSRwIAAaigCACICRQ0AQQAhASADQQBBGSAFQQF2ayAFQR9GG3QhBkEAIQcDQAJAIAIiAigCBEF4cSIIIANJDQAgCCADayIIIABPDQAgCCEAIAIhByAIDQBBACEAIAIhBwwFCyABIAIoAhQiCCAIIAIgBkEddkEEcWooAhAiAkYbIAEgCBshASAGQQF0IQYgAg0ACwJAIAFFDQAgASECDAQLIAcNAgtBACEHIARBAiAFdCIBQQAgAWtycSIBRQ0BIAFoQQJ0QcSRwIAAaigCACECDAILAkBBACgC3JTAgABBECAAQQtqQfgDcSAAQQtJGyIDQQN2IgF2IgBBA3FFDQAgAEF/c0EBcSABaiICQQN0IgFB1JLAgABqIAFB3JLAgABqKAIAIgBBCGooAgAgAhCngICAACAAIAFBA3I2AgQgACABaiIBIAEoAgRBAXI2AgQMBAsgA0EAKALklMCAAE0NAgJAIAANAEEAKALglMCAACIARQ0DIABoQQJ0QcSRwIAAaigCACICKAIEQXhxIANrIQEgAiEHAkADQAJAIAIoAhAiAA0AIAIoAhQiAEUNAgsgACgCBEF4cSADayICIAEgAiABSSICGyEBIAAgByACGyEHIAAhAgwACwsgBxCigICAAAJAAkAgAUEQSQ0AIAcgA0EDcjYCBCAHIANqIgAgAUEBcjYCBCAAIAFqIAE2AgAgACABEJ6AgIAADAELIAcgASADaiIAQQNyNgIEIAcgAGoiACAAKAIEQQFyNgIECyAHQQhqIgFFDQMMBQtBAiABdCICQQAgAmtyIAAgAXRxaCICQQN0IgFB1JLAgABqIAFB3JLAgABqKAIAIgBBCGooAgAgAhCngICAACAAIANBA3I2AgQgACADaiIHIAEgA2siAkEBcjYCBCAAIAFqIAI2AgAgByACEJ6AgIAADAMLQQAhAgsCQANAIAIiAUUNASAHIAEgByABKAIEQXhxIgIgA2siBiAASSIIGyACIANJIgIbIQcgACAGIAAgCBsgAhshACABKAIQIgINACABKAIUIQIMAAsLIAdFDQACQEEAKALklMCAACIBIANJDQAgACABIANrTw0BCyAHEKKAgIAAAkACQCAAQRBJDQAgByADQQNyNgIEIAcgA2oiASAAQQFyNgIEIAEgAGog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AEEAKAL8lMCAAE0NAEEAQX82AvyUwIAACw8LIAEgABCfgICAAA8LQQAgATYC7JTAgABBAEEAKALklMCAACAAaiIANgLklMCAACABIABBAXI2AgQgASAAaiAANgIADwsQo4CAgAAAC4wBAQJ/I4CAgIAAQSBrIQFBACECAkADQCACQSBGDQEgASACakIANwIAIAJBCGohAgwACwsgAEIANwIAIABCADcCECAAIAEpAgA3AhggAEEANgI4IABBBmpCADcBACAAQSBqIAFBCGopAgA3AgAgAEEoaiABQRBqKQIANwIAIABBMGogAUEYaikCADcCAAs8AQF/AkBBACgC5JTAgAAiAkUNAEEAKALslMCAACACEJ+AgIAAC0EAIAA2AuyUwIAAQQAgATYC5JTAgAALfAECfwJAAkBBACgC3JTAgAAiAkEBIAFBA3Z0IgNxDQBBACACIANyNgLclMCAACABQXhxQdSSwIAAaiIBIQIMAQsgAUF4cSICQdSSwIAAaiEBIAJB3JLAgABqKAIAIQILIAEgADYCCCACIAA2AgwgACABNgIMIAAgAjYCCAsiAAJAIAFBgAJJDQAgACABEKGAgIAADwsgACABEJ+AgIAAC4gCAQR/IABCADcCECAAIAEQpYCAgAAiAjYCHCACQQJ0QcSRwIAAaiEDAkBBACgC4JTAgABBASACdCIEcQ0AIAMgADYCACAAIAM2AhggACAANgIMIAAgADYCCEEAQQAoAuCUwIAAIARyNgLglMCAAA8LIAFBAEEZIAJBAXZrIAJBH0YbdCECIAMoAgAhBANAAkAgBCIDKAIEQXhxIAFHDQAgAygCCCICIAA2AgwgAyAANgIIIABBADYCGCAAIAM2AgwgACACNgIIDwsgAkEddiEEIAJBAXQhAiADIARBBHFqIgUoAhAiBA0ACyAFQRBqIAA2AgAgACADNgIYIAAgADYCDCAAIAA2AggLyAIBBX8gACgCGCEBAkACQAJAIABBDGooAgAiAiAARw0AIABBFEEQIAAoAhQiAhtqKAIAIgMNAUEAIQIMAgsgAEEIaigCACIDIAI2AgwgAiADNgIIDAELIABBFGogAEEQaiACGyEEA0AgBCEFIAMiAkEUaiEEIAIoAhQiAw0AIAJBEGohBCACKAIQIgMNAAsgBUEANgIACwJAAkAgAUUNAAJAAkAgACAA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CyADIQQgAUEQaiADai0AAEH8AEcNAQsCQAJAAkAgBkEISQ0AIAQgB0kNASABQRBqIAdqIAQgB2sQuYCAgABFDQJBAEEAKAKks8WAAEEBcjYCpLPFgAAMAgsgBCAHSQ0AIAFBEGogB2ogBCAHayAGQQh0QaizxYAAahC6gICAACIDRQ0BIAZBAXRBqMPFgABqIAM7AQAgBkEBaiEGDAELIAcgBBCBgICAAAALIARBAWohBwwACwtBACAGOgChs8WAAAwBC0F/IQQLIAFBkAhqJICAgIAAIAQLCwBBAC0AoLPFgAALCwBBAC0AobPFgAALCwBBACgCpLPFgAALoQEBBH8jgICAgABBEGsiASSAgICAAEEAIQICQAJAIABBAC0AobPFgABPDQAgAEEHSw0BIAFBCGogAEEBdEGow8WAAGovAQAiAhCQgICAACABKAIMIQMgASgCCCEEIAEgAEEIdEGos8WAAGogAhCIgICAACAEIAMgASgCACABKAIEEJOAgIAACyABQRBqJICAgIAAIAIPCyAAQQgQhYCAgAAAC64BAQV/I4CAgIAAQRBrIgEkgICAgABBACECAkACQCAAQQAtAKGzxYAATw0AIABBB0sNAUEBIQIgAUEIaiAAQQF0QajDxYAAai8BACIDEJCAgIAAIAEoAgwhBCABKAIIIQUgASAAQQh0QaizxYAAaiADEIiAgIAAIAUgBCABKAIAIAEoAgQQk4CAgAAgAxDBgICAABoLIAFBEGokgICAgAAgAg8LIABBCBCFgICAAAALigQDA38BfgN/I4CAgIAAQcAUayIBJICAgIAAAkACQAJAIAANAEEAIQIMAQtBACECQQAgAEGAgAQgAEGAgARJGzYC0IjAgABBAC0A6IrAgAAhAwJAQYACRQ0AIAFBIGpBAEGAAvwLAAsgAUEYaiABQSBqIABBgAIgAEGAAkkbIgAQj4CAgAAgASgCGCABKAIcQZCVwIAAIAAQk4CAgAACQANAIAJBgAJGDQECQEHAAEUNACABQaACaiACakEAQcAA/AsACyACQcAAaiECDAALC0IAIQQgAUGoBGpCADcDACABQgA3A6AEIAFBEGogAUEgaiAAEIiAgIAAQQAhAiABQaAEaiEAIAFBoAJqIQUgASgCECABKAIUIAFBoAJqIAFBoARqEOSAgIAAIQYgA0H/AXFBAUch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IAEgBGshAyABIARJDQEgACADaiACQbiHwIAAaigCACAEEKqBgIAARQ0DCyACQQhqIQIMAQsLIAMgARCBgICAAAALIANBASADQQFLGyEBCyABC4kCAwJ/An4CfyOAgICAAEGQEGsiAySAgICAAEEAIQQCQEGAEEUNACADQQhqQQBBgBD8CwALQgAhBUIAIQYDQAJAAkAgBCACTw0AIAVCwABUDQELAkBBgBBFDQAgACADQQhqQYAQ/AoAAAsgACAGNwOAECAAIAU+AogQIAAgBCACSSAFQsAAUXE6AIwQIANBkBBqJICAgIAADwsgAyAEIAEgAhDrgICAACADQYgQaiADKAIAIAMoAgQQg4CAgAAgAygCjBAgBGohBCADLQCIEEEBRw0AIANBCGogAy0AiRAiB0EDdGoiCCAIKQMAQgEgBYaENwMAIAVCAXwhBUIBIAethiAGhCEGDAALCycAAkAQ6ICAgAANAEEADwsDQEF/EOmAgIAARQ0AC0EAKALch8CAAAuRCgMFfwF+DH8jgICAgABB4BhrIgAkgICAgABBACEBQQBCADcC1IjAgABBAEEAOgD0isCAAEEAQQA2AuyKwIAAQQBBADYC3IjAgABBAEEANgLch8CAAAJAQQAoAtCIwIAAIgJFDQBBACgCyIfAgABFDQBBACEBAkBBgAJFDQAgAEEoakEAQYAC/AsACyAAQSBqIABBKGogAkGAAiACQYACSRsiAhCPgICAACAAKAIgIAAoAiRBkJXAgAAgAhCTgICAAAJAA0AgAUGAAkYNAQJAQcAARQ0AIABBqAJqIAFqQQBBwAD8CwALIAFBwABqIQEMAAsLIABBsARqQgA3AwAgAEIANwOoBCAAQRhqIABBKGogAhCIgICAAAJAIAAoAhggACgCHCAAQagCaiAAQagEahDkgICAACIDDQBBACEBDAELAkBBAC0A6IrAgABBAUcNAEEAIQEgAEGoAmohBCAAQagEaiECA0AgAyABRg0BAkAgAUEERg0AIABBEGogBCACKAIAEI6AgIAAIAIgACgCECAAKAIUEOWAgIAANgIAIAJBBGohAiAEQcAAaiEEIAFBAWohAQwBCwtBBEEEEIWAgIAAAAtBACEBAkADQCABQfADRg0BAkBB/ABFDQAgAEG4BGogAWpBAEH8APwLAAsgAUH8AGohAQwACwtCACEFIABBqAhqQQhqQgA3AwAgAEG4CGpBCGpCADcDACAAQgA3A6gIIABCADcDuAhBACECAkADQAJAAkACQCACIANGDQAgAkEERg0EIABBCGogAEGoAmogAkEGdGogAEGoBGogAkECdCIGaigCABCJgICAACAAQcgIaiAAKAIIIgcgACgCDCIIEOaAgIAAQQAhAUEAIQQgACgC0BgiCUEGSQ0CQQAoAsSIwIAAIQQgCUEJSQ0BIARBAyAEQQNJGyEEDAILAkBB8ANFDQBBpI3AgAAgAEG4BGpB8AP8CgAAC0EAIABBqAhqQQhqKQMANwKckcCAAEEAIAApA6gINwKUkcCAAEEAIAApA7gINwKkkcCAAEEAIABBuAhqQQhqKQMANwKskcCAAAJAQYACRQ0AQfWKwIAAIABBqAJqQYAC/AoAAAtBACADNgKIjcCAAEEAIAU3A5iNwIAAQQEhAUEAQQE6APSKwIAAQQAgAEGoBGpBCGopAwA3A4CNwIAAQQAgACkDqAQ3A/iMwIAAQQBBAC8ByIjAgAA7AYyNwIAAQQBBACgCxIjAgAA2ApCNwIAAQQBBACgCyIfAgAAiAjYC8IrAgABBACACNgLUiMCAAAwECyAEQQBHIQQLIAJBAWohCiAAKQPIGCAFhCEFIABBuAhqIAZqIAQ2AgAgAEG4BGogAkH8AGxqIQtBACEJQQAhDANAIAxBPUshDSAJIQQCQANAIAQhDiAQIQ8gCSERIAIhECABIAhPDQEgDQ0BIAAgASAHIAgQhoCAgAAgAEHYGGogACgCACAAKAIEEIOAgIAAIAAoAtwYIAFqIQFBACEJQQAhBCAALQDYGEEBRw0AAkAgAC0A2RgiAkFQakH/AXFBCkkNAEEAIQQgAkFfcUG/f2pB/wFxQRlLDQELQQEhCSARIQQgESAOcUEBcUUNAAtBASEJIAsgDEEBdGogDyAQIAIQqYCAgAA7AQAgDEEBaiEMDAELCyAAQagIaiAGaiAMNgIAIAohAgwACwtBBEEEEIWAgIAAAAsgAEHgGGokgICAgAAgAQvfKQoGfwF+An8BfgF/AX4WfwN+An8CfiOAgICAAEGg+QBrIgEkgICAgAACQAJAQQAtAPSKwIAARQ0AAkBBgAJFDQAgAUGYAWpB9YrAgABBgAL8CgAAC0EAIQIgAUGIB2pBCGoiA0EAKQOAjcCAADcDACABQQApA/iMwIAANwOIB0EAKAKIjcCAACEEQQAvAYyNwIAAIQVBACgCkI3AgAAhBkEAKQOYjcCAACEHAkBB8ANFDQAgAUGYA2pBpI3AgABB8AP8CgAACyABQZgHakEIakEAKQKckcCAADcDACABQagHakEIakEAKQKskcCAADcDACABQQApApSRwIAANwOYByABQQApAqSRwIAANwOoByABQZABaiABQZgBaiABKAKIByIIEImAgIAAIAFB+McAaiABKAKQASABKAKUARDmgICAACABQYgBaiABQdgBaiABKAKMBxCJgICAACABQYjYAGogASgCiAEgASgCjAEQ5oCAgAAgAUGAAWogAUGYAmogAygCABCJgICAACABQZjoAGogASgCgAEgASgChAEQ5oCAgAAgAUH4AGogAUHYAmogASgClAcQiYCAgAAgAUHoN2ogASgCeCABKAJ8EOaAgIAAAkBBkBBFIgMNACABQbgHaiABQfjHAGpBkBD8CgAACwJAIAMNACABQbgHakGQEGogAUGI2ABqQZAQ/AoAAAsCQCADDQAgAUHYJ2ogAUGY6ABqQZAQ/AoAAAtBACgC8IrAgAAiCa0iCkEAKALsisCAACILrSAArXwiDCAKIAxUG6chDUIAIQwDQCABQagHaiACQQJ0aiEAAkADQAJAIAQgAiIDRw0AIAZBAyAGQQNJGyEOIAsgDSALIA1LGyEPIARBAWohECAGQQBHIREgCEF/cyESIARBf2pB/////wNxIRMgAUGo+ABqQQRqIRQgBUH//wNxIRVCACEKQX8hBkF/IRYDQEEAKALQh8CAACEXQQAoAriHwIAAIRhBAC0AxMPFgABBAXEhGUEAIQMgFiEaAkACQAJAAkACQANAIAMhGyALQQV0IRwgDSALayEdIAshHgJAA0ACQAJAAkACQAJAIB4gD0cNAEEAIQNBACAPNgLsisCAACAPIAlJDRNBAEEAOgDEw8WAAEEAQQA6APSKwIAAQQAoAtyHwIAAIgNBPGxBhNXEgABqIQAgA0HIAUshHwNAIANBAkkNEwJAQTxFIgINACABQdj4AGpBwNXEgABBPPwKAAALIANBf2ohAyAfDQICQCACDQBBwNXEgAAgAEE8/AoAAAsCQCACDQAgACABQdj4AGpBPPwKAAALIAMQ6oCAgAAgAEFEaiEADAALCyAe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AyAbSxshAgJAAkACQAJAAkBBACgC3IfAgAAiA0UNACADQQAoAsyIwIAASQ0CQQAvAczVxIAAIQAMAQtBACEAQQAoAsyIwIAADQILIABB//8DcSAcQf//A3FPDQNBACAbNgLU1cSAAEEAIAI2AtDVxIAAQQAgHDsBzNXEgABBACAiNgLI1cSAAEEAIB42AsTVxIAAQQAgFjYCwNXEgABBACABKQK4eDcC2NXEgABBACAENgL41cSAAEEAIAFBuPgAakEIaikCADcC4NXEgABBACABQbj4AGpBEGopAgA3AujVxIAAQQAgAUG4+ABqQRhqKQIANwLw1cSAACADEOqAgIAADAMLIANByAFPDQELQQAgA0EBajYC3IfAgAAgA0E8bCIAQdTVxIAAaiAbNgIAIABB0NXEgABqIAI2AgAgAEHM1cSAAGogHDsBACAAQcjVxIAAaiAiNgIAIABBxNXEgABqIB42AgAgAEHA1cSAAGogFjYCACAAQdjVxIAAaiABKQK4eDcCACAAQeDVxIAAaiABQbj4AGpBCGopAgA3AgAgAEHo1cSAAGogAUG4+ABqQRBqKQIANwIAIABB8NXEgABqIAFBuPgAakEYaikCADcCACAAQfjVxIAAaiAENgIAA0AgA0UNAiADQTxsIgBBzNXEgABqLwEAIANBf2pBAXYiA0E8bCICQczVxIAAai8BAE8NAiAAQcDVxIAAaiEfAkBBPEUiAA0AIAFBiNgAaiAfQTz8CgAACyACQcDVxIAAaiECAkAgAA0AIB8gAkE8/AoAAAsgAA0AIAIgAUGI2ABqQTz8CgAADAALCwsgA0HIARCFgICAAAALIANBBEYNASADQQFqIQIgACgCACEfIABBBGohACAfDQALIAFBuAdqIANBkBBsaikDgBAgDIQhDAwBCwsgBEEEIARBBEkbQQQQhYCAgAAAC0EBIQMLIAFBoPkAaiSAgICAACADC+MCAQV/I4CAgIAAQcAAayIBJICAgIAAQQAhAgJAAkACQANAIAIhAwJAIAJBAXQiBEEBciIFIABPDQACQCACQeMASw0AIAUgAiAFQTxsQczVxIAAai8BACACQTxsQczVxIAAai8BAEkbIQMMAQsgBUHIARCFgICAAAALAkAgBEECaiIEIABPDQAgAkHiAEsNAiADQcgBTw0DIAQgAyAEQTxsQczVxIAA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IAFBJGogAEE8bEHA1cSAAGpBPPwKAAALIAEoAiQhAkEAIQNBACgC0IfAgAAhBEEAIQVBACEGAkADQCAEIAYiAEYNASABQRhqELGAgIAAIAAgASgCHCIGTw0DIABBAWohBiABKAIYIgcgBWohCCAFQRRqIQUgCCgCACACRw0ACyAHIABBFGxqIgUoAgQhACABQRBqIAUvAQgiAxCQgICAACABKAIUIQYgASgCECEIIAFBCGoQs4CAgAAgACADaiIFIABJDQMgBSABKAIMIgRLDQQgCCAGIAEoAgggAGogAxCTgICAAAsgAUHgAGokgICAgAAgAw8LIABByAEQhYCAgAAACyAAIAYQhYCAgAAACyAAIAUQgYCAgAAACyAFIAQQgYCAgAAAC8sCAQZ/I4CAgIAAQeAAayIBJICAgIAAAkACQAJAAkACQAJAIABBACgC3IfAgABJDQAgAUEkahCdgICAAAwBCyAAQccBSw0BQTxFDQAgAUEkaiAAQTxsQcDVxIAAakE8/AoAAAtBACEAAkAgASgCKCICQQAoAsiHwIAATw0AIAFBGGoQr4CAgAAgAiABKAIcIgBPDQIgASgCGCACQQV0aiIAKAIQIQIgAUEQaiAAKAIUIgBBgIAEIABBgIAESRsiABCQgICAACABKAIUIQMgASgCECEEIAFBCGoQsICAgAAgACACaiIFIABJDQMgBSABKAIMIgZLDQQgBCADIAEoAgggAmogABCTgICAAAsgAUHgAGokgICAgAAgAA8LIABByAEQhYCAgAAACyACIAAQhYCAgAAACyACIAUQgYCAgAAACyAFIAYQgYCAgAAACwsAQQAoAsDDxYAAC4oJAQt/I4CAgIAAQYABayIDJICAgIAAQQBBADYCwMPFgAACQAJAAkACQAJAAkACQAJAAkACQCAAQQAoAtyHwIAASQ0AIANBxABqEJ2AgIAADAELIABBxwFLDQFBPEUNACADQcQAaiAAQTxsQcDVxIAAakE8/AoAAAtBACEEIAMoAkgiAEEAKALIh8CAAE8NBCADQThqEK+AgIAAIAAgAygCPCIETw0BQQAhBSADKAJYIQYgAygCOCAAQQV0aiIAKAIUIQcgACgCECEIIAMoAlQiACABTQ0DQQAgACABayIEIAQgAEsbIgUgCGohBEEAIQADQCAAQRNLDQQgBSAAaiIJIAdPDQQgA0EwahCwgICAACAEIABqIgEgAygCNCIKTw0DAkACQCADKAIwIARqIABqLQAAIgFBCkYNACABQSBHDQELIAlBAWohBQwFCyAAQQFqIQAMAAsLIABByAEQhYCAgAAACyAAIAQQhYCAgAAACyABIAoQhYCAgAAACyAHIAYgAmoiACAHIABJGyEBAkACQAJAIAAgB08NACAHIAFrIgBBFCAAQRRJGyEKIAEgCGohBEEAIQADQCAKIABGDQEgA0EoahCwgICAACAEIABqIgkgAygCLCICTw0CAkAgAygCKCAEaiAAai0AACIJQQpGDQAgCUEgRg0AIABBAWohAAwBCwsgACABaiEBCyAFIQQCQANAIAQiAEEARyEEIABFDQMgBSAHTw0DIANBIGoQsICAgAAgCCAAaiIEIAMoAiQiCU8NASAAQX9qIQQgAygCICAIaiAAaiwAAEFASA0AC0EBIQQMAgsgBCAJEIWAgIAAAAsgCSACEIWAgIAAAAsCQCABIAdPDQAgASAAIAEgAEkbIQoDQAJAIAEgAEsNACAKIQEMAgsgA0EYahCwgICAAAJAIAggAWoiBSADKAIcIglPDQAgAygCGCAIaiABaiwAAEFATg0CIAFBf2ohAQwBCwsgBSAJEIWAgIAAAAsgASAAIAEgAEsbIQkCQAJAIAQNAEEAIQUMAQtBfCEEA0ACQCAEDQBBBCEFDAILIARBlJXAgABqIARBnIDAgABqLQAAOgAAIARBAWohBAwACwsgA0EQaiAFQfz/A0GAgAQgCSAHSRsgBWsiAiAJIABrIgQgAiAESRsiCiAFaiIEEJGAgIAAIAMoAhQhCyADKAIQIQwgA0EIahCwgICAACAKIAAgCGoiBmoiCCAKSQ0CIAggAygCDCINSw0DIAwgCyADKAIIIAZqIAoQk4CAgAACQCAJIAdPDQAgBEH8/wNLDQBBACEEIAVBACABIABrIgcgByABSyIJGyIIIAIgCCACSRtqIQECQANAIARBBEYNASABIARqIghBgIAETw0EIAhBkJXAgABqIARBnIDAgABqLQAAOgAAIARBAWohBAwACwsgBUEAIAcgCRsiCCACIAggAkkbaiAEaiEEC0EAIAA2AsDDxYAACyADQYABaiSAgICAACAEDwsgCEGAgAQQhYCAgAAACyAGIAgQgYCAgAAACyAIIA0QgYCAgAAACwsAQQAoAsiHwIAACwsAQQAoAtCHwIAACwsAQQAoAsyHwIAACwsAQQAoAsCHwIAACwsAQQAoAqCNwIAACwsAQQAoAryHwIAACwsAQQAoAriHwIAACwsAQQAoAsSHwIAACzQBAn8jgICAgABBEGsiACSAgICAACAAQQhqEK+AgIAAIAAoAgghASAAQRBqJICAgIAAIAELBABBIAusAQEEfyOAgICAAEEQayIBJICAgIAAIAFBCGoQtoCAgAAgASgCCCECAkAgASgCDCIDIABBgIAEIABBgIAESRtBAnYiBCADIARJG0ECdCIERQ0AIAJBkJXAgAAgBPwKAAALIANBAnQgBGshAyACIARqIQQCQANAIANFDQEgBEEANgIAIANBfGohAyAEQQRqIQQMAAsLQQAgAEEDSzoAxMPFgAAgAUEQaiSAgICAAAsNAEEAQQA6AMTDxYAAC20BAn8jgICAgABBEGsiASSAgICAAEF/IQICQAJAIABBACgC0IfAgABPDQAgAUEIahCxgICAACAAIAEoAgwiAk8NASABKAIIIABBFGxqKAIAIQILIAFBEGokgICAgAAgAg8LIAAgAhCFgICAAAALbQECfyOAgICAAEEQayIBJICAgIAAQQAhAgJAAkAgAEEAKALQh8CAAE8NACABQQhqELGAgIAAIAAgASgCDCICTw0BIAEoAgggAEEUbGooAhAhAgsgAUEQaiSAgICAACACDwsgACACEIWAgIAAAAviAQEGfyOAgICAAEEgayIBJICAgIAAQQAhAgJAAkACQAJAIABBACgC0IfAgABPDQAgAUEYahCxgICAACAAIAEoAhwiAk8NASABKAIYIABBFGxqIgIoAgQhACABQRBqIAIvAQgiAhCQgICAACABKAIUIQMgASgCECEEIAFBCGoQs4CAgAAgACACaiIFIABJDQIgBSABKAIMIgZLDQMgBCADIAEoAgggAGogAhCTgICAAAsgAUEgaiSAgICAACACDwsgACACEIWAgIAAAAsgACAFEIGAgIAAAAsgBSAGEIGAgIAAAAttAQJ/I4CAgIAAQRBrIgEkgICAgABBACECAkACQCAAQQAoAtCHwIAATw0AIAFBCGoQsYCAgAAgACABKAIMIgJPDQEgASgCCCAAQRRsaigCDCECCyABQRBqJICAgIAAIAIPCyAAIAIQhYCAgAAAC6wBAQN/I4CAgIAAQRBrIgIkgICAgABBfyEDAkACQAJAIABBACgC0IfAgABPDQAgAkEIahCxgICAACAAIAIoAgwiBE8NASABIAIoAgggAEEUbGoiACgCEE8NACACEK+AgIAAIAAoAgwgAWoiACACKAIEIgNPDQIgAigCACAAQQV0aigCDCEDCyACQRBqJICAgIAAIAMPCyAAIAQQhYCAgAAACyAAIAMQhYCAgAAAC6wBAQN/I4CAgIAAQRBrIgIkgICAgABBACEDAkACQAJAIABBACgC0IfAgABPDQAgAkEIahCxgICAACAAIAIoAgwiBE8NASABIAIoAgggAEEUbGoiACgCEE8NACACEK+AgIAAIAAoAgwgAWoiACACKAIEIgNPDQIgAigCACAAQQV0aigCFCEDCyACQRBqJICAgIAAIAMPCyAAIAQQhYCAgAAACyAAIAMQhYCAgAAAC68CAQV/I4CAgIAAQSBrIgIkgICAgABBACEDAkACQAJAAkACQCAAQQAoAtCHwIAATw0AIAJBGGoQsYCAgAAgACACKAIcIgRPDQEgASACKAIYIABBFGxqIgAoAhBPDQAgAkEQahCvgICAACAAKAIMIAFqIgAgAigCFCIDTw0EIAIoAhAgAEEFdGoiAygCECEAIAJBCGogAygCFCIDQYCABCADQYCABEkbIgMQkICAgAAgAigCDCEEIAIoAgghBSACELCAgIAAIAMgAGoiASADSQ0CIAEgAigCBCIGSw0DIAUgBCACKAIAIABqIAMQk4CAgAALIAJBIGokgICAgAAgAw8LIAAgBBCFgICAAAALIAAgARCBgICAAAALIAEgBhCBgICAAAALIAAgAxCFgICAAAALnQQBCn8jgICAgABBwABrIgMkgICAgABBACEEAkAgAEEAKALQh8CAAE8NACADQTBqELGAgIAAAkACQAJAIAAgAygCNCIFTw0AIAEgAygCMCAAQRRsaiIGKAIQIgVPDQNBACEAQQBBfyABIAJqIgIgAiABSRsiAiAFIAIgBUkbIgIgAWsiBSAFIAJLGyEEIAYoAgwgAWoiB0EFdEEUciEGQQAhAQNAIAQgAEYNBCADQShqEK+AgIAAAkACQCAHIABqIgIgAygCLCIFTw0AIAMoAiggBmoiCCgCACICIAFBCGoiCWoiCkGAgARNDQEgACEEDAYLIAIgBRCFgICAAAALIAhBfGooAgAhBSAIQXhqKAIAIQggA0EgaiABIAFBBGoiCxCRgICAACADKAIkIQEgAygCICEMIAMgAjYCPCAMIAEgA0E8akEEEJOAgIAAIANBGGogCyAJEJGAgIAAIAMoAhwhASADKAIYIQsgAyAINgI8IAsgASADQTxqQQQQk4CAgAAgA0EQaiAJIAoQkYCAgAAgAygCFCEIIAMoAhAhCSADQQhqELCAgIAAIAUgAmoiASAFSQ0CIAEgAygCDCILSw0DIAkgCCADKAIIIAVqIAIQk4CAgAAgBkEgaiEGIABBAWohACAKIQEMAAsLIAAgBRCFgICAAAALIAUgARCBgICAAAALIAEgCxCBgICAAAALIANBwABqJICAgIAAIAQLagECfyOAgICAAEEQayIBJICAgIAAQQAhAgJAAkAgAEEAKALQh8CAAE8NACABQQhqELKAgIAAIAAgASgCDCICTw0BIAEoAgggAEEDdGohAgsgAUEQaiSAgICAACACDwsgACACEIWAgIAAAAsEAEEIC3ABAn8jgICAgABBEGsiASSAgICAAEEAIQICQAJAIABBACgC0IfAgABPDQAgAUEIahCxgICAACAAIAEoAgwiAk8NASABKAIIIABBFGxqLwEKQQFxIQILIAFBEGokgICAgAAgAg8LIAAgAhCFgICAAAAL/wEBCH8jgICAgABBEGsiASSAgICAAEEAIQJBACgC0IfAgAAhA0EAIQRBACEFAkACQAJAA0AgAyAFIgZGDQEgAUEIahCxgICAACAGIAEoAgwiBU8NAyAGQQFqIQUgASgCCCIHIARqIQggBEEUaiEEIAgoAgAgAEcNAAtBASECIAcgBkEUbGoiBiAGLwEKQQFyOwEKIABBACgCuIfAgABPDQAgARC1gICAACAAQQZ2IgYgASgCBCIETw0BIAEoAgAgBkEDdGoiBiAGKQMAQgEgAEE/ca2GhDcDAAsgAUEQaiSAgICAACACDwsgBiAEEIWAgIAAAAsgBiAFEIWAgIAAAAv+BwIVfwJ+I4CAgIAAQdAAayIAJICAgIAAQQAoAtCHwIAAIQEgAEE4ahC1gICAACAAKAI8QQN0IQIgACgCOCEDAkADQAJAIAINAEEAIQRBACEFQQAhBkEAIQNBACEHDAILIANCADcDACACQXhqIQIgA0EIaiED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IAJBACgCzIfAgAA2AvABIAggBCACQfABakEEEJOAgIAAIAJBmAFqIAJBsAJqQRRBGBCMgICAACACKAKcASEEIAIoApgBIQggAkEAKALUh8CAADYC8AEgCCAEIAJB8AFqQQQQk4CAgAAgAkGQAWogAkGwAmpBGEEcEIyAgIAAIAIoApQBIQQgAigCkAEhCCACIA82AvABIAggBCACQfABakEEEJOAgIAAIAJBiAFqIAJBsAJqQRxBIBCMgICAACACKAKMASEEIAIoAogBIQggAkEAKALYh8CAADYC8AEgCCAEIAJB8AFqQQQQk4CAgAAgAkGAAWogAkGwAmpBIEEoEIyAgIAAIAIoAoQBIQQgAigCgAEhCCACIBA3A/ABIAggBCACQfABakEIEJOAgIAAIAJB+ABqIAJBsAJqQShBLBCMgICAACACKAJ8IQQgAigCeCEIIAJBACgCuIfAgAA2AvABIAggBCACQfABakEEEJOAgIAAIAJB8ABqIAJBsAJqQSxBMBCMgICAACACKAJ0IQQgAigCcCEIIAJBACgCvIfAgAA2AvABIAggBCACQfABakEEEJOAgIAAIAJB6ABqIAJBsAJqQTBBNBCMgICAACACKAJsIQQgAigCaCEIIAJBACgCwIfAgAA2AvABIAggBCACQfABakEEEJOAgIAAIAJB4ABqIAJBsAJqQTRBOBCMgICAACACKAJkIQQgAigCYCEIIAJBACgCxIfAgAA2AvABIAggBCACQfABakEEEJOAgIAAIAENBSACQfABaiACQbACakHAAPwKAAAMBQsgAyABEIGAgIAAAAsgAigC4AEgBGogAkGwAmoQn4GAgAAgBEEUaiEEIAFBAWohASAQIAJBsAJqQRQQnoGAgAAhEAwACwsgEUIANwMAIBJCADcDACACQgA3A7ACIAJB6AFqEK+AgIAAAkAgASACKALsASITSQ0AIAEgExCFgICAAAALIAIoAugBIARqIAJBsAJqEKCBgIAAIARBIGohBCABQQFqIQEgECACQbACakEYEJ6BgIAAIRAMAAsLIAVBgIAEIAVBgIAESRsiAyAAaiEIIAJBwAJqIRIgAkG4AmohE0EAIQQDQCAIIABNDQECQAJAAkACQAJAAkACQAJAAkACQCAAQcAASQ0AAkAgACAHSQ0AAkAgACAJSQ0AAkACQAJAIAAgC0kN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IAEoAjQQk4CAgAAgAyAAaiEAIA8hAgwACwtBACEDQQAoAsjDxYAAIAJqQQAoAtjDxYAASw0BQQAhBQJAAkACQAJAIAJBACgC0MPFgAAiB0EAKALUw8WAACIAa0sNAEEAKALAkcCAACEHDAELIAAgAmoiAyAASQ0BQQAhBSADIAdBAXQiACADIABLGyIAQQggAEEISxsiAEEASA0BQQAhBQJAIAdFDQAgASAHNgKMASABQQAoAsCRwIAANgKEAUEBIQULIAEgBTYCiAEgAUH4AGogACABQYQBahCXgICAAAJAIAEoAnhBAUcNACABKAKAASEAIAEoAnwhBQwDC0EAIAEoAnwiBzYCwJHAgABBACAANgLQw8WAAEEAKALUw8WAACEACwJAIAJFDQAgByAAakGQlcCAACAC/AoAAAtBAEEAKALUw8WAACACajYC1MPFgABBACgCyMPFgAAgAmohAAwCCwsgBSAAEKKBgIAAAAtBACAANgLIw8WAAEEBIQMLIAFBkAFqJICAgIAAIAMLxAMBB38jgICAgABBIGsiASSAgICAAEEAIQJBACgC0IfAgAAhA0EAIQRBACEFAkACQANAIAMgBEYNASABQRhqELGAgIAAIAQgASgCHCIGTw0CIAEoAhggAmooAgBBAWoiBkF/IAYbIgYgBSAGIAVLGyEFIAJBFGohAiAEQQFqIQQMAAsLQQAgBSAAIAUgAEsbNgLYh8CAACABQRBqELWAgIAAIAEoAhRBA3QhBCABKAIQIQUCQANAIARFDQEgBUIANwMAIARBeGohBCAFQQhqIQUMAAsLQQAhBEEAKALQh8CAACEGQQAoAriHwIAAIQBBCiEFA0ACQAJAIAYgBEYNACABQQhqELGAgIAAAkACQCAEIAEoAgwiAk8NACABKAIIIAVqIgItAABBAXFFDQMgAkF2aigCACICIABJDQEMAwsgBCACEIWAgIAAAAsgARC1gICAAAJAIAJBBnYiAyABKAIEIgdPDQAgASgCACADQQN0aiIDIAMpAwBCASACQT9xrYaENwMADAILIAMgBxCFgICAAAALEN2AgIAAIAFBIGokgICAgAAPCyAEQQFqIQQgBUEUaiEFDAALCyAEIAYQhYCAgAAAC8EPBg9/AX4BfwF+BH8BfiOAgICAAEHQAGsiACSAgICAAAJAAkACQEEALQDMw8WAACIBDQAQ3YCAgAAMAQsCQCABQQNJDQBBACECAkBBACgCyMPFgABBACgC2MPFgABHDQBBACECQQAoAuDDxYAAIgNBFGxBACgC3MPFgAAiBEEYbCIFaiIGIANBA3RqIgdBACgC6MPFgAAiCGoiCUEAKALkw8WAACIKakEAKALUw8WAACILRw0AQQAoAsCRwIAAIQwCQCABQQNGDQBBACECQqXGiKHInKf5SyAMIAsQnoGAgABBACkD8MPFgABSDQELIAxBFGohAiALQRhuIg1BAWohDiAKrSEPQQAhAQJAAkACQANAAkAgBCABRw0AIAVBKGohECAErSEPIAitIRFBACESIAMhEwwCCyAOIAFBAWoiAUYNAiACNQAAIhFCgARWDQMgAkF8aiEUIAJBGGohAiAUNQAAIBF8IA9YDQAMAwsLA0ACQAJAAkACQAJAIBIgA0YNACASQRRsIAVqIgJBFGohASACQWtLDQMgASALSw0CIAwgAmoiAjMACCACNQAEfCARVg0HIAI1ABAgAjUADHwgD1YNByACLwAKQQFxDQQgAigAACEVIBAhAiATIRQDQCAUQX9qIhRFDQUgAiALSw0CIAwgAmohASACQRRqIg4hAiABQXZqLQAAQQFxDQAgDiECIAFBbGooAAAgFUYNCAwACwsQwoCAgABBACEBQQAgAzYC0IfAgABBACAENgLIh8CAAEEAIAg2AtSHwIAAQQAgCjYCzIfAgAAgDUEYbCEVQRghDkEAIQICQANAAkAgBCACRw0AIAwgBWohFUEAIQJBACEBAkACQAJAAkACQAJAAkACQAJAA0ACQCADIAFHDQAgDCAGaiEOQQAhAkEAIQEDQCADIAFGDQMgBiACaiIUQQhqIQQgFEF3Sw0IIAQgC0sNCSAAQThqELKAgIAAIAEgACgCPCIUTw0EIAAoAjggAmogDiACaikAADcAACABQQFqIQEgAkEIaiECDAALCyAFIAJqIhRBFGohBCAUQWtLDQQgBCALSw0FIABBwABqELGAgIAAIAEgACgCRCIUTw0DIBUgAmoiFEEIaigAACEOIBQpAAAhESAAKAJAIAJqIgRBDGogFEEMaikAADcCACAEIBE3AgAgBEEIaiAONgIAIAFBAWohASACQRRqIQIMAAsLIABBMGoQs4CAgAAgAEEoaiAIIAAoAjAgACgCNBCCgICA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';
|
package/src/albex.ts
CHANGED
|
@@ -130,6 +130,22 @@ export interface AlbexOptions {
|
|
|
130
130
|
wasmBaseUrl?: string;
|
|
131
131
|
/** URL to albex_pdf.wasm. Required only if you call indexFile() with PDFs. */
|
|
132
132
|
pdfWasmUrl?: string;
|
|
133
|
+
/**
|
|
134
|
+
* Raw bytes of the main core WASM. When present, Albex instantiates from
|
|
135
|
+
* these directly and does NO network fetch — `wasmUrl`, `wasmBaseUrl` and
|
|
136
|
+
* SIMD auto-selection are all ignored. This is the escape hatch for
|
|
137
|
+
* bundlers that don't rewrite `new URL('…wasm', import.meta.url)` (esbuild,
|
|
138
|
+
* many Angular and Webpack setups): import the `.wasm` as an asset through
|
|
139
|
+
* your own bundler and hand the bytes here. The `albex/inline` entry point
|
|
140
|
+
* sets this automatically with an embedded baseline core — true zero-config.
|
|
141
|
+
*/
|
|
142
|
+
wasmBytes?: BufferSource;
|
|
143
|
+
/**
|
|
144
|
+
* Raw bytes of `albex_pdf.wasm`. Same rationale as {@link wasmBytes}; only
|
|
145
|
+
* needed if you index PDFs AND your bundler can't serve the binary. When
|
|
146
|
+
* present, the PDF module is compiled from these instead of fetched.
|
|
147
|
+
*/
|
|
148
|
+
pdfWasmBytes?: BufferSource;
|
|
133
149
|
/**
|
|
134
150
|
* Engine capacity. `'std'` (default) keeps the historical limits;
|
|
135
151
|
* `'large'` raises them to 1 024 docs / 800k chunks / 128 MB text; an
|
|
@@ -953,10 +969,7 @@ export class AlbexEngine {
|
|
|
953
969
|
* requested capacity is out of range or the allocation fails.
|
|
954
970
|
*/
|
|
955
971
|
async init(): Promise<void> {
|
|
956
|
-
const
|
|
957
|
-
const res = await fetch(url);
|
|
958
|
-
if (!res.ok) throw new AlbexInitError(`Failed to fetch WASM: ${res.status} (${url})`);
|
|
959
|
-
const { instance } = await WebAssembly.instantiateStreaming(res, {});
|
|
972
|
+
const instance = await this._instantiateMainWasm();
|
|
960
973
|
this._wasm = asAlbexExports(instance.exports);
|
|
961
974
|
this._mem = this._wasm.memory;
|
|
962
975
|
this._capacity = resolveCapacity(this._opts.capacity);
|
|
@@ -986,6 +999,79 @@ export class AlbexEngine {
|
|
|
986
999
|
}
|
|
987
1000
|
}
|
|
988
1001
|
|
|
1002
|
+
/**
|
|
1003
|
+
* Instantiate the main core WASM. Two sources, in order of precedence:
|
|
1004
|
+
* 1. `opts.wasmBytes` — caller-provided bytes; NO network access. The
|
|
1005
|
+
* `albex/inline` entry uses this with the embedded baseline core, and
|
|
1006
|
+
* integrators on bundlers that don't rewrite `new URL(…, import.meta.
|
|
1007
|
+
* url)` (esbuild / Angular / some Webpack) can import the `.wasm` as an
|
|
1008
|
+
* asset and pass the bytes here.
|
|
1009
|
+
* 2. a URL from `_resolveWasmUrl` (`wasmUrl` / `wasmBaseUrl` / the
|
|
1010
|
+
* bundler-friendly default).
|
|
1011
|
+
*
|
|
1012
|
+
* The URL path prefers `instantiateStreaming` and falls back to
|
|
1013
|
+
* `instantiate(arrayBuffer)` when the host serves the `.wasm` with the
|
|
1014
|
+
* wrong MIME type — a common esbuild / static-server pitfall that
|
|
1015
|
+
* otherwise rejects with an opaque "Incorrect response MIME type". A 404
|
|
1016
|
+
* or a network error is rethrown as an `AlbexInitError` whose message
|
|
1017
|
+
* points at the concrete fixes (inline entry / `wasmBytes` / `wasmUrl`).
|
|
1018
|
+
*/
|
|
1019
|
+
private async _instantiateMainWasm(): Promise<WebAssembly.Instance> {
|
|
1020
|
+
const bytes = this._opts.wasmBytes;
|
|
1021
|
+
if (bytes) {
|
|
1022
|
+
// No fetch, no SIMD probe: the caller chose the binary. `simdEnabled`
|
|
1023
|
+
// reflects only an explicit `simd: 'on'` assertion about those bytes.
|
|
1024
|
+
this._profile = await detectProfile();
|
|
1025
|
+
this._simd = this._opts.simd === 'on';
|
|
1026
|
+
const { instance } = await WebAssembly.instantiate(bytes, {});
|
|
1027
|
+
return instance;
|
|
1028
|
+
}
|
|
1029
|
+
|
|
1030
|
+
const url = await this._resolveWasmUrl();
|
|
1031
|
+
let res: Response;
|
|
1032
|
+
try {
|
|
1033
|
+
res = await fetch(url);
|
|
1034
|
+
} catch (cause) {
|
|
1035
|
+
throw new AlbexInitError(this._wasmLoadHelp(url, String(cause)));
|
|
1036
|
+
}
|
|
1037
|
+
if (!res.ok) {
|
|
1038
|
+
throw new AlbexInitError(this._wasmLoadHelp(url, `HTTP ${res.status}`));
|
|
1039
|
+
}
|
|
1040
|
+
try {
|
|
1041
|
+
const { instance } = await WebAssembly.instantiateStreaming(res, {});
|
|
1042
|
+
return instance;
|
|
1043
|
+
} catch (streamErr) {
|
|
1044
|
+
// Streaming rejects when the response Content-Type isn't
|
|
1045
|
+
// `application/wasm`. The bytes are usually fine — re-fetch (the first
|
|
1046
|
+
// body was consumed by the streaming attempt) and compile from a buffer.
|
|
1047
|
+
try {
|
|
1048
|
+
const buf = await (await fetch(url)).arrayBuffer();
|
|
1049
|
+
const { instance } = await WebAssembly.instantiate(buf, {});
|
|
1050
|
+
return instance;
|
|
1051
|
+
} catch {
|
|
1052
|
+
throw new AlbexInitError(
|
|
1053
|
+
this._wasmLoadHelp(url, `instantiate failed (${String(streamErr)})`),
|
|
1054
|
+
);
|
|
1055
|
+
}
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
/** Build the actionable "couldn't load the core" message shared by every
|
|
1060
|
+
* main-WASM load failure. The default `albex` entry embeds the core, so a
|
|
1061
|
+
* fetch only runs when the caller explicitly set `wasmUrl`/`wasmBaseUrl` —
|
|
1062
|
+
* the message leads with the one-line exit (drop the option). */
|
|
1063
|
+
private _wasmLoadHelp(url: string, reason: string): string {
|
|
1064
|
+
return (
|
|
1065
|
+
`Albex couldn't fetch its core WASM (${reason}) from ${url}. ` +
|
|
1066
|
+
`You're on the network path because \`wasmUrl\` or \`wasmBaseUrl\` is ` +
|
|
1067
|
+
`set. Easiest fix: remove that option — the default ` +
|
|
1068
|
+
`\`import { AlbexEngine } from 'albex'\` embeds the core and serves ` +
|
|
1069
|
+
`nothing. Keep the option only for a CDN or the SIMD build, and make ` +
|
|
1070
|
+
`sure it points at a reachable \`albex_wasm*.wasm\` (check the path, ` +
|
|
1071
|
+
`the dev server, and CORS).`
|
|
1072
|
+
);
|
|
1073
|
+
}
|
|
1074
|
+
|
|
989
1075
|
/**
|
|
990
1076
|
* Decide which `.wasm` binary to fetch. Order of precedence:
|
|
991
1077
|
* 1. `opts.wasmUrl` literal → use verbatim
|
|
@@ -1208,9 +1294,27 @@ export class AlbexEngine {
|
|
|
1208
1294
|
|
|
1209
1295
|
private async _ensurePdfWasm(): Promise<void> {
|
|
1210
1296
|
if (this._pdfWasm) return;
|
|
1297
|
+
// Compile first (regardless of source) so we can inspect the module's
|
|
1298
|
+
// required imports and resolve mangled wasm-bindgen names by prefix
|
|
1299
|
+
// rather than by hash.
|
|
1300
|
+
const module = this._opts.pdfWasmBytes
|
|
1301
|
+
? await WebAssembly.compile(this._opts.pdfWasmBytes)
|
|
1302
|
+
: await this._fetchPdfModule();
|
|
1303
|
+
const imports = makePdfWasmImports(module, () => this._pdfMem);
|
|
1304
|
+
const instance = await WebAssembly.instantiate(module, imports);
|
|
1305
|
+
this._pdfWasm = asAlbexPdfExports(instance.exports);
|
|
1306
|
+
this._pdfMem = this._pdfWasm.memory;
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
/** Fetch + compile the PDF module from a URL. Split out of
|
|
1310
|
+
* `_ensurePdfWasm` so the `pdfWasmBytes` (no-network) path stays trivial.
|
|
1311
|
+
* Falls back to a buffered compile when the host serves the binary with
|
|
1312
|
+
* the wrong MIME type (same pitfall as the core loader). */
|
|
1313
|
+
private async _fetchPdfModule(): Promise<WebAssembly.Module> {
|
|
1211
1314
|
// Zero-config default: resolve relative to this module so bundlers copy
|
|
1212
1315
|
// the .wasm to the output automatically. Override with `opts.pdfWasmUrl`
|
|
1213
|
-
// when serving from a separate CDN
|
|
1316
|
+
// when serving from a separate CDN, or pass `pdfWasmBytes` to skip the
|
|
1317
|
+
// network entirely (e.g. esbuild/Angular).
|
|
1214
1318
|
const pdfUrl = this._opts.pdfWasmUrl
|
|
1215
1319
|
?? new URL('../wasm/pkg/albex_pdf.wasm', import.meta.url).href;
|
|
1216
1320
|
// Network politeness: on constrained connections (slow-2g/2g/saveData)
|
|
@@ -1223,15 +1327,27 @@ export class AlbexEngine {
|
|
|
1223
1327
|
message: 'Downloading PDF WASM (~1 MB) on a constrained network connection',
|
|
1224
1328
|
});
|
|
1225
1329
|
}
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1330
|
+
let res: Response;
|
|
1331
|
+
try {
|
|
1332
|
+
res = await fetch(pdfUrl);
|
|
1333
|
+
} catch (cause) {
|
|
1334
|
+
throw new AlbexInitError(
|
|
1335
|
+
`Failed to fetch PDF WASM from ${pdfUrl} (${String(cause)}). ` +
|
|
1336
|
+
`Pass \`pdfWasmBytes\` (bundler asset import) or set \`pdfWasmUrl\`.`,
|
|
1337
|
+
);
|
|
1338
|
+
}
|
|
1339
|
+
if (!res.ok) {
|
|
1340
|
+
throw new AlbexInitError(
|
|
1341
|
+
`Failed to fetch PDF WASM: ${res.status} (${pdfUrl}). ` +
|
|
1342
|
+
`Pass \`pdfWasmBytes\` (bundler asset import) or set \`pdfWasmUrl\`.`,
|
|
1343
|
+
);
|
|
1344
|
+
}
|
|
1345
|
+
try {
|
|
1346
|
+
return await WebAssembly.compileStreaming(res);
|
|
1347
|
+
} catch {
|
|
1348
|
+
const buf = await (await fetch(pdfUrl)).arrayBuffer();
|
|
1349
|
+
return WebAssembly.compile(buf);
|
|
1350
|
+
}
|
|
1235
1351
|
}
|
|
1236
1352
|
|
|
1237
1353
|
// ── Indexers ──────────────────────────────────────────────────────────────
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Albex — public entry point. Install, import, use:
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { AlbexEngine } from 'albex';
|
|
6
|
+
*
|
|
7
|
+
* const engine = new AlbexEngine(); // nothing to serve, nothing to configure
|
|
8
|
+
* await engine.init();
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* The ~47 KB baseline core is base64-embedded in this module (decoded once,
|
|
12
|
+
* lazily; ~19 KB gzipped over the wire). `new AlbexEngine()` instantiates
|
|
13
|
+
* those bytes directly — NO network fetch, NO `new URL('…wasm',
|
|
14
|
+
* import.meta.url)` asset resolution — so it works in **every** bundler,
|
|
15
|
+
* esbuild / Angular / Webpack included, with zero setup.
|
|
16
|
+
*
|
|
17
|
+
* Advanced options stay available and are never required:
|
|
18
|
+
* - `wasmBaseUrl` — serve the baseline + SIMD binaries yourself (gets you
|
|
19
|
+
* the SIMD core on capable hosts; the embedded default is baseline-only).
|
|
20
|
+
* - `wasmUrl` — a single explicit core URL (e.g. a CDN).
|
|
21
|
+
* - `wasmBytes` — hand the engine bytes you loaded yourself.
|
|
22
|
+
* When any of these is set, the embedded core is bypassed.
|
|
23
|
+
*
|
|
24
|
+
* The PDF module (~1.2 MB) is too large to embed; it still loads on demand
|
|
25
|
+
* from `pdfWasmUrl` (default: resolved next to the package) or `pdfWasmBytes`.
|
|
26
|
+
*
|
|
27
|
+
* Everything else (`AlbexPool`, `TieredStore`, errors, types, …) is
|
|
28
|
+
* re-exported unchanged.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import { AlbexEngine as CoreAlbexEngine, type AlbexOptions } from './albex.js';
|
|
32
|
+
import { ALBEX_WASM_BASE64 } from './_generated/inline-wasm.js';
|
|
33
|
+
|
|
34
|
+
// Re-export the whole public surface. The local `AlbexEngine` declared below
|
|
35
|
+
// takes precedence over the one this star-export would otherwise bring in.
|
|
36
|
+
export * from './albex.js';
|
|
37
|
+
|
|
38
|
+
function decodeBase64(b64: string): Uint8Array {
|
|
39
|
+
// `atob` exists in the DOM and in Node ≥ 18 (this package's floor), so no
|
|
40
|
+
// Buffer / environment branch is needed.
|
|
41
|
+
const bin = atob(b64);
|
|
42
|
+
const out = new Uint8Array(bin.length);
|
|
43
|
+
for (let i = 0; i < bin.length; i++) out[i] = bin.charCodeAt(i);
|
|
44
|
+
return out;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
let _cached: Uint8Array | null = null;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* The embedded baseline core as raw bytes. Decoded from base64 on first call
|
|
51
|
+
* and cached, so multiple engines share one decode. Exposed for callers that
|
|
52
|
+
* want the bytes directly (e.g. to seed a worker with the same core).
|
|
53
|
+
*/
|
|
54
|
+
export function albexWasmBytes(): Uint8Array {
|
|
55
|
+
if (!_cached) _cached = decodeBase64(ALBEX_WASM_BASE64);
|
|
56
|
+
return _cached;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The Albex search engine, pre-wired with the embedded baseline core. Pass
|
|
61
|
+
* any normal {@link AlbexOptions}; an explicit `wasmBytes` / `wasmUrl` /
|
|
62
|
+
* `wasmBaseUrl` you supply takes over, so advanced (SIMD / CDN) setups keep
|
|
63
|
+
* working unchanged.
|
|
64
|
+
*/
|
|
65
|
+
export class AlbexEngine extends CoreAlbexEngine {
|
|
66
|
+
constructor(opts: AlbexOptions = {}) {
|
|
67
|
+
// Inject the embedded core only when the caller hasn't chosen a source.
|
|
68
|
+
// This keeps the engine a strict superset of the URL-based core: every
|
|
69
|
+
// existing option behaves exactly as before.
|
|
70
|
+
const hasSource =
|
|
71
|
+
opts.wasmBytes != null || opts.wasmUrl != null || opts.wasmBaseUrl != null;
|
|
72
|
+
// The cast bridges TS 5.7's `BufferSource` (which excludes
|
|
73
|
+
// `Uint8Array<ArrayBufferLike>` over SharedArrayBuffer variance) — a
|
|
74
|
+
// plain Uint8Array is a valid BufferSource at runtime.
|
|
75
|
+
super(
|
|
76
|
+
hasSource
|
|
77
|
+
? opts
|
|
78
|
+
: { ...opts, wasmBytes: albexWasmBytes() as BufferSource },
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
}
|
package/src/inline.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `albex/inline` — compatibility alias for the default entry.
|
|
3
|
+
*
|
|
4
|
+
* The embedded core is now the DEFAULT (`import { AlbexEngine } from 'albex'`
|
|
5
|
+
* already needs no setup), so this subpath exists only so existing
|
|
6
|
+
* `from 'albex/inline'` imports keep resolving. It re-exports the default
|
|
7
|
+
* entry verbatim — there is no behavioural difference.
|
|
8
|
+
*/
|
|
9
|
+
export * from './index.js';
|
package/wasm/pkg/albex_pdf.wasm
CHANGED
|
Binary file
|
package/wasm/pkg/albex_wasm.wasm
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|