1
0
mirror of https://github.com/nextapps-de/flexsearch.git synced 2025-09-25 21:08:59 +02:00
Files
flexsearch/dist/module-debug/worker/handler.js
2025-03-22 15:42:12 +01:00

82 lines
2.5 KiB
JavaScript

import Index from "../index.js";
import { IndexOptions } from "../type.js";
/** @type Index */
let index, options;
/** @type {IndexOptions} */
export default (async function (data) {
data = data.data;
const task = data.task,
id = data.id;
let args = data.args;
switch (task) {
case "init":
options = data.options || {};
let filepath = options.config;
if (filepath) {
// compiler fix
options = options;
// will be replaced after build with the line below because
// there is an issue with closure compiler dynamic import
options=(await import(filepath))["default"];
}
const factory = data.factory;
if (factory) {
// export the FlexSearch global payload to "self"
Function("return " + factory)()(self);
index = new self.FlexSearch.Index(options);
// destroy the exported payload
delete self.FlexSearch;
} else {
index = new Index(options);
}
postMessage({ id: id });
break;
default:
let message;
if ("export" === task) {
if (!options.export || "function" != typeof options.export) {
throw new Error("Either no extern configuration provided for the Worker-Index or no method was defined on the config property \"export\".");
}
// skip non-field indexes
if (!args[1]) args = null;else {
args[0] = options.export;
args[2] = 0;
args[3] = 1; // skip reg
}
}
if ("import" === task) {
if (!options.import || "function" != typeof options.import) {
throw new Error("Either no extern configuration provided for the Worker-Index or no method was defined on the config property \"import\".");
}
if (args[0]) {
const data = await options.import.call(index, args[0]);
index.import(args[0], data);
}
} else {
message = args && index[task].apply(index, args);
if (message && message.then) {
message = await message;
}
}
postMessage("search" === task ? { id: id, msg: message } : { id: id });
}
});