@aiquants/select-box 0.1.1 → 0.2.1

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/dist/index.js CHANGED
@@ -1,268 +1,268 @@
1
- import * as J from "react";
2
- import he, { useState as M, useMemo as j, useRef as K, useEffect as S, useCallback as v } from "react";
3
- import { VirtualScroll as Ze } from "@aiquants/virtualscroll";
4
- var $ = { exports: {} }, B = {};
5
- var de;
1
+ import * as P from "react";
2
+ import ve, { useState as A, useMemo as H, useRef as N, useEffect as $, useCallback as D } from "react";
3
+ import { VirtualScroll as ke, tapScrollCircleSampleVisual as xe } from "@aiquants/virtualscroll";
4
+ var Z = { exports: {} }, V = {};
5
+ var oe;
6
6
  function be() {
7
- if (de) return B;
8
- de = 1;
9
- var e = /* @__PURE__ */ Symbol.for("react.transitional.element"), l = /* @__PURE__ */ Symbol.for("react.fragment");
10
- function t(a, r, d) {
7
+ if (oe) return V;
8
+ oe = 1;
9
+ var e = /* @__PURE__ */ Symbol.for("react.transitional.element"), t = /* @__PURE__ */ Symbol.for("react.fragment");
10
+ function r(s, a, o) {
11
11
  var n = null;
12
- if (d !== void 0 && (n = "" + d), r.key !== void 0 && (n = "" + r.key), "key" in r) {
13
- d = {};
14
- for (var c in r)
15
- c !== "key" && (d[c] = r[c]);
16
- } else d = r;
17
- return r = d.ref, {
12
+ if (o !== void 0 && (n = "" + o), a.key !== void 0 && (n = "" + a.key), "key" in a) {
13
+ o = {};
14
+ for (var l in a)
15
+ l !== "key" && (o[l] = a[l]);
16
+ } else o = a;
17
+ return a = o.ref, {
18
18
  $$typeof: e,
19
- type: a,
19
+ type: s,
20
20
  key: n,
21
- ref: r !== void 0 ? r : null,
22
- props: d
21
+ ref: a !== void 0 ? a : null,
22
+ props: o
23
23
  };
24
24
  }
25
- return B.Fragment = l, B.jsx = t, B.jsxs = t, B;
25
+ return V.Fragment = t, V.jsx = r, V.jsxs = r, V;
26
26
  }
27
- var O = {};
28
- var ce;
29
- function Ge() {
30
- return ce || (ce = 1, process.env.NODE_ENV !== "production" && (function() {
31
- function e(s) {
32
- if (s == null) return null;
33
- if (typeof s == "function")
34
- return s.$$typeof === se ? null : s.displayName || s.name || null;
35
- if (typeof s == "string") return s;
36
- switch (s) {
37
- case T:
27
+ var G = {};
28
+ var le;
29
+ function we() {
30
+ return le || (le = 1, process.env.NODE_ENV !== "production" && (function() {
31
+ function e(i) {
32
+ if (i == null) return null;
33
+ if (typeof i == "function")
34
+ return i.$$typeof === ie ? null : i.displayName || i.name || null;
35
+ if (typeof i == "string") return i;
36
+ switch (i) {
37
+ case y:
38
38
  return "Fragment";
39
- case u:
39
+ case c:
40
40
  return "Profiler";
41
- case y:
41
+ case v:
42
42
  return "StrictMode";
43
- case f:
43
+ case j:
44
44
  return "Suspense";
45
- case le:
45
+ case te:
46
46
  return "SuspenseList";
47
- case ae:
47
+ case se:
48
48
  return "Activity";
49
49
  }
50
- if (typeof s == "object")
51
- switch (typeof s.tag == "number" && console.error(
50
+ if (typeof i == "object")
51
+ switch (typeof i.tag == "number" && console.error(
52
52
  "Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."
53
- ), s.$$typeof) {
54
- case k:
53
+ ), i.$$typeof) {
54
+ case R:
55
55
  return "Portal";
56
- case H:
57
- return s.displayName || "Context";
58
- case p:
59
- return (s._context.displayName || "Context") + ".Consumer";
56
+ case C:
57
+ return i.displayName || "Context";
58
+ case b:
59
+ return (i._context.displayName || "Context") + ".Consumer";
60
+ case z:
61
+ var f = i.render;
62
+ return i = i.displayName, i || (i = f.displayName || f.name || "", i = i !== "" ? "ForwardRef(" + i + ")" : "ForwardRef"), i;
63
+ case re:
64
+ return f = i.displayName || null, f !== null ? f : e(i.type) || "Memo";
60
65
  case U:
61
- var h = s.render;
62
- return s = s.displayName, s || (s = h.displayName || h.name || "", s = s !== "" ? "ForwardRef(" + s + ")" : "ForwardRef"), s;
63
- case te:
64
- return h = s.displayName || null, h !== null ? h : e(s.type) || "Memo";
65
- case E:
66
- h = s._payload, s = s._init;
66
+ f = i._payload, i = i._init;
67
67
  try {
68
- return e(s(h));
68
+ return e(i(f));
69
69
  } catch {
70
70
  }
71
71
  }
72
72
  return null;
73
73
  }
74
- function l(s) {
75
- return "" + s;
74
+ function t(i) {
75
+ return "" + i;
76
76
  }
77
- function t(s) {
77
+ function r(i) {
78
78
  try {
79
- l(s);
80
- var h = !1;
79
+ t(i);
80
+ var f = !1;
81
81
  } catch {
82
- h = !0;
82
+ f = !0;
83
83
  }
84
- if (h) {
85
- h = console;
86
- var V = h.error, Y = typeof Symbol == "function" && Symbol.toStringTag && s[Symbol.toStringTag] || s.constructor.name || "Object";
87
- return V.call(
88
- h,
84
+ if (f) {
85
+ f = console;
86
+ var S = f.error, L = typeof Symbol == "function" && Symbol.toStringTag && i[Symbol.toStringTag] || i.constructor.name || "Object";
87
+ return S.call(
88
+ f,
89
89
  "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",
90
- Y
91
- ), l(s);
90
+ L
91
+ ), t(i);
92
92
  }
93
93
  }
94
- function a(s) {
95
- if (s === T) return "<>";
96
- if (typeof s == "object" && s !== null && s.$$typeof === E)
94
+ function s(i) {
95
+ if (i === y) return "<>";
96
+ if (typeof i == "object" && i !== null && i.$$typeof === U)
97
97
  return "<...>";
98
98
  try {
99
- var h = e(s);
100
- return h ? "<" + h + ">" : "<...>";
99
+ var f = e(i);
100
+ return f ? "<" + f + ">" : "<...>";
101
101
  } catch {
102
102
  return "<...>";
103
103
  }
104
104
  }
105
- function r() {
106
- var s = P.A;
107
- return s === null ? null : s.getOwner();
105
+ function a() {
106
+ var i = Y.A;
107
+ return i === null ? null : i.getOwner();
108
108
  }
109
- function d() {
109
+ function o() {
110
110
  return Error("react-stack-top-frame");
111
111
  }
112
- function n(s) {
113
- if (i.call(s, "key")) {
114
- var h = Object.getOwnPropertyDescriptor(s, "key").get;
115
- if (h && h.isReactWarning) return !1;
112
+ function n(i) {
113
+ if (u.call(i, "key")) {
114
+ var f = Object.getOwnPropertyDescriptor(i, "key").get;
115
+ if (f && f.isReactWarning) return !1;
116
116
  }
117
- return s.key !== void 0;
117
+ return i.key !== void 0;
118
118
  }
119
- function c(s, h) {
120
- function V() {
121
- F || (F = !0, console.error(
119
+ function l(i, f) {
120
+ function S() {
121
+ T || (T = !0, console.error(
122
122
  "%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",
123
- h
123
+ f
124
124
  ));
125
125
  }
126
- V.isReactWarning = !0, Object.defineProperty(s, "key", {
127
- get: V,
126
+ S.isReactWarning = !0, Object.defineProperty(i, "key", {
127
+ get: S,
128
128
  configurable: !0
129
129
  });
130
130
  }
131
- function b() {
132
- var s = e(this.type);
133
- return x[s] || (x[s] = !0, console.error(
131
+ function d() {
132
+ var i = e(this.type);
133
+ return W[i] || (W[i] = !0, console.error(
134
134
  "Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."
135
- )), s = this.props.ref, s !== void 0 ? s : null;
135
+ )), i = this.props.ref, i !== void 0 ? i : null;
136
136
  }
137
- function X(s, h, V, Y, A, re) {
138
- var z = V.ref;
139
- return s = {
140
- $$typeof: N,
141
- type: s,
142
- key: h,
143
- props: V,
144
- _owner: Y
145
- }, (z !== void 0 ? z : null) !== null ? Object.defineProperty(s, "ref", {
137
+ function p(i, f, S, L, X, ne) {
138
+ var F = S.ref;
139
+ return i = {
140
+ $$typeof: E,
141
+ type: i,
142
+ key: f,
143
+ props: S,
144
+ _owner: L
145
+ }, (F !== void 0 ? F : null) !== null ? Object.defineProperty(i, "ref", {
146
146
  enumerable: !1,
147
- get: b
148
- }) : Object.defineProperty(s, "ref", { enumerable: !1, value: null }), s._store = {}, Object.defineProperty(s._store, "validated", {
147
+ get: d
148
+ }) : Object.defineProperty(i, "ref", { enumerable: !1, value: null }), i._store = {}, Object.defineProperty(i._store, "validated", {
149
149
  configurable: !1,
150
150
  enumerable: !1,
151
151
  writable: !0,
152
152
  value: 0
153
- }), Object.defineProperty(s, "_debugInfo", {
153
+ }), Object.defineProperty(i, "_debugInfo", {
154
154
  configurable: !1,
155
155
  enumerable: !1,
156
156
  writable: !0,
157
157
  value: null
158
- }), Object.defineProperty(s, "_debugStack", {
158
+ }), Object.defineProperty(i, "_debugStack", {
159
159
  configurable: !1,
160
160
  enumerable: !1,
161
161
  writable: !0,
162
- value: A
163
- }), Object.defineProperty(s, "_debugTask", {
162
+ value: X
163
+ }), Object.defineProperty(i, "_debugTask", {
164
164
  configurable: !1,
165
165
  enumerable: !1,
166
166
  writable: !0,
167
- value: re
168
- }), Object.freeze && (Object.freeze(s.props), Object.freeze(s)), s;
167
+ value: ne
168
+ }), Object.freeze && (Object.freeze(i.props), Object.freeze(i)), i;
169
169
  }
170
- function m(s, h, V, Y, A, re) {
171
- var z = h.children;
172
- if (z !== void 0)
173
- if (Y)
174
- if (R(z)) {
175
- for (Y = 0; Y < z.length; Y++)
176
- G(z[Y]);
177
- Object.freeze && Object.freeze(z);
170
+ function g(i, f, S, L, X, ne) {
171
+ var F = f.children;
172
+ if (F !== void 0)
173
+ if (L)
174
+ if (w(F)) {
175
+ for (L = 0; L < F.length; L++)
176
+ x(F[L]);
177
+ Object.freeze && Object.freeze(F);
178
178
  } else
179
179
  console.error(
180
180
  "React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead."
181
181
  );
182
- else G(z);
183
- if (i.call(h, "key")) {
184
- z = e(s);
185
- var I = Object.keys(h).filter(function(ue) {
186
- return ue !== "key";
182
+ else x(F);
183
+ if (u.call(f, "key")) {
184
+ F = e(i);
185
+ var B = Object.keys(f).filter(function(pe) {
186
+ return pe !== "key";
187
187
  });
188
- Y = 0 < I.length ? "{key: someKey, " + I.join(": ..., ") + ": ...}" : "{key: someKey}", D[z + Y] || (I = 0 < I.length ? "{" + I.join(": ..., ") + ": ...}" : "{}", console.error(
188
+ L = 0 < B.length ? "{key: someKey, " + B.join(": ..., ") + ": ...}" : "{key: someKey}", Q[F + L] || (B = 0 < B.length ? "{" + B.join(": ..., ") + ": ...}" : "{}", console.error(
189
189
  `A props object containing a "key" prop is being spread into JSX:
190
190
  let props = %s;
191
191
  <%s {...props} />
192
192
  React keys must be passed directly to JSX without using spread:
193
193
  let props = %s;
194
194
  <%s key={someKey} {...props} />`,
195
- Y,
196
- z,
197
- I,
198
- z
199
- ), D[z + Y] = !0);
195
+ L,
196
+ F,
197
+ B,
198
+ F
199
+ ), Q[F + L] = !0);
200
200
  }
201
- if (z = null, V !== void 0 && (t(V), z = "" + V), n(h) && (t(h.key), z = "" + h.key), "key" in h) {
202
- V = {};
203
- for (var ne in h)
204
- ne !== "key" && (V[ne] = h[ne]);
205
- } else V = h;
206
- return z && c(
207
- V,
208
- typeof s == "function" ? s.displayName || s.name || "Unknown" : s
209
- ), X(
210
- s,
211
- z,
212
- V,
213
- r(),
214
- A,
215
- re
201
+ if (F = null, S !== void 0 && (r(S), F = "" + S), n(f) && (r(f.key), F = "" + f.key), "key" in f) {
202
+ S = {};
203
+ for (var ae in f)
204
+ ae !== "key" && (S[ae] = f[ae]);
205
+ } else S = f;
206
+ return F && l(
207
+ S,
208
+ typeof i == "function" ? i.displayName || i.name || "Unknown" : i
209
+ ), p(
210
+ i,
211
+ F,
212
+ S,
213
+ a(),
214
+ X,
215
+ ne
216
216
  );
217
217
  }
218
- function G(s) {
219
- o(s) ? s._store && (s._store.validated = 1) : typeof s == "object" && s !== null && s.$$typeof === E && (s._payload.status === "fulfilled" ? o(s._payload.value) && s._payload.value._store && (s._payload.value._store.validated = 1) : s._store && (s._store.validated = 1));
218
+ function x(i) {
219
+ m(i) ? i._store && (i._store.validated = 1) : typeof i == "object" && i !== null && i.$$typeof === U && (i._payload.status === "fulfilled" ? m(i._payload.value) && i._payload.value._store && (i._payload.value._store.validated = 1) : i._store && (i._store.validated = 1));
220
220
  }
221
- function o(s) {
222
- return typeof s == "object" && s !== null && s.$$typeof === N;
221
+ function m(i) {
222
+ return typeof i == "object" && i !== null && i.$$typeof === E;
223
223
  }
224
- var Z = he, N = /* @__PURE__ */ Symbol.for("react.transitional.element"), k = /* @__PURE__ */ Symbol.for("react.portal"), T = /* @__PURE__ */ Symbol.for("react.fragment"), y = /* @__PURE__ */ Symbol.for("react.strict_mode"), u = /* @__PURE__ */ Symbol.for("react.profiler"), p = /* @__PURE__ */ Symbol.for("react.consumer"), H = /* @__PURE__ */ Symbol.for("react.context"), U = /* @__PURE__ */ Symbol.for("react.forward_ref"), f = /* @__PURE__ */ Symbol.for("react.suspense"), le = /* @__PURE__ */ Symbol.for("react.suspense_list"), te = /* @__PURE__ */ Symbol.for("react.memo"), E = /* @__PURE__ */ Symbol.for("react.lazy"), ae = /* @__PURE__ */ Symbol.for("react.activity"), se = /* @__PURE__ */ Symbol.for("react.client.reference"), P = Z.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, i = Object.prototype.hasOwnProperty, R = Array.isArray, g = console.createTask ? console.createTask : function() {
224
+ var h = ve, E = /* @__PURE__ */ Symbol.for("react.transitional.element"), R = /* @__PURE__ */ Symbol.for("react.portal"), y = /* @__PURE__ */ Symbol.for("react.fragment"), v = /* @__PURE__ */ Symbol.for("react.strict_mode"), c = /* @__PURE__ */ Symbol.for("react.profiler"), b = /* @__PURE__ */ Symbol.for("react.consumer"), C = /* @__PURE__ */ Symbol.for("react.context"), z = /* @__PURE__ */ Symbol.for("react.forward_ref"), j = /* @__PURE__ */ Symbol.for("react.suspense"), te = /* @__PURE__ */ Symbol.for("react.suspense_list"), re = /* @__PURE__ */ Symbol.for("react.memo"), U = /* @__PURE__ */ Symbol.for("react.lazy"), se = /* @__PURE__ */ Symbol.for("react.activity"), ie = /* @__PURE__ */ Symbol.for("react.client.reference"), Y = h.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, u = Object.prototype.hasOwnProperty, w = Array.isArray, I = console.createTask ? console.createTask : function() {
225
225
  return null;
226
226
  };
227
- Z = {
228
- react_stack_bottom_frame: function(s) {
229
- return s();
227
+ h = {
228
+ react_stack_bottom_frame: function(i) {
229
+ return i();
230
230
  }
231
231
  };
232
- var F, x = {}, L = Z.react_stack_bottom_frame.bind(
233
- Z,
234
- d
235
- )(), w = g(a(d)), D = {};
236
- O.Fragment = T, O.jsx = function(s, h, V) {
237
- var Y = 1e4 > P.recentlyCreatedOwnerStacks++;
238
- return m(
239
- s,
240
- h,
241
- V,
232
+ var T, W = {}, O = h.react_stack_bottom_frame.bind(
233
+ h,
234
+ o
235
+ )(), J = I(s(o)), Q = {};
236
+ G.Fragment = y, G.jsx = function(i, f, S) {
237
+ var L = 1e4 > Y.recentlyCreatedOwnerStacks++;
238
+ return g(
239
+ i,
240
+ f,
241
+ S,
242
242
  !1,
243
- Y ? Error("react-stack-top-frame") : L,
244
- Y ? g(a(s)) : w
243
+ L ? Error("react-stack-top-frame") : O,
244
+ L ? I(s(i)) : J
245
245
  );
246
- }, O.jsxs = function(s, h, V) {
247
- var Y = 1e4 > P.recentlyCreatedOwnerStacks++;
248
- return m(
249
- s,
250
- h,
251
- V,
246
+ }, G.jsxs = function(i, f, S) {
247
+ var L = 1e4 > Y.recentlyCreatedOwnerStacks++;
248
+ return g(
249
+ i,
250
+ f,
251
+ S,
252
252
  !0,
253
- Y ? Error("react-stack-top-frame") : L,
254
- Y ? g(a(s)) : w
253
+ L ? Error("react-stack-top-frame") : O,
254
+ L ? I(s(i)) : J
255
255
  );
256
256
  };
257
- })()), O;
257
+ })()), G;
258
258
  }
259
- var ie;
260
- function Xe() {
261
- return ie || (ie = 1, process.env.NODE_ENV === "production" ? $.exports = be() : $.exports = Ge()), $.exports;
259
+ var ue;
260
+ function ye() {
261
+ return ue || (ue = 1, process.env.NODE_ENV === "production" ? Z.exports = be() : Z.exports = we()), Z.exports;
262
262
  }
263
- var W = Xe(), ee = class {
264
- constructor(e = 2, l = "[fuzzy-search]", t = console) {
265
- this.level = e, this.prefix = l, this.impl = t;
263
+ var k = ye(), ee = class {
264
+ constructor(e = 2, t = "[fuzzy-search]", r = console) {
265
+ this.level = e, this.prefix = t, this.impl = r;
266
266
  }
267
267
  setLevel(e) {
268
268
  this.level = e;
@@ -276,111 +276,139 @@ var W = Xe(), ee = class {
276
276
  formatMessage(e) {
277
277
  return typeof e == "string" ? [`${this.prefix} ${e}`] : [this.prefix, e];
278
278
  }
279
- debug(e, ...l) {
280
- this.level <= 0 && this.impl.debug(...this.formatMessage(e), ...l);
281
- }
282
- info(e, ...l) {
283
- this.level <= 1 && this.impl.info(...this.formatMessage(e), ...l);
279
+ debug(e, ...t) {
280
+ this.level <= 0 && this.impl.debug(...this.formatMessage(e), ...t);
284
281
  }
285
- warn(e, ...l) {
286
- this.level <= 2 && this.impl.warn(...this.formatMessage(e), ...l);
282
+ info(e, ...t) {
283
+ this.level <= 1 && this.impl.info(...this.formatMessage(e), ...t);
287
284
  }
288
- error(e, ...l) {
289
- this.level <= 3 && this.impl.error(...this.formatMessage(e), ...l);
285
+ warn(e, ...t) {
286
+ this.level <= 2 && this.impl.warn(...this.formatMessage(e), ...t);
290
287
  }
291
- }, _ = { threshold: 0.4, caseSensitive: !1, learningWeight: 1.2, debounceMs: 300, multiTermOperator: "and", autoSearchOnIndexRebuild: !0, customWeights: {}, ngramSize: 2, minNgramOverlap: 1, sortBy: "relevance", sortOrder: "desc", enableIndexFiltering: !0, enableLevenshtein: !0, parallelSearchStrategy: "balanced", logLevel: 2, indexWorkerOptions: { strategy: "hybrid", threshold: 0.4, ngramOverlapThreshold: 0.3, minCandidatesRatio: 0.1, maxCandidatesRatio: 0.5, jaroWinklerPrefix: 0.1, maxResults: 1e3, relevanceFieldWeight: 0.2, relevancePerfectMatchBonus: 0.1 }, levenshteinWorkerOptions: { threshold: 0.3, lengthSimilarityThreshold: 0.1, partialMatchBonus: 0.1, lengthDiffPenalty: 1, maxResults: 1e3, relevanceFieldWeight: 0.15 } }, me = class q {
292
- constructor(l) {
293
- this.indexWorker = null, this.levenshteinWorker = null, this.initializationPromise = null, this.referenceCount = 0, this.lastIndexedDataHash = null, this.buildingDataHash = null, this.buildingPromise = null, this.id = l;
294
- let t = l !== "default" ? `[GlobalWorkerManager:${l}]` : "[GlobalWorkerManager]";
295
- this.logger = new ee(2, t);
288
+ error(e, ...t) {
289
+ this.level <= 3 && this.impl.error(...this.formatMessage(e), ...t);
296
290
  }
297
- static getInstance(l = "default") {
298
- let t = q.instances.get(l);
299
- return t || (t = new q(l), q.instances.set(l, t)), t;
291
+ }, _ = { threshold: 0.4, caseSensitive: !1, learningWeight: 1.2, debounceMs: 300, multiTermOperator: "or", autoSearchOnIndexRebuild: !0, customWeights: {}, ngramSize: 2, minNgramOverlap: 1, sortBy: "relevance", sortOrder: "desc", enableIndexFiltering: !0, enableLevenshtein: !0, parallelSearchStrategy: "balanced", logLevel: 2, indexWorkerOptions: { strategy: "hybrid", threshold: 0.4, ngramOverlapThreshold: 0.3, minCandidatesRatio: 0.1, maxCandidatesRatio: 0.5, jaroWinklerPrefix: 0.1, maxResults: 1e3, relevanceFieldWeight: 0.2, relevancePerfectMatchBonus: 0.1 }, levenshteinWorkerOptions: { threshold: 0.3, lengthSimilarityThreshold: 0.1, partialMatchBonus: 0.1, lengthDiffPenalty: 1, maxResults: 1e3, relevanceFieldWeight: 0.15 } }, he = "INDEX_DATA_MISMATCH", Ee = "LEVENSHTEIN_DATA_MISMATCH", de = /* @__PURE__ */ new WeakMap(), Se = 0, We = (e) => {
292
+ let t = de.get(e);
293
+ if (t) return t;
294
+ let r;
295
+ try {
296
+ let s = JSON.stringify(e), a = 2166136261, o = -624069552;
297
+ for (let n = 0; n < s.length; n++) {
298
+ let l = s.charCodeAt(n);
299
+ a = Math.imul(a ^ l, 16777619) >>> 0, o = Math.imul(o ^ l, 16777619) >>> 0;
300
+ }
301
+ r = `${a.toString(36)}-${o.toString(36)}`;
302
+ } catch {
303
+ r = `ref-${++Se}`;
304
+ }
305
+ return de.set(e, r), r;
306
+ }, ce = (e, t) => {
307
+ if (!e) return null;
308
+ let r = e.includes(".ts") ? `../worker/${t}.ts` : `./worker/${t}.mjs`;
309
+ return new URL(r, e);
310
+ }, fe = class K {
311
+ constructor(t) {
312
+ this.indexWorker = null, this.levenshteinWorker = null, this.initializationPromise = null, this.referenceCount = 0, this.lastIndexedDataHash = null, this.buildingDataHash = null, this.buildingPromise = null, this.lastLevenshteinDataHash = null, this.id = t;
313
+ let r = t !== "default" ? `[GlobalWorkerManager:${t}]` : "[GlobalWorkerManager]";
314
+ this.logger = new ee(2, r);
315
+ }
316
+ static getInstance(t = "default") {
317
+ let r = K.instances.get(t);
318
+ return r || (r = new K(t), K.instances.set(t, r)), r;
300
319
  }
301
320
  getLastIndexedDataHash() {
302
321
  return this.lastIndexedDataHash;
303
322
  }
304
- setLastIndexedDataHash(l) {
305
- this.lastIndexedDataHash = l;
323
+ getLastLevenshteinDataHash() {
324
+ return this.lastLevenshteinDataHash;
306
325
  }
307
- getBuildingPromise(l) {
308
- return this.buildingDataHash === l ? this.buildingPromise : null;
326
+ setLastLevenshteinDataHash(t) {
327
+ this.lastLevenshteinDataHash = t;
309
328
  }
310
- setBuildingPromise(l, t) {
311
- this.buildingDataHash = l, this.buildingPromise = t, t.finally(() => {
312
- this.buildingDataHash === l && (this.buildingDataHash = null, this.buildingPromise = null);
329
+ setLastIndexedDataHash(t) {
330
+ this.lastIndexedDataHash = t;
331
+ }
332
+ getBuildingPromise(t) {
333
+ return this.buildingDataHash === t ? this.buildingPromise : null;
334
+ }
335
+ setBuildingPromise(t, r) {
336
+ this.buildingDataHash = t, this.buildingPromise = r, r.finally(() => {
337
+ this.buildingDataHash === t && (this.buildingDataHash = null, this.buildingPromise = null);
338
+ }).catch(() => {
313
339
  });
314
340
  }
315
- async getWorkers(l) {
316
- return l.logLevel !== void 0 && this.logger.setLevel(l.logLevel), l.logger && this.logger.setImplementation(l.logger), this.referenceCount++, this.indexWorker && this.levenshteinWorker ? (this.logger.debug(`🔧 Using existing global Workers (ref count: ${this.referenceCount})`), l.logLevel !== void 0 && (this.indexWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: l.logLevel, workerId: this.id }), this.levenshteinWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: l.logLevel, workerId: this.id })), { indexWorker: this.indexWorker, levenshteinWorker: this.levenshteinWorker }) : (this.initializationPromise || (this.initializationPromise = this.initializeWorkers(l)), await this.initializationPromise, this.indexWorker && this.levenshteinWorker && l.logLevel !== void 0 && (this.indexWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: l.logLevel, workerId: this.id }), this.levenshteinWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: l.logLevel, workerId: this.id })), { indexWorker: this.indexWorker, levenshteinWorker: this.levenshteinWorker });
341
+ async getWorkers(t) {
342
+ return t.logLevel !== void 0 && this.logger.setLevel(t.logLevel), t.logger && this.logger.setImplementation(t.logger), this.referenceCount++, this.indexWorker && this.levenshteinWorker ? (this.logger.debug(`🔧 Using existing global Workers (ref count: ${this.referenceCount})`), t.logLevel !== void 0 && (this.indexWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: t.logLevel, workerId: this.id }), this.levenshteinWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: t.logLevel, workerId: this.id })), { indexWorker: this.indexWorker, levenshteinWorker: this.levenshteinWorker }) : (this.initializationPromise || (this.initializationPromise = this.initializeWorkers(t)), await this.initializationPromise, this.indexWorker && this.levenshteinWorker || (this.initializationPromise = null), this.indexWorker && this.levenshteinWorker && t.logLevel !== void 0 && (this.indexWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: t.logLevel, workerId: this.id }), this.levenshteinWorker.postMessage({ type: "setLogLevel", id: "system", logLevel: t.logLevel, workerId: this.id })), { indexWorker: this.indexWorker, levenshteinWorker: this.levenshteinWorker });
317
343
  }
318
- async initializeWorkers(l) {
319
- if (!(typeof Worker > "u")) try {
344
+ async initializeWorkers(t) {
345
+ if (typeof Worker > "u") return;
346
+ let r = import.meta.url;
347
+ try {
320
348
  if (!this.indexWorker) {
321
- let t = import.meta.url.includes(".ts") ? new URL("../worker/indexWorker.ts", import.meta.url) : new URL("data:text/javascript;base64,dmFyIEM9Y2xhc3N7Y29uc3RydWN0b3Iocz0yLHQ9IltmdXp6eS1zZWFyY2hdIixlPWNvbnNvbGUpe3RoaXMubGV2ZWw9cyx0aGlzLnByZWZpeD10LHRoaXMuaW1wbD1lfXNldExldmVsKHMpe3RoaXMubGV2ZWw9c31zZXRJbXBsZW1lbnRhdGlvbihzKXt0aGlzLmltcGw9c31zZXRQcmVmaXgocyl7dGhpcy5wcmVmaXg9c31mb3JtYXRNZXNzYWdlKHMpe3JldHVybiB0eXBlb2Ygcz09InN0cmluZyI/W2Ake3RoaXMucHJlZml4fSAke3N9YF06W3RoaXMucHJlZml4LHNdfWRlYnVnKHMsLi4udCl7dGhpcy5sZXZlbDw9MCYmdGhpcy5pbXBsLmRlYnVnKC4uLnRoaXMuZm9ybWF0TWVzc2FnZShzKSwuLi50KX1pbmZvKHMsLi4udCl7dGhpcy5sZXZlbDw9MSYmdGhpcy5pbXBsLmluZm8oLi4udGhpcy5mb3JtYXRNZXNzYWdlKHMpLC4uLnQpfXdhcm4ocywuLi50KXt0aGlzLmxldmVsPD0yJiZ0aGlzLmltcGwud2FybiguLi50aGlzLmZvcm1hdE1lc3NhZ2UocyksLi4udCl9ZXJyb3IocywuLi50KXt0aGlzLmxldmVsPD0zJiZ0aGlzLmltcGwuZXJyb3IoLi4udGhpcy5mb3JtYXRNZXNzYWdlKHMpLC4uLnQpfX07dmFyIHU9e3RocmVzaG9sZDouNCxjYXNlU2Vuc2l0aXZlOiExLGxlYXJuaW5nV2VpZ2h0OjEuMixkZWJvdW5jZU1zOjMwMCxtdWx0aVRlcm1PcGVyYXRvcjoiYW5kIixhdXRvU2VhcmNoT25JbmRleFJlYnVpbGQ6ITAsY3VzdG9tV2VpZ2h0czp7fSxuZ3JhbVNpemU6MixtaW5OZ3JhbU92ZXJsYXA6MSxzb3J0Qnk6InJlbGV2YW5jZSIsc29ydE9yZGVyOiJkZXNjIixlbmFibGVJbmRleEZpbHRlcmluZzohMCxlbmFibGVMZXZlbnNodGVpbjohMCxwYXJhbGxlbFNlYXJjaFN0cmF0ZWd5OiJiYWxhbmNlZCIsbG9nTGV2ZWw6MixpbmRleFdvcmtlck9wdGlvbnM6e3N0cmF0ZWd5OiJoeWJyaWQiLHRocmVzaG9sZDouNCxuZ3JhbU92ZXJsYXBUaHJlc2hvbGQ6LjMsbWluQ2FuZGlkYXRlc1JhdGlvOi4xLG1heENhbmRpZGF0ZXNSYXRpbzouNSxqYXJvV2lua2xlclByZWZpeDouMSxtYXhSZXN1bHRzOjFlMyxyZWxldmFuY2VGaWVsZFdlaWdodDouMixyZWxldmFuY2VQZXJmZWN0TWF0Y2hCb251czouMX0sbGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zOnt0aHJlc2hvbGQ6LjMsbGVuZ3RoU2ltaWxhcml0eVRocmVzaG9sZDouMSxwYXJ0aWFsTWF0Y2hCb251czouMSxsZW5ndGhEaWZmUGVuYWx0eToxLG1heFJlc3VsdHM6MWUzLHJlbGV2YW5jZUZpZWxkV2VpZ2h0Oi4xNX19O3ZhciB6PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0cz17dG90YWxTZWFyY2hlczowLHRvdGFsUHJvY2Vzc2luZ1RpbWU6MCxhdmVyYWdlU2VhcmNoVGltZTowLGxhc3RTZWFyY2hUaW1lOjAsZXJyb3JDb3VudDowLHRpbWVzdGFtcDpEYXRlLm5vdygpfTt0aGlzLmJhc2VMb2dQcmVmaXg9IltmdXp6eS1zZWFyY2gtd29ya2VyXSI7dGhpcy5sb2dnZXI9bmV3IEMoMix0aGlzLmJhc2VMb2dQcmVmaXgpO3RoaXMuZGV0YWlsZWRTdGF0cz1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5PVtdO3RoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uPW5ldyBNYXA7dGhpcy5maWVsZFN0YXRzPW5ldyBNYXA7dGhpcy5tZXRyaWNzPXt0aW1pbmdzOnthdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxmYXN0ZXN0UHJvY2Vzc2luZzoxLzAsc2xvd2VzdFByb2Nlc3Npbmc6MCxsYXN0UHJvY2Vzc2luZ1RpbWU6MH0sdGhyb3VnaHB1dDp7b3BlcmF0aW9uc1BlclNlY29uZDowLHRvdGFsT3BlcmF0aW9uczowfSxxdWFsaXR5OntzdWNjZXNzUmF0ZToxLGVycm9yUmF0ZTowLHRpbWVvdXRSYXRlOjB9fX1zZXRMb2dMZXZlbChzKXt0aGlzLmxvZ2dlci5zZXRMZXZlbChzKX1zZXRXb3JrZXJJZChzKXtsZXQgdD1zP2Ake3RoaXMuYmFzZUxvZ1ByZWZpeC5zbGljZSgwLC0xKX06JHtzfV1gOnRoaXMuYmFzZUxvZ1ByZWZpeDt0aGlzLmxvZ2dlci5zZXRQcmVmaXgodCl9dXBkYXRlU3RhdHMocyx0PSEwKXt0aGlzLnN0YXRzLnRvdGFsU2VhcmNoZXMrKyx0aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUrPXMsdGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZT10aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUvdGhpcy5zdGF0cy50b3RhbFNlYXJjaGVzLHRoaXMuc3RhdHMubGFzdFNlYXJjaFRpbWU9cyx0aGlzLm1ldHJpY3MudGltaW5ncy5sYXN0UHJvY2Vzc2luZ1RpbWU9cyx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU9dGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZSx0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZz1NYXRoLm1pbih0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZyxzKSx0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZz1NYXRoLm1heCh0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZyxzKSx0aGlzLm1ldHJpY3MudGhyb3VnaHB1dC50b3RhbE9wZXJhdGlvbnMrKyx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU+MCYmKHRoaXMubWV0cmljcy50aHJvdWdocHV0Lm9wZXJhdGlvbnNQZXJTZWNvbmQ9MWUzL3RoaXMubWV0cmljcy50aW1pbmdzLmF2ZXJhZ2VQcm9jZXNzaW5nVGltZSksdHx8dGhpcy5zdGF0cy5lcnJvckNvdW50Kys7bGV0IGU9dGhpcy5tZXRyaWNzLnRocm91Z2hwdXQudG90YWxPcGVyYXRpb25zO3RoaXMubWV0cmljcy5xdWFsaXR5LnN1Y2Nlc3NSYXRlPShlLXRoaXMuc3RhdHMuZXJyb3JDb3VudCkvZSx0aGlzLm1ldHJpY3MucXVhbGl0eS5lcnJvclJhdGU9dGhpcy5zdGF0cy5lcnJvckNvdW50L2V9Z2V0U3RhdHMoKXtyZXR1cm57Li4udGhpcy5zdGF0c319Z2V0TWV0cmljcygpe3JldHVybnsuLi50aGlzLm1ldHJpY3N9fXJlc2V0U3RhdHMoKXt0aGlzLnN0YXRzPXt0b3RhbFNlYXJjaGVzOjAsdG90YWxQcm9jZXNzaW5nVGltZTowLGF2ZXJhZ2VTZWFyY2hUaW1lOjAsbGFzdFNlYXJjaFRpbWU6MCxlcnJvckNvdW50OjAsdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubWV0cmljcz17dGltaW5nczp7YXZlcmFnZVByb2Nlc3NpbmdUaW1lOjAsZmFzdGVzdFByb2Nlc3Npbmc6MS8wLHNsb3dlc3RQcm9jZXNzaW5nOjAsbGFzdFByb2Nlc3NpbmdUaW1lOjB9LHRocm91Z2hwdXQ6e29wZXJhdGlvbnNQZXJTZWNvbmQ6MCx0b3RhbE9wZXJhdGlvbnM6MH0scXVhbGl0eTp7c3VjY2Vzc1JhdGU6MSxlcnJvclJhdGU6MCx0aW1lb3V0UmF0ZTowfX0sdGhpcy5kZXRhaWxlZFN0YXRzLmNsZWFyKCksdGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9W10sdGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24uY2xlYXIoKSx0aGlzLmZpZWxkU3RhdHMuY2xlYXIoKSx0aGlzLmxvZ2dlci5pbmZvKGBcdXsxRjRDQX0gJHt0aGlzLmdldFdvcmtlclR5cGUoKX0gV29ya2VyOiBTdGF0aXN0aWNzIHJlc2V0IGNvbXBsZXRlZGApfXVwZGF0ZVdvcmtlclN0YXRzKHMsdCxlPXt9KXt0aGlzLnVwZGF0ZVN0YXRzKHQsITApO2xldCByPXRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLmdldChzKXx8MDt0aGlzLm9wZXJhdGlvbkRpc3RyaWJ1dGlvbi5zZXQocyxyKzEpLE9iamVjdC5lbnRyaWVzKGUpLmZvckVhY2goKFtpLG5dKT0+e3RoaXMuZGV0YWlsZWRTdGF0cy5zZXQoaSxuKX0pLHRoaXMuYWRkUGVyZm9ybWFuY2VFbnRyeSh7dGltZXN0YW1wOkRhdGUubm93KCksb3BlcmF0aW9uVHlwZTpzLHByb2Nlc3NpbmdUaW1lOnQscXVlcnlMZW5ndGg6ZS5xdWVyeUxlbmd0aHx8MCxpdGVtQ291bnQ6ZS5pdGVtQ291bnR8fDAscmVzdWx0Q291bnQ6ZS5yZXN1bHRDb3VudHx8MCxhZGRpdGlvbmFsTWV0cmljczplfSl9dXBkYXRlRmllbGRTdGF0cyhzLHQpe2xldCBlPXRoaXMuZmllbGRTdGF0cy5nZXQocyl8fHttYXRjaENvdW50OjAsYXZlcmFnZVNjb3JlOjAsdG90YWxTY29yZTowLGJlc3RTY29yZTowLHdvcnN0U2NvcmU6MX07ZS5tYXRjaENvdW50Kz0xLGUudG90YWxTY29yZSs9dCxlLmF2ZXJhZ2VTY29yZT1lLnRvdGFsU2NvcmUvZS5tYXRjaENvdW50LGUuYmVzdFNjb3JlPU1hdGgubWF4KGUuYmVzdFNjb3JlLHQpLGUud29yc3RTY29yZT1NYXRoLm1pbihlLndvcnN0U2NvcmUsdCksdGhpcy5maWVsZFN0YXRzLnNldChzLGUpfWFkZFBlcmZvcm1hbmNlRW50cnkocyl7dGhpcy5wZXJmb3JtYW5jZUhpc3RvcnkucHVzaChzKSx0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg+MTAwJiYodGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9dGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnkuc2xpY2UoLTEwMCkpfWdldFdvcmtlclN0YXRzKCl7cmV0dXJue2Jhc2ljOnsuLi50aGlzLnN0YXRzLHRpbWVzdGFtcDpEYXRlLm5vdygpfSx3b3JrZXJTcGVjaWZpYzp7d29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25Db3VudDp0aGlzLmdldFRvdGFsT3BlcmF0aW9ucygpLG9wZXJhdGlvbkRpc3RyaWJ1dGlvbjpPYmplY3QuZnJvbUVudHJpZXModGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24pLHNwZWNpZmljTWV0cmljczp0aGlzLmdldFNwZWNpZmljTWV0cmljcygpfSxhbmFseXNpczp7ZmllbGRQZXJmb3JtYW5jZTpPYmplY3QuZnJvbUVudHJpZXModGhpcy5maWVsZFN0YXRzKSxwZXJmb3JtYW5jZUluc2lnaHRzOnRoaXMuZ2VuZXJhdGVQZXJmb3JtYW5jZUluc2lnaHRzKCkscmVjZW50SGlzdG9yeTp0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApfX19c2VuZFN0YXRzVXBkYXRlKCl7bGV0IHM9e3R5cGU6InN0YXRzIixpZDpgc3RhdHMtJHtEYXRlLm5vdygpfWAsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6MCx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e319O3RoaXMubG9nZ2VyLmluZm8oYFx1ezFGNENBfSAke3RoaXMuZ2V0V29ya2VyVHlwZSgpfSBXb3JrZXI6IFNlbmRpbmcgdW5pZmllZCBzdGF0cyB1cGRhdGVgKSxzZWxmLnBvc3RNZXNzYWdlKHMpfWdldFRvdGFsT3BlcmF0aW9ucygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLnZhbHVlcygpKS5yZWR1Y2UoKHMsdCk9PnMrdCwwKX1nZW5lcmF0ZVBlcmZvcm1hbmNlSW5zaWdodHMoKXtpZih0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg9PT0wKXJldHVybntyZWNlbnRBdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxyZWNlbnRBdmVyYWdlUmVzdWx0Q291bnQ6MCx0aHJvdWdocHV0UGVyU2Vjb25kOjAsdG90YWxIaXN0b3J5RW50cmllczowLG1vc3RDb21tb25RdWVyeUxlbmd0aDowLGJlc3RQZXJmb3JtaW5nRmllbGQ6IiIsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fTtsZXQgcz10aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApLHQ9cy5yZWR1Y2UoKG8saCk9Pm8raC5wcm9jZXNzaW5nVGltZSwwKS9zLmxlbmd0aCxlPXMucmVkdWNlKChvLGgpPT5vK2gucmVzdWx0Q291bnQsMCkvcy5sZW5ndGgscj1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5LmZvckVhY2gobz0+e2xldCBoPXIuZ2V0KG8ucXVlcnlMZW5ndGgpfHwwO3Iuc2V0KG8ucXVlcnlMZW5ndGgsaCsxKX0pO2xldCBpPTAsbj0wO3IuZm9yRWFjaCgobyxoKT0+e28+biYmKG49byxpPWgpfSk7bGV0IGE9IiIsYz0wO3JldHVybiB0aGlzLmZpZWxkU3RhdHMuZm9yRWFjaCgobyxoKT0+e28uYXZlcmFnZVNjb3JlPmMmJihjPW8uYXZlcmFnZVNjb3JlLGE9aCl9KSx7cmVjZW50QXZlcmFnZVByb2Nlc3NpbmdUaW1lOnQscmVjZW50QXZlcmFnZVJlc3VsdENvdW50OmUsdGhyb3VnaHB1dFBlclNlY29uZDp0PjA/MWUzL3Q6MCx0b3RhbEhpc3RvcnlFbnRyaWVzOnRoaXMucGVyZm9ybWFuY2VIaXN0b3J5Lmxlbmd0aCxtb3N0Q29tbW9uUXVlcnlMZW5ndGg6aSxiZXN0UGVyZm9ybWluZ0ZpZWxkOmEsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fX1oYW5kbGVNZXNzYWdlKHMpe3RoaXMubG9nZ2VyLndhcm4oIlx1MjZBMFx1RkUwRiBCYXNlV29ya2VyLmhhbmRsZU1lc3NhZ2U6IE5vIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIil9fTt2YXIgST1jbGFzcyBleHRlbmRzIHp7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMubmdyYW1DYWNoZT1uZXcgTWFwO3RoaXMud29yZENhY2hlPW5ldyBNYXA7dGhpcy5waG9uZXRpY0NhY2hlPW5ldyBNYXA7dGhpcy5jdXJyZW50SXRlbXM9W107dGhpcy5jdXJyZW50U2VhcmNoRmllbGRzPVtdO3RoaXMuaW5kZXhNZXRhZGF0YT1udWxsO3RoaXMuaW5kZXhTdGF0cz17dG90YWxJbmRleEJ1aWxkczowLGN1cnJlbnREYXRhU2l6ZTowLGxhc3RJbmRleFRpbWU6MH07dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHM9e2Fib3ZlODA6MCxhYm92ZTYwOjAsYWJvdmU0MDowLGJlbG93NDA6MH07dGhpcy5iYXNlTG9nUHJlZml4PSJbZnV6enktc2VhcmNoLWluZGV4XSIsdGhpcy5sb2dnZXIuc2V0UHJlZml4KHRoaXMuYmFzZUxvZ1ByZWZpeCksdGhpcy5zZXR1cE1lc3NhZ2VIYW5kbGVyKCl9Z2V0V29ya2VyVHlwZSgpe3JldHVybiJpbmRleCJ9Z2V0U3BlY2lmaWNNZXRyaWNzKCl7cmV0dXJue3RvdGFsSW5kZXhCdWlsZHM6dGhpcy5pbmRleFN0YXRzLnRvdGFsSW5kZXhCdWlsZHMsY3VycmVudERhdGFTaXplOnRoaXMuaW5kZXhTdGF0cy5jdXJyZW50RGF0YVNpemUsbGFzdEluZGV4VGltZTp0aGlzLmluZGV4U3RhdHMubGFzdEluZGV4VGltZSxjYWNoZVNpemU6e25ncmFtOnRoaXMubmdyYW1DYWNoZS5zaXplLHdvcmQ6dGhpcy53b3JkQ2FjaGUuc2l6ZSxwaG9uZXRpYzp0aGlzLnBob25ldGljQ2FjaGUuc2l6ZX0saW5kZXhNZXRhZGF0YTp0aGlzLmluZGV4TWV0YWRhdGF8fHt9LHNpbWlsYXJpdHlUaHJlc2hvbGRzOnsuLi50aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0c319fXJlc2V0U3RhdHMoKXtzdXBlci5yZXNldFN0YXRzKCksdGhpcy5pbmRleFN0YXRzPXt0b3RhbEluZGV4QnVpbGRzOjAsY3VycmVudERhdGFTaXplOjAsbGFzdEluZGV4VGltZTowfSx0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cz17YWJvdmU4MDowLGFib3ZlNjA6MCxhYm92ZTQwOjAsYmVsb3c0MDowfSx0aGlzLmxvZ2dlci5pbmZvKCJcdXsxRjUyN30gSW5kZXggV29ya2VyOiBBbGwgc3RhdGlzdGljcyByZXNldCBjb21wbGV0ZWQiKX11cGRhdGVTaW1pbGFyaXR5U3RhdHModCl7dD49Ljg/dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU4MCsrOnQ+PS42P3RoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNjArKzp0Pj0uND90aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTQwKys6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MCsrfWdlbmVyYXRlUGVyZm9ybWFuY2VJbnNpZ2h0cygpe2xldCB0PXN1cGVyLmdlbmVyYXRlUGVyZm9ybWFuY2VJbnNpZ2h0cygpLGU9dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU4MCt0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTYwK3RoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDArdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MCxyPWU+MD97aGlnaFNpbWlsYXJpdHk6TWF0aC5yb3VuZCh0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTgwL2UqMTAwKSxtZWRpdW1TaW1pbGFyaXR5Ok1hdGgucm91bmQodGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU2MC9lKjEwMCksbG93U2ltaWxhcml0eTpNYXRoLnJvdW5kKHRoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDAvZSoxMDApLHZlcnlMb3dTaW1pbGFyaXR5Ok1hdGgucm91bmQodGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MC9lKjEwMCl9OntoaWdoU2ltaWxhcml0eTowLG1lZGl1bVNpbWlsYXJpdHk6MCxsb3dTaW1pbGFyaXR5OjAsdmVyeUxvd1NpbWlsYXJpdHk6MH07cmV0dXJuey4uLnQsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjpyfX1zZXR1cE1lc3NhZ2VIYW5kbGVyKCl7c2VsZi5vbm1lc3NhZ2U9dD0+e3RoaXMuaGFuZGxlTWVzc2FnZSh0KX19aGFuZGxlTWVzc2FnZSh0KXtsZXQgZT1wZXJmb3JtYW5jZS5ub3coKSx7ZGF0YTpyfT10O3RyeXtzd2l0Y2goci50eXBlKXtjYXNlInBpbmciOnNlbGYucG9zdE1lc3NhZ2Uoe3R5cGU6InBvbmciLGlkOnIuaWR9KTticmVhaztjYXNlImJ1aWxkSW5kZXgiOnRoaXMuaGFuZGxlQnVpbGRJbmRleChyLGUpO2JyZWFrO2Nhc2UiaW5kZXhTZWFyY2giOnRoaXMuaGFuZGxlSW5kZXhTZWFyY2gocixlKTticmVhaztjYXNlImdldFN0YXRzIjp0aGlzLmhhbmRsZUdldFN0YXRzKHIsZSk7YnJlYWs7Y2FzZSJyZXNldFN0YXRzIjp0aGlzLmhhbmRsZVJlc2V0U3RhdHMocixlKTticmVhaztjYXNlInNldExvZ0xldmVsIjpyLmxvZ0xldmVsIT09dm9pZCAwJiZ0aGlzLnNldExvZ0xldmVsKHIubG9nTGV2ZWwpLHIud29ya2VySWQhPT12b2lkIDAmJnRoaXMuc2V0V29ya2VySWQoci53b3JrZXJJZCk7YnJlYWs7ZGVmYXVsdDp0aGlzLnNlbmRFcnJvcihyLmlkLGBVbmtub3duIHJlcXVlc3QgdHlwZTogJHtyLnR5cGV9YCxlKX19Y2F0Y2goaSl7dGhpcy5zZW5kRXJyb3Ioci5pZCxpIGluc3RhbmNlb2YgRXJyb3I/aS5tZXNzYWdlOlN0cmluZyhpKSxlKX19aGFuZGxlQnVpbGRJbmRleCh0LGUpe2lmKCEodC5pdGVtcyYmdC5zZWFyY2hGaWVsZHMpKXt0aGlzLnNlbmRFcnJvcih0LmlkLCJJdGVtcyBhbmQgc2VhcmNoRmllbGRzIGFyZSByZXF1aXJlZCBmb3IgYnVpbGRJbmRleCIsZSk7cmV0dXJufWxldHtpdGVtczpyLHNlYXJjaEZpZWxkczppLG9wdGlvbnM6bn09dCxhPW4/Lm5ncmFtU2l6ZXx8dS5uZ3JhbVNpemU7dGhpcy5uZ3JhbUNhY2hlLmNsZWFyKCksdGhpcy53b3JkQ2FjaGUuY2xlYXIoKSx0aGlzLnBob25ldGljQ2FjaGUuY2xlYXIoKSx0aGlzLmN1cnJlbnRJdGVtcz1yLHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcz1pLHIuZm9yRWFjaCgoaCxtKT0+e2kuZm9yRWFjaChTPT57bGV0IHA9U3RyaW5nKGhbU10/PyIiKTtpZighcClyZXR1cm47bGV0IGQ9cC50b0xvd2VyQ2FzZSgpO3RoaXMuYnVpbGROZ3JhbUluZGV4KGQsbSxhKSx0aGlzLmJ1aWxkV29yZEluZGV4KGQsbSksdGhpcy5idWlsZFBob25ldGljSW5kZXgoZCxtKX0pfSk7bGV0IGM9cGVyZm9ybWFuY2Uubm93KCktZTt0aGlzLmluZGV4TWV0YWRhdGE9e2l0ZW1Db3VudDpyLmxlbmd0aCxidWlsZFRpbWU6YyxjcmVhdGVkQXQ6RGF0ZS5ub3coKSxpbmRleGVkRmllbGRzOlsuLi5pXSxuZ3JhbVNpemU6YSxzdHJhdGVneTpuPy5pbmRleFdvcmtlck9wdGlvbnM/LnN0cmF0ZWd5fHwiaHlicmlkIix0b3RhbEluZGV4U2l6ZTp0aGlzLm5ncmFtQ2FjaGUuc2l6ZSt0aGlzLndvcmRDYWNoZS5zaXplK3RoaXMucGhvbmV0aWNDYWNoZS5zaXplLGluZGV4U2l6ZXM6e25ncmFtOnRoaXMubmdyYW1DYWNoZS5zaXplLHdvcmQ6dGhpcy53b3JkQ2FjaGUuc2l6ZSxwaG9uZXRpYzp0aGlzLnBob25ldGljQ2FjaGUuc2l6ZX19LHRoaXMuaW5kZXhTdGF0cy50b3RhbEluZGV4QnVpbGRzKyssdGhpcy5pbmRleFN0YXRzLmN1cnJlbnREYXRhU2l6ZT1yLmxlbmd0aCx0aGlzLmluZGV4U3RhdHMubGFzdEluZGV4VGltZT1jLHRoaXMudXBkYXRlV29ya2VyU3RhdHMoImJ1aWxkSW5kZXgiLGMse2l0ZW1Db3VudDpyLmxlbmd0aCxmaWVsZENvdW50OmkubGVuZ3RoLG5ncmFtU2l6ZTphLGluZGV4U2l6ZTp0aGlzLm5ncmFtQ2FjaGUuc2l6ZSt0aGlzLndvcmRDYWNoZS5zaXplK3RoaXMucGhvbmV0aWNDYWNoZS5zaXplLHN0cmF0ZWd5OiJoeWJyaWQifSk7bGV0IG89e3R5cGU6ImluZGV4UmVhZHkiLGlkOnQuaWQsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6Yyx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e2l0ZW1Db3VudDpyLmxlbmd0aCxpbmRleFNpemU6e3RvdGFsOnRoaXMubmdyYW1DYWNoZS5zaXplK3RoaXMud29yZENhY2hlLnNpemUrdGhpcy5waG9uZXRpY0NhY2hlLnNpemUsbmdyYW06dGhpcy5uZ3JhbUNhY2hlLnNpemUsd29yZDp0aGlzLndvcmRDYWNoZS5zaXplLHBob25ldGljOnRoaXMucGhvbmV0aWNDYWNoZS5zaXplfSxzdHJhdGVneToiaHlicmlkIixuZ3JhbVNpemU6YX19O3RoaXMubG9nZ2VyLmluZm8oYFx1ezFGNTI3fSBJbmRleCBXb3JrZXI6IEJ1aWx0IGNvbXBvc2l0ZSBpbmRleCAtIE4tZ3JhbTogJHt0aGlzLm5ncmFtQ2FjaGUuc2l6ZX0sIFdvcmQ6ICR7dGhpcy53b3JkQ2FjaGUuc2l6ZX0sIFBob25ldGljOiAke3RoaXMucGhvbmV0aWNDYWNoZS5zaXplfWApLHNlbGYucG9zdE1lc3NhZ2Uobyl9aGFuZGxlR2V0U3RhdHModCxlKXtsZXQgcj17dHlwZToic3RhdHMiLGlkOnQuaWQsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6cGVyZm9ybWFuY2Uubm93KCktZSx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e3RvdGFsSW5kZXhCdWlsZHM6dGhpcy5pbmRleFN0YXRzLnRvdGFsSW5kZXhCdWlsZHMsY3VycmVudERhdGFTaXplOnRoaXMuaW5kZXhTdGF0cy5jdXJyZW50RGF0YVNpemUsaW5kZXhTaXplczp7dG90YWw6dGhpcy5uZ3JhbUNhY2hlLnNpemUrdGhpcy53b3JkQ2FjaGUuc2l6ZSt0aGlzLnBob25ldGljQ2FjaGUuc2l6ZSxuZ3JhbTp0aGlzLm5ncmFtQ2FjaGUuc2l6ZSx3b3JkOnRoaXMud29yZENhY2hlLnNpemUscGhvbmV0aWM6dGhpcy5waG9uZXRpY0NhY2hlLnNpemV9fX07dGhpcy5sb2dnZXIuaW5mbygiXHV7MUY0Q0F9IEluZGV4IFdvcmtlcjogU2VuZGluZyBzdGF0cyB1cGRhdGUiLHIuc3RhdHMpLHNlbGYucG9zdE1lc3NhZ2Uocil9aGFuZGxlUmVzZXRTdGF0cyh0LGUpe3RoaXMucmVzZXRTdGF0cygpO2xldCByPXBlcmZvcm1hbmNlLm5vdygpLWUsaT17dHlwZToicmVzZXRTdGF0cyIsaWQ6dC5pZCxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpyLHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7cmVzZXRDb21wbGV0ZWQ6ITAsdGltZXN0YW1wOkRhdGUubm93KCl9fTt0aGlzLmxvZ2dlci5pbmZvKCJcdXsxRjUwNH0gSW5kZXggV29ya2VyOiBTdGF0aXN0aWNzIHJlc2V0IGNvbXBsZXRlZCIpLHNlbGYucG9zdE1lc3NhZ2UoaSl9aGFuZGxlSW5kZXhTZWFyY2godCxlKXtpZighdC5xdWVyeSl7dGhpcy5zZW5kRXJyb3IodC5pZCwiUXVlcnkgaXMgcmVxdWlyZWQgZm9yIGluZGV4U2VhcmNoIixlKTtyZXR1cm59aWYodGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoPT09MCl7dGhpcy5zZW5kRXJyb3IodC5pZCwiSW5kZXggaXMgbm90IGJ1aWx0LiBTZW5kIGJ1aWxkSW5kZXggcmVxdWVzdCBmaXJzdC4iLGUpO3JldHVybn1sZXR7cXVlcnk6cixvcHRpb25zOml9PXQsbj1pPy5pbmRleFdvcmtlck9wdGlvbnM/LnN0cmF0ZWd5fHwiaHlicmlkIixhO3N3aXRjaChuKXtjYXNlImZhc3QiOmE9dGhpcy5nZXRGYXN0Q2FuZGlkYXRlcyhyLGl8fHt9KTticmVhaztjYXNlImFjY3VyYXRlIjphPXRoaXMuZ2V0QWNjdXJhdGVDYW5kaWRhdGVzKHIsaXx8e30pO2JyZWFrO2RlZmF1bHQ6YT10aGlzLmdldEh5YnJpZENhbmRpZGF0ZXMocixpfHx7fSk7YnJlYWt9bGV0IGM9dGhpcy5jcmVhdGVTZWFyY2hSZXN1bHRzKEFycmF5LmZyb20oYSkscixpfHx7fSksbz1wZXJmb3JtYW5jZS5ub3coKS1lO3RoaXMudXBkYXRlV29ya2VyU3RhdHMoImluZGV4U2VhcmNoIixvLHtxdWVyeUxlbmd0aDpyLmxlbmd0aCxpdGVtQ291bnQ6dGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoLHJlc3VsdENvdW50OmMubGVuZ3RoLGNhbmRpZGF0ZUNvdW50OmEuc2l6ZSxzdHJhdGVneTpufSksYy5mb3JFYWNoKG09PnttLm1hdGNoZWRGaWVsZHMuZm9yRWFjaChTPT57dGhpcy51cGRhdGVGaWVsZFN0YXRzKFMsbS5zY29yZSl9KX0pO2xldCBoPXt0eXBlOiJpbmRleFNlYXJjaFJlc3VsdHMiLGlkOnQuaWQscmVzdWx0czpjLHN0YXRzOnRoaXMuZ2V0V29ya2VyU3RhdHMoKSxtZXRyaWNzOnRoaXMuZ2V0TWV0cmljcygpLHByb2Nlc3NpbmdUaW1lOm8sd29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25NZXRhOntjYW5kaWRhdGVDb3VudDphLnNpemUsc3RyYXRlZ3k6bixxdWVyeUxlbmd0aDpyLmxlbmd0aCx0aHJlc2hvbGQ6aT8uaW5kZXhXb3JrZXJPcHRpb25zPy50aHJlc2hvbGR8fHUuaW5kZXhXb3JrZXJPcHRpb25zPy50aHJlc2hvbGR8fC40fX07dGhpcy5sb2dnZXIuaW5mbyhgXHV7MUY1MER9IEluZGV4IFdvcmtlcjogRm91bmQgJHtjLmxlbmd0aH0gcmVzdWx0cyBmb3IgIiR7cn0iIChzdHJhdGVneTogJHtufSlgKSxzZWxmLnBvc3RNZXNzYWdlKGgpLHRoaXMuc2VuZFN0YXRzVXBkYXRlKCl9YnVpbGROZ3JhbUluZGV4KHQsZSxyKXt0aGlzLmdlbmVyYXRlTmdyYW1zKHQscikuZm9yRWFjaChuPT57dGhpcy5uZ3JhbUNhY2hlLmhhcyhuKXx8dGhpcy5uZ3JhbUNhY2hlLnNldChuLG5ldyBTZXQpO2xldCBhPXRoaXMubmdyYW1DYWNoZS5nZXQobik7YSYmYS5hZGQoZSl9KX1idWlsZFdvcmRJbmRleCh0LGUpe3Quc3BsaXQoL1xzKy8pLmZpbHRlcihpPT5pLmxlbmd0aD4wKS5mb3JFYWNoKGk9Pnt0aGlzLndvcmRDYWNoZS5oYXMoaSl8fHRoaXMud29yZENhY2hlLnNldChpLG5ldyBTZXQpO2xldCBuPXRoaXMud29yZENhY2hlLmdldChpKTtuJiZuLmFkZChlKX0pfWJ1aWxkUGhvbmV0aWNJbmRleCh0LGUpe2xldCByPXRoaXMuZ2VuZXJhdGVQaG9uZXRpY0tleSh0KTt0aGlzLnBob25ldGljQ2FjaGUuaGFzKHIpfHx0aGlzLnBob25ldGljQ2FjaGUuc2V0KHIsbmV3IFNldCk7bGV0IGk9dGhpcy5waG9uZXRpY0NhY2hlLmdldChyKTtpJiZpLmFkZChlKX1nZW5lcmF0ZU5ncmFtcyh0LGUpe2xldCByPW5ldyBTZXQsaT10LnRvTG93ZXJDYXNlKCkudHJpbSgpO2ZvcihsZXQgbj0wO248PWkubGVuZ3RoLWU7bisrKXIuYWRkKGkuc3Vic3RyaW5nKG4sbitlKSk7cmV0dXJuIHJ9Z2VuZXJhdGVQaG9uZXRpY0tleSh0KXtyZXR1cm4gdC5yZXBsYWNlKC9b44KhLeODtl0vZyxlPT5TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgwKS05NikpLnJlcGxhY2UoL1vjgaPjgoPjgoXjgoddL2csZT0+KHtcdTMwNjM6Ilx1MzA2NCIsXHUzMDgzOiJcdTMwODQiLFx1MzA4NToiXHUzMDg2IixcdTMwODc6Ilx1MzA4OCJ9KVtlXT8/ZSkucmVwbGFjZSgv44O8L2csIiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXHMrL2csIiIpfWdldEZhc3RDYW5kaWRhdGVzKHQsZSl7bGV0IHI9bmV3IFNldCxpPWUuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKTtyZXR1cm4gaS5zcGxpdCgvXHMrLykuZmlsdGVyKGE9PmEubGVuZ3RoPjApLmZvckVhY2goYT0+e2xldCBjPXRoaXMud29yZENhY2hlLmdldChhKTtjJiZjLmZvckVhY2gobz0+e3IuYWRkKG8pfSl9KSxyLnNpemU9PT0wJiZ0aGlzLmdlbmVyYXRlTmdyYW1zKGksZS5uZ3JhbVNpemV8fHUubmdyYW1TaXplKS5mb3JFYWNoKGM9PntsZXQgbz10aGlzLm5ncmFtQ2FjaGUuZ2V0KGMpO28mJm8uZm9yRWFjaChoPT57ci5hZGQoaCl9KX0pLHJ9Z2V0QWNjdXJhdGVDYW5kaWRhdGVzKHQsZSl7bGV0IHI9bmV3IFNldCxpPWUuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKSxuPWUubmdyYW1TaXplfHx1Lm5ncmFtU2l6ZSxhPWUubWluTmdyYW1PdmVybGFwfHx1Lm1pbk5ncmFtT3ZlcmxhcCxjPW5ldyBNYXAsbz10aGlzLmdlbmVyYXRlTmdyYW1zKGksbik7by5mb3JFYWNoKGc9PntsZXQgZj10aGlzLm5ncmFtQ2FjaGUuZ2V0KGcpO2YmJmYuZm9yRWFjaChsPT57Yy5zZXQobCwoYy5nZXQobCl8fDApKzEpfSl9KSxpLnNwbGl0KC9ccysvKS5maWx0ZXIoZz0+Zy5sZW5ndGg+MCkuZm9yRWFjaChnPT57bGV0IGY9dGhpcy53b3JkQ2FjaGUuZ2V0KGcpO2YmJmYuZm9yRWFjaChsPT57ci5hZGQobCl9KX0pO2xldCBtPXRoaXMuZ2VuZXJhdGVQaG9uZXRpY0tleShpKSxTPXRoaXMucGhvbmV0aWNDYWNoZS5nZXQobSk7UyYmUy5mb3JFYWNoKGc9PntyLmFkZChnKX0pO2xldCBwPWUuaW5kZXhXb3JrZXJPcHRpb25zPy5uZ3JhbU92ZXJsYXBUaHJlc2hvbGR8fHUuaW5kZXhXb3JrZXJPcHRpb25zPy5uZ3JhbU92ZXJsYXBUaHJlc2hvbGR8fC4zLGQ9TWF0aC5tYXgoYSxvLnNpemUqcCk7cmV0dXJuIGMuZm9yRWFjaCgoZyxmKT0+e2c+PWQmJnIuYWRkKGYpfSkscn1nZXRIeWJyaWRDYW5kaWRhdGVzKHQsZSl7bGV0IHI9dGhpcy5nZXRGYXN0Q2FuZGlkYXRlcyh0LGUpLGk9ZS5pbmRleFdvcmtlck9wdGlvbnM/Lm1pbkNhbmRpZGF0ZXNSYXRpb3x8dS5pbmRleFdvcmtlck9wdGlvbnM/Lm1pbkNhbmRpZGF0ZXNSYXRpb3x8LjE7ci5zaXplPE1hdGgubWluKHRoaXMuY3VycmVudEl0ZW1zLmxlbmd0aCppLDEwKSYmdGhpcy5nZXRBY2N1cmF0ZUNhbmRpZGF0ZXModCxlKS5mb3JFYWNoKGM9PntyLmFkZChjKX0pO2xldCBuPWUuaW5kZXhXb3JrZXJPcHRpb25zPy5tYXhDYW5kaWRhdGVzUmF0aW98fHUuaW5kZXhXb3JrZXJPcHRpb25zPy5tYXhDYW5kaWRhdGVzUmF0aW98fC41O3JldHVybiByLnNpemU+dGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoKm4mJihyPXRoaXMuZmlsdGVyQnlOZ3JhbU92ZXJsYXAodCxyLGUubmdyYW1TaXplfHx1Lm5ncmFtU2l6ZSxlKSkscn1maWx0ZXJCeU5ncmFtT3ZlcmxhcCh0LGUscixpKXtsZXQgbj1uZXcgU2V0LGE9dGhpcy5nZW5lcmF0ZU5ncmFtcyh0LnRvTG93ZXJDYXNlKCksciksYz1pPy5pbmRleFdvcmtlck9wdGlvbnM/Lm5ncmFtT3ZlcmxhcFRocmVzaG9sZHx8dS5pbmRleFdvcmtlck9wdGlvbnM/Lm5ncmFtT3ZlcmxhcFRocmVzaG9sZHx8LjMsbz1NYXRoLm1heCgxLGEuc2l6ZSpjKTtyZXR1cm4gZS5mb3JFYWNoKGg9PntsZXQgbT0wO2EuZm9yRWFjaChTPT57dGhpcy5uZ3JhbUNhY2hlLmdldChTKT8uaGFzKGgpJiZtKyt9KSxtPj1vJiZuLmFkZChoKX0pLG59Y3JlYXRlU2VhcmNoUmVzdWx0cyh0LGUscil7bGV0IGk9W10sbj1yLmNhc2VTZW5zaXRpdmU/ZTplLnRvTG93ZXJDYXNlKCksYT10aGlzLmdldFF1ZXJ5VG9rZW5zKGUsciksbz10aGlzLmdldE11bHRpVGVybU9wZXJhdG9yKHIpPT09ImFuZCImJmEubGVuZ3RoPjEsaD1yLnNvcnRCeXx8dS5zb3J0QnksbT1oPT09InJlbGV2YW5jZSIsUz1tP3IuaW5kZXhXb3JrZXJPcHRpb25zPy5yZWxldmFuY2VGaWVsZFdlaWdodD8/dS5pbmRleFdvcmtlck9wdGlvbnM/LnJlbGV2YW5jZUZpZWxkV2VpZ2h0Pz8uMjowLHA9bT9yLmluZGV4V29ya2VyT3B0aW9ucz8ucmVsZXZhbmNlUGVyZmVjdE1hdGNoQm9udXM/P3UuaW5kZXhXb3JrZXJPcHRpb25zPy5yZWxldmFuY2VQZXJmZWN0TWF0Y2hCb251cz8/LjE6MDt0LmZvckVhY2gobD0+e2lmKGw+PXRoaXMuY3VycmVudEl0ZW1zLmxlbmd0aClyZXR1cm47bGV0IGI9dGhpcy5jdXJyZW50SXRlbXNbbF0seT0wLHg9MCxrPVtdLE09ci5pbmRleFdvcmtlck9wdGlvbnM/LnRocmVzaG9sZD8/ci50aHJlc2hvbGQ/P3UuaW5kZXhXb3JrZXJPcHRpb25zPy50aHJlc2hvbGQ/Py40O2lmKG8mJiF0aGlzLml0ZW1NYXRjaGVzVG9rZW5zKGIsYSxyKSlyZXR1cm47Zm9yKGxldCB2IG9mIHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcyl7bGV0IFA9U3RyaW5nKGJbdl0/PyIiKTtpZighUCljb250aW51ZTtsZXQgTz1yLmNhc2VTZW5zaXRpdmU/UDpQLnRvTG93ZXJDYXNlKCksdz10aGlzLmNhbGN1bGF0ZUphcm9XaW5rbGVyKG4sTyxyKSxMPXIuY3VzdG9tV2VpZ2h0cz8uW3ZdPz8xLFI9dypMO3c+MCYmay5wdXNoKHYpLHc+eCYmKHg9dyksUj55JiYoeT1SKX1sZXQgVD15O2lmKG0mJmsubGVuZ3RoPjApe2xldCB2PXg+PS45OT9wOjA7VD15K2subGVuZ3RoKlMrdn1UPj1NJiYodGhpcy51cGRhdGVTaW1pbGFyaXR5U3RhdHMoVCksaS5wdXNoKHtpdGVtOmIsc2NvcmU6VCxiYXNlU2NvcmU6eCxtYXRjaGVkRmllbGRzOmssb3JpZ2luYWxJbmRleDpsfSkpfSk7bGV0IGQ9ci5zb3J0T3JkZXJ8fHUuc29ydE9yZGVyLGc7aD09PSJyZWxldmFuY2UiP2c9aS5zb3J0KChsLGIpPT5kPT09ImFzYyI/bC5zY29yZS1iLnNjb3JlOmIuc2NvcmUtbC5zY29yZSk6aD09PSJvcmlnaW5hbCI/Zz1pLnNvcnQoKGwsYik9PntsZXQgeT1sLm9yaWdpbmFsSW5kZXg/PzAseD1iLm9yaWdpbmFsSW5kZXg/PzA7cmV0dXJuIGQ9PT0iYXNjIj95LXg6eC15fSk6Zz1pLnNvcnQoKGwsYik9PmQ9PT0iYXNjIj9sLnNjb3JlLWIuc2NvcmU6Yi5zY29yZS1sLnNjb3JlKTtsZXQgZj1yLmluZGV4V29ya2VyT3B0aW9ucz8ubWF4UmVzdWx0cztyZXR1cm4gdHlwZW9mIGY9PSJudW1iZXIiP2cuc2xpY2UoMCxmKTpnfWdldE11bHRpVGVybU9wZXJhdG9yKHQpe3JldHVybiB0Lm11bHRpVGVybU9wZXJhdG9yPz91Lm11bHRpVGVybU9wZXJhdG9yPz8ib3IifWdldFF1ZXJ5VG9rZW5zKHQsZSl7cmV0dXJuKGUuY2FzZVNlbnNpdGl2ZT90OnQudG9Mb3dlckNhc2UoKSkuc3BsaXQoL1xzKy8pLmZpbHRlcihpPT5pLmxlbmd0aD4wKX1pdGVtTWF0Y2hlc1Rva2Vucyh0LGUscil7aWYoZS5sZW5ndGg9PT0wKXJldHVybiEwO2xldCBpPW5ldyBTZXQoZSk7Zm9yKGxldCBuIG9mIHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcyl7aWYoaS5zaXplPT09MClicmVhaztsZXQgYT1TdHJpbmcodFtuXT8/IiIpO2lmKCFhKWNvbnRpbnVlO2xldCBjPXIuY2FzZVNlbnNpdGl2ZT9hOmEudG9Mb3dlckNhc2UoKTtmb3IobGV0IG8gb2YgZSlpZihpLmhhcyhvKSYmYy5pbmNsdWRlcyhvKSYmKGkuZGVsZXRlKG8pLGkuc2l6ZT09PTApKWJyZWFrfXJldHVybiBpLnNpemU9PT0wfWNhbGN1bGF0ZUphcm9XaW5rbGVyKHQsZSxyKXtsZXQgaT0wLG49TWF0aC5mbG9vcihNYXRoLm1heCh0Lmxlbmd0aCxlLmxlbmd0aCkvMiktMSxhPW5ldyBBcnJheSh0Lmxlbmd0aCkuZmlsbCghMSksYz1uZXcgQXJyYXkoZS5sZW5ndGgpLmZpbGwoITEpO2ZvcihsZXQgZD0wO2Q8dC5sZW5ndGg7ZCsrKXtsZXQgZz1NYXRoLm1heCgwLGQtbiksZj1NYXRoLm1pbihkK24rMSxlLmxlbmd0aCk7Zm9yKGxldCBsPWc7bDxmO2wrKylpZighY1tsXSYmdFtkXT09PWVbbF0pe2FbZF09ITAsY1tsXT0hMCxpKys7YnJlYWt9fWlmKGk9PT0wKXJldHVybiAwO2xldCBvPTAsaD0wO2ZvcihsZXQgZD0wO2Q8dC5sZW5ndGg7ZCsrKWlmKGFbZF0pe2Zvcig7IWNbaF07KWgrKzt0W2RdIT09ZVtoXSYmbysrLGgrK31sZXQgbT0oaS90Lmxlbmd0aCtpL2UubGVuZ3RoKyhpLW8vMikvaSkvMyxTPXI/LmluZGV4V29ya2VyT3B0aW9ucz8uamFyb1dpbmtsZXJQcmVmaXh8fHUuaW5kZXhXb3JrZXJPcHRpb25zPy5qYXJvV2lua2xlclByZWZpeHx8LjEscD0wO2Zvcig7cDw0JiZ0W3BdPT09ZVtwXTspcCsrO3JldHVybiBtK3AqUyooMS1tKX1zZW5kRXJyb3IodCxlLHIpe2xldCBpPXBlcmZvcm1hbmNlLm5vdygpLXI7dGhpcy51cGRhdGVXb3JrZXJTdGF0cygiZXJyb3IiLGkse2Vycm9yTWVzc2FnZTplLGhhc0Vycm9yOiEwfSk7bGV0IG49e3R5cGU6ImVycm9yIixpZDp0LGVycm9yOmUsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6aSx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpfTtzZWxmLnBvc3RNZXNzYWdlKG4pfX07bmV3IEk7Cg==", import.meta.url), a = l.workerUrls?.indexWorker ? new URL(l.workerUrls.indexWorker, window.location.origin) : t;
322
- this.logger.debug("🔧 Global Index Worker URL:", a.toString()), this.indexWorker = new Worker(a, { type: "module" }), this.logger.info("🔧 Global Index Worker: Initialized successfully");
349
+ let s = t.workerUrls?.indexWorker ? new URL(t.workerUrls.indexWorker, window.location.origin) : ce(r, "indexWorker");
350
+ s ? (this.logger.debug("🔧 Global Index Worker URL:", s.toString()), this.indexWorker = new Worker(s, { type: "module" }), this.logger.info("🔧 Global Index Worker: Initialized successfully")) : this.logger.warn("⚠️ Global Index Worker: default worker URL cannot be resolved in a CJS build. Specify options.workerUrls.indexWorker explicitly.");
323
351
  }
324
352
  if (!this.levenshteinWorker) {
325
- let t = import.meta.url.includes(".ts") ? new URL("../worker/levenshteinWorker.ts", import.meta.url) : new URL("data:text/javascript;base64,dmFyIFQ9Y2xhc3N7Y29uc3RydWN0b3IoaT0yLGU9IltmdXp6eS1zZWFyY2hdIix0PWNvbnNvbGUpe3RoaXMubGV2ZWw9aSx0aGlzLnByZWZpeD1lLHRoaXMuaW1wbD10fXNldExldmVsKGkpe3RoaXMubGV2ZWw9aX1zZXRJbXBsZW1lbnRhdGlvbihpKXt0aGlzLmltcGw9aX1zZXRQcmVmaXgoaSl7dGhpcy5wcmVmaXg9aX1mb3JtYXRNZXNzYWdlKGkpe3JldHVybiB0eXBlb2YgaT09InN0cmluZyI/W2Ake3RoaXMucHJlZml4fSAke2l9YF06W3RoaXMucHJlZml4LGldfWRlYnVnKGksLi4uZSl7dGhpcy5sZXZlbDw9MCYmdGhpcy5pbXBsLmRlYnVnKC4uLnRoaXMuZm9ybWF0TWVzc2FnZShpKSwuLi5lKX1pbmZvKGksLi4uZSl7dGhpcy5sZXZlbDw9MSYmdGhpcy5pbXBsLmluZm8oLi4udGhpcy5mb3JtYXRNZXNzYWdlKGkpLC4uLmUpfXdhcm4oaSwuLi5lKXt0aGlzLmxldmVsPD0yJiZ0aGlzLmltcGwud2FybiguLi50aGlzLmZvcm1hdE1lc3NhZ2UoaSksLi4uZSl9ZXJyb3IoaSwuLi5lKXt0aGlzLmxldmVsPD0zJiZ0aGlzLmltcGwuZXJyb3IoLi4udGhpcy5mb3JtYXRNZXNzYWdlKGkpLC4uLmUpfX07dmFyIHA9e3RocmVzaG9sZDouNCxjYXNlU2Vuc2l0aXZlOiExLGxlYXJuaW5nV2VpZ2h0OjEuMixkZWJvdW5jZU1zOjMwMCxtdWx0aVRlcm1PcGVyYXRvcjoiYW5kIixhdXRvU2VhcmNoT25JbmRleFJlYnVpbGQ6ITAsY3VzdG9tV2VpZ2h0czp7fSxuZ3JhbVNpemU6MixtaW5OZ3JhbU92ZXJsYXA6MSxzb3J0Qnk6InJlbGV2YW5jZSIsc29ydE9yZGVyOiJkZXNjIixlbmFibGVJbmRleEZpbHRlcmluZzohMCxlbmFibGVMZXZlbnNodGVpbjohMCxwYXJhbGxlbFNlYXJjaFN0cmF0ZWd5OiJiYWxhbmNlZCIsbG9nTGV2ZWw6MixpbmRleFdvcmtlck9wdGlvbnM6e3N0cmF0ZWd5OiJoeWJyaWQiLHRocmVzaG9sZDouNCxuZ3JhbU92ZXJsYXBUaHJlc2hvbGQ6LjMsbWluQ2FuZGlkYXRlc1JhdGlvOi4xLG1heENhbmRpZGF0ZXNSYXRpbzouNSxqYXJvV2lua2xlclByZWZpeDouMSxtYXhSZXN1bHRzOjFlMyxyZWxldmFuY2VGaWVsZFdlaWdodDouMixyZWxldmFuY2VQZXJmZWN0TWF0Y2hCb251czouMX0sbGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zOnt0aHJlc2hvbGQ6LjMsbGVuZ3RoU2ltaWxhcml0eVRocmVzaG9sZDouMSxwYXJ0aWFsTWF0Y2hCb251czouMSxsZW5ndGhEaWZmUGVuYWx0eToxLG1heFJlc3VsdHM6MWUzLHJlbGV2YW5jZUZpZWxkV2VpZ2h0Oi4xNX19O3ZhciBrPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0cz17dG90YWxTZWFyY2hlczowLHRvdGFsUHJvY2Vzc2luZ1RpbWU6MCxhdmVyYWdlU2VhcmNoVGltZTowLGxhc3RTZWFyY2hUaW1lOjAsZXJyb3JDb3VudDowLHRpbWVzdGFtcDpEYXRlLm5vdygpfTt0aGlzLmJhc2VMb2dQcmVmaXg9IltmdXp6eS1zZWFyY2gtd29ya2VyXSI7dGhpcy5sb2dnZXI9bmV3IFQoMix0aGlzLmJhc2VMb2dQcmVmaXgpO3RoaXMuZGV0YWlsZWRTdGF0cz1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5PVtdO3RoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uPW5ldyBNYXA7dGhpcy5maWVsZFN0YXRzPW5ldyBNYXA7dGhpcy5tZXRyaWNzPXt0aW1pbmdzOnthdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxmYXN0ZXN0UHJvY2Vzc2luZzoxLzAsc2xvd2VzdFByb2Nlc3Npbmc6MCxsYXN0UHJvY2Vzc2luZ1RpbWU6MH0sdGhyb3VnaHB1dDp7b3BlcmF0aW9uc1BlclNlY29uZDowLHRvdGFsT3BlcmF0aW9uczowfSxxdWFsaXR5OntzdWNjZXNzUmF0ZToxLGVycm9yUmF0ZTowLHRpbWVvdXRSYXRlOjB9fX1zZXRMb2dMZXZlbChpKXt0aGlzLmxvZ2dlci5zZXRMZXZlbChpKX1zZXRXb3JrZXJJZChpKXtsZXQgZT1pP2Ake3RoaXMuYmFzZUxvZ1ByZWZpeC5zbGljZSgwLC0xKX06JHtpfV1gOnRoaXMuYmFzZUxvZ1ByZWZpeDt0aGlzLmxvZ2dlci5zZXRQcmVmaXgoZSl9dXBkYXRlU3RhdHMoaSxlPSEwKXt0aGlzLnN0YXRzLnRvdGFsU2VhcmNoZXMrKyx0aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUrPWksdGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZT10aGlzLnN0YXRzLnRvdGFsUHJvY2Vzc2luZ1RpbWUvdGhpcy5zdGF0cy50b3RhbFNlYXJjaGVzLHRoaXMuc3RhdHMubGFzdFNlYXJjaFRpbWU9aSx0aGlzLm1ldHJpY3MudGltaW5ncy5sYXN0UHJvY2Vzc2luZ1RpbWU9aSx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU9dGhpcy5zdGF0cy5hdmVyYWdlU2VhcmNoVGltZSx0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZz1NYXRoLm1pbih0aGlzLm1ldHJpY3MudGltaW5ncy5mYXN0ZXN0UHJvY2Vzc2luZyxpKSx0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZz1NYXRoLm1heCh0aGlzLm1ldHJpY3MudGltaW5ncy5zbG93ZXN0UHJvY2Vzc2luZyxpKSx0aGlzLm1ldHJpY3MudGhyb3VnaHB1dC50b3RhbE9wZXJhdGlvbnMrKyx0aGlzLm1ldHJpY3MudGltaW5ncy5hdmVyYWdlUHJvY2Vzc2luZ1RpbWU+MCYmKHRoaXMubWV0cmljcy50aHJvdWdocHV0Lm9wZXJhdGlvbnNQZXJTZWNvbmQ9MWUzL3RoaXMubWV0cmljcy50aW1pbmdzLmF2ZXJhZ2VQcm9jZXNzaW5nVGltZSksZXx8dGhpcy5zdGF0cy5lcnJvckNvdW50Kys7bGV0IHQ9dGhpcy5tZXRyaWNzLnRocm91Z2hwdXQudG90YWxPcGVyYXRpb25zO3RoaXMubWV0cmljcy5xdWFsaXR5LnN1Y2Nlc3NSYXRlPSh0LXRoaXMuc3RhdHMuZXJyb3JDb3VudCkvdCx0aGlzLm1ldHJpY3MucXVhbGl0eS5lcnJvclJhdGU9dGhpcy5zdGF0cy5lcnJvckNvdW50L3R9Z2V0U3RhdHMoKXtyZXR1cm57Li4udGhpcy5zdGF0c319Z2V0TWV0cmljcygpe3JldHVybnsuLi50aGlzLm1ldHJpY3N9fXJlc2V0U3RhdHMoKXt0aGlzLnN0YXRzPXt0b3RhbFNlYXJjaGVzOjAsdG90YWxQcm9jZXNzaW5nVGltZTowLGF2ZXJhZ2VTZWFyY2hUaW1lOjAsbGFzdFNlYXJjaFRpbWU6MCxlcnJvckNvdW50OjAsdGltZXN0YW1wOkRhdGUubm93KCl9LHRoaXMubWV0cmljcz17dGltaW5nczp7YXZlcmFnZVByb2Nlc3NpbmdUaW1lOjAsZmFzdGVzdFByb2Nlc3Npbmc6MS8wLHNsb3dlc3RQcm9jZXNzaW5nOjAsbGFzdFByb2Nlc3NpbmdUaW1lOjB9LHRocm91Z2hwdXQ6e29wZXJhdGlvbnNQZXJTZWNvbmQ6MCx0b3RhbE9wZXJhdGlvbnM6MH0scXVhbGl0eTp7c3VjY2Vzc1JhdGU6MSxlcnJvclJhdGU6MCx0aW1lb3V0UmF0ZTowfX0sdGhpcy5kZXRhaWxlZFN0YXRzLmNsZWFyKCksdGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9W10sdGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24uY2xlYXIoKSx0aGlzLmZpZWxkU3RhdHMuY2xlYXIoKSx0aGlzLmxvZ2dlci5pbmZvKGBcdXsxRjRDQX0gJHt0aGlzLmdldFdvcmtlclR5cGUoKX0gV29ya2VyOiBTdGF0aXN0aWNzIHJlc2V0IGNvbXBsZXRlZGApfXVwZGF0ZVdvcmtlclN0YXRzKGksZSx0PXt9KXt0aGlzLnVwZGF0ZVN0YXRzKGUsITApO2xldCByPXRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLmdldChpKXx8MDt0aGlzLm9wZXJhdGlvbkRpc3RyaWJ1dGlvbi5zZXQoaSxyKzEpLE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtzLG5dKT0+e3RoaXMuZGV0YWlsZWRTdGF0cy5zZXQocyxuKX0pLHRoaXMuYWRkUGVyZm9ybWFuY2VFbnRyeSh7dGltZXN0YW1wOkRhdGUubm93KCksb3BlcmF0aW9uVHlwZTppLHByb2Nlc3NpbmdUaW1lOmUscXVlcnlMZW5ndGg6dC5xdWVyeUxlbmd0aHx8MCxpdGVtQ291bnQ6dC5pdGVtQ291bnR8fDAscmVzdWx0Q291bnQ6dC5yZXN1bHRDb3VudHx8MCxhZGRpdGlvbmFsTWV0cmljczp0fSl9dXBkYXRlRmllbGRTdGF0cyhpLGUpe2xldCB0PXRoaXMuZmllbGRTdGF0cy5nZXQoaSl8fHttYXRjaENvdW50OjAsYXZlcmFnZVNjb3JlOjAsdG90YWxTY29yZTowLGJlc3RTY29yZTowLHdvcnN0U2NvcmU6MX07dC5tYXRjaENvdW50Kz0xLHQudG90YWxTY29yZSs9ZSx0LmF2ZXJhZ2VTY29yZT10LnRvdGFsU2NvcmUvdC5tYXRjaENvdW50LHQuYmVzdFNjb3JlPU1hdGgubWF4KHQuYmVzdFNjb3JlLGUpLHQud29yc3RTY29yZT1NYXRoLm1pbih0LndvcnN0U2NvcmUsZSksdGhpcy5maWVsZFN0YXRzLnNldChpLHQpfWFkZFBlcmZvcm1hbmNlRW50cnkoaSl7dGhpcy5wZXJmb3JtYW5jZUhpc3RvcnkucHVzaChpKSx0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg+MTAwJiYodGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnk9dGhpcy5wZXJmb3JtYW5jZUhpc3Rvcnkuc2xpY2UoLTEwMCkpfWdldFdvcmtlclN0YXRzKCl7cmV0dXJue2Jhc2ljOnsuLi50aGlzLnN0YXRzLHRpbWVzdGFtcDpEYXRlLm5vdygpfSx3b3JrZXJTcGVjaWZpYzp7d29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25Db3VudDp0aGlzLmdldFRvdGFsT3BlcmF0aW9ucygpLG9wZXJhdGlvbkRpc3RyaWJ1dGlvbjpPYmplY3QuZnJvbUVudHJpZXModGhpcy5vcGVyYXRpb25EaXN0cmlidXRpb24pLHNwZWNpZmljTWV0cmljczp0aGlzLmdldFNwZWNpZmljTWV0cmljcygpfSxhbmFseXNpczp7ZmllbGRQZXJmb3JtYW5jZTpPYmplY3QuZnJvbUVudHJpZXModGhpcy5maWVsZFN0YXRzKSxwZXJmb3JtYW5jZUluc2lnaHRzOnRoaXMuZ2VuZXJhdGVQZXJmb3JtYW5jZUluc2lnaHRzKCkscmVjZW50SGlzdG9yeTp0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApfX19c2VuZFN0YXRzVXBkYXRlKCl7bGV0IGk9e3R5cGU6InN0YXRzIixpZDpgc3RhdHMtJHtEYXRlLm5vdygpfWAsc3RhdHM6dGhpcy5nZXRXb3JrZXJTdGF0cygpLG1ldHJpY3M6dGhpcy5nZXRNZXRyaWNzKCkscHJvY2Vzc2luZ1RpbWU6MCx3b3JrZXJUeXBlOnRoaXMuZ2V0V29ya2VyVHlwZSgpLG9wZXJhdGlvbk1ldGE6e319O3RoaXMubG9nZ2VyLmluZm8oYFx1ezFGNENBfSAke3RoaXMuZ2V0V29ya2VyVHlwZSgpfSBXb3JrZXI6IFNlbmRpbmcgdW5pZmllZCBzdGF0cyB1cGRhdGVgKSxzZWxmLnBvc3RNZXNzYWdlKGkpfWdldFRvdGFsT3BlcmF0aW9ucygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMub3BlcmF0aW9uRGlzdHJpYnV0aW9uLnZhbHVlcygpKS5yZWR1Y2UoKGksZSk9PmkrZSwwKX1nZW5lcmF0ZVBlcmZvcm1hbmNlSW5zaWdodHMoKXtpZih0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGg9PT0wKXJldHVybntyZWNlbnRBdmVyYWdlUHJvY2Vzc2luZ1RpbWU6MCxyZWNlbnRBdmVyYWdlUmVzdWx0Q291bnQ6MCx0aHJvdWdocHV0UGVyU2Vjb25kOjAsdG90YWxIaXN0b3J5RW50cmllczowLG1vc3RDb21tb25RdWVyeUxlbmd0aDowLGJlc3RQZXJmb3JtaW5nRmllbGQ6IiIsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fTtsZXQgaT10aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5zbGljZSgtMTApLGU9aS5yZWR1Y2UoKGEsbyk9PmErby5wcm9jZXNzaW5nVGltZSwwKS9pLmxlbmd0aCx0PWkucmVkdWNlKChhLG8pPT5hK28ucmVzdWx0Q291bnQsMCkvaS5sZW5ndGgscj1uZXcgTWFwO3RoaXMucGVyZm9ybWFuY2VIaXN0b3J5LmZvckVhY2goYT0+e2xldCBvPXIuZ2V0KGEucXVlcnlMZW5ndGgpfHwwO3Iuc2V0KGEucXVlcnlMZW5ndGgsbysxKX0pO2xldCBzPTAsbj0wO3IuZm9yRWFjaCgoYSxvKT0+e2E+biYmKG49YSxzPW8pfSk7bGV0IGM9IiIsbD0wO3JldHVybiB0aGlzLmZpZWxkU3RhdHMuZm9yRWFjaCgoYSxvKT0+e2EuYXZlcmFnZVNjb3JlPmwmJihsPWEuYXZlcmFnZVNjb3JlLGM9byl9KSx7cmVjZW50QXZlcmFnZVByb2Nlc3NpbmdUaW1lOmUscmVjZW50QXZlcmFnZVJlc3VsdENvdW50OnQsdGhyb3VnaHB1dFBlclNlY29uZDplPjA/MWUzL2U6MCx0b3RhbEhpc3RvcnlFbnRyaWVzOnRoaXMucGVyZm9ybWFuY2VIaXN0b3J5Lmxlbmd0aCxtb3N0Q29tbW9uUXVlcnlMZW5ndGg6cyxiZXN0UGVyZm9ybWluZ0ZpZWxkOmMsc2ltaWxhcml0eURpc3RyaWJ1dGlvbjp7aGlnaFNpbWlsYXJpdHk6MCxtZWRpdW1TaW1pbGFyaXR5OjAsbG93U2ltaWxhcml0eTowLHZlcnlMb3dTaW1pbGFyaXR5OjB9fX1oYW5kbGVNZXNzYWdlKGkpe3RoaXMubG9nZ2VyLndhcm4oIlx1MjZBMFx1RkUwRiBCYXNlV29ya2VyLmhhbmRsZU1lc3NhZ2U6IE5vIGltcGxlbWVudGF0aW9uIHByb3ZpZGVkIil9fTt2YXIgTD1jbGFzcyBleHRlbmRzIGt7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuY3VycmVudEl0ZW1zPVtdO3RoaXMuY3VycmVudFNlYXJjaEZpZWxkcz1bXTt0aGlzLmRpc3RhbmNlRGlzdHJpYnV0aW9uPW5ldyBNYXA7dGhpcy5xdWVyeUxlbmd0aFN0YXRzPW5ldyBNYXA7dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHM9e2Fib3ZlODA6MCxhYm92ZTYwOjAsYWJvdmU0MDowLGJlbG93NDA6MH07dGhpcy5sZXZlbnNodGVpblN0YXRzPXt0b3RhbENhbGN1bGF0aW9uczowLHRvdGFsRGlzdGFuY2VDYWxjdWxhdGlvbnM6MCxhdmVyYWdlRGlzdGFuY2U6MCxtaW5EaXN0YW5jZToxLzAsbWF4RGlzdGFuY2U6MCxwYXJ0aWFsTWF0Y2hlczowLHBlcmZlY3RNYXRjaGVzOjB9O3RoaXMuYmFzZUxvZ1ByZWZpeD0iW2Z1enp5LXNlYXJjaC1sZXZlbnNodGVpbl0iLHRoaXMubG9nZ2VyLnNldFByZWZpeCh0aGlzLmJhc2VMb2dQcmVmaXgpLHRoaXMuc2V0dXBNZXNzYWdlSGFuZGxlcigpfWdldFdvcmtlclR5cGUoKXtyZXR1cm4ibGV2ZW5zaHRlaW4ifWdldFNwZWNpZmljTWV0cmljcygpe3JldHVybnt0b3RhbENhbGN1bGF0aW9uczp0aGlzLmxldmVuc2h0ZWluU3RhdHMudG90YWxDYWxjdWxhdGlvbnMsdG90YWxEaXN0YW5jZUNhbGN1bGF0aW9uczp0aGlzLmxldmVuc2h0ZWluU3RhdHMudG90YWxEaXN0YW5jZUNhbGN1bGF0aW9ucyxhdmVyYWdlRGlzdGFuY2U6dGhpcy5sZXZlbnNodGVpblN0YXRzLmF2ZXJhZ2VEaXN0YW5jZSxtaW5EaXN0YW5jZTp0aGlzLmxldmVuc2h0ZWluU3RhdHMubWluRGlzdGFuY2UhPT0xLzA/dGhpcy5sZXZlbnNodGVpblN0YXRzLm1pbkRpc3RhbmNlOnZvaWQgMCxtYXhEaXN0YW5jZTp0aGlzLmxldmVuc2h0ZWluU3RhdHMubWF4RGlzdGFuY2UscGFydGlhbE1hdGNoZXM6dGhpcy5sZXZlbnNodGVpblN0YXRzLnBhcnRpYWxNYXRjaGVzLHBlcmZlY3RNYXRjaGVzOnRoaXMubGV2ZW5zaHRlaW5TdGF0cy5wZXJmZWN0TWF0Y2hlcyxkaXN0YW5jZURpc3RyaWJ1dGlvbjpPYmplY3QuZnJvbUVudHJpZXModGhpcy5kaXN0YW5jZURpc3RyaWJ1dGlvbiksc2ltaWxhcml0eVRocmVzaG9sZHM6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMscXVlcnlMZW5ndGhTdGF0czpPYmplY3QuZnJvbUVudHJpZXModGhpcy5xdWVyeUxlbmd0aFN0YXRzKX19cmVzZXRTdGF0cygpe3N1cGVyLnJlc2V0U3RhdHMoKSx0aGlzLmRpc3RhbmNlRGlzdHJpYnV0aW9uLmNsZWFyKCksdGhpcy5xdWVyeUxlbmd0aFN0YXRzLmNsZWFyKCksdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHM9e2Fib3ZlODA6MCxhYm92ZTYwOjAsYWJvdmU0MDowLGJlbG93NDA6MH0sdGhpcy5sZXZlbnNodGVpblN0YXRzPXt0b3RhbENhbGN1bGF0aW9uczowLHRvdGFsRGlzdGFuY2VDYWxjdWxhdGlvbnM6MCxhdmVyYWdlRGlzdGFuY2U6MCxtaW5EaXN0YW5jZToxLzAsbWF4RGlzdGFuY2U6MCxwYXJ0aWFsTWF0Y2hlczowLHBlcmZlY3RNYXRjaGVzOjB9LHRoaXMubG9nZ2VyLmluZm8oIlx1ezFGNENBfSBMZXZlbnNodGVpbiBXb3JrZXI6IEFsbCBzdGF0aXN0aWNzIGhhdmUgYmVlbiByZXNldCIpfXVwZGF0ZVNpbWlsYXJpdHlTdGF0cyhlKXtlPj0uOD90aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTgwKys6ZT49LjY/dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU2MCsrOmU+PS40P3RoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDArKzp0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5iZWxvdzQwKyt9c2V0dXBNZXNzYWdlSGFuZGxlcigpe3NlbGYub25tZXNzYWdlPWU9Pnt0aGlzLmhhbmRsZU1lc3NhZ2UoZSl9fWhhbmRsZU1lc3NhZ2UoZSl7bGV0IHQ9cGVyZm9ybWFuY2Uubm93KCkse2RhdGE6cn09ZTt0cnl7c3dpdGNoKHIudHlwZSl7Y2FzZSJwaW5nIjpzZWxmLnBvc3RNZXNzYWdlKHt0eXBlOiJwb25nIixpZDpyLmlkfSk7YnJlYWs7Y2FzZSJsZXZlbnNodGVpblNlYXJjaCI6dGhpcy5oYW5kbGVMZXZlbnNodGVpblNlYXJjaChyLHQpO2JyZWFrO2Nhc2UiZ2V0U3RhdHMiOnRoaXMuaGFuZGxlR2V0U3RhdHMocix0KTticmVhaztjYXNlInJlc2V0U3RhdHMiOnRoaXMuaGFuZGxlUmVzZXRTdGF0cyhyLHQpO2JyZWFrO2Nhc2Uic2V0TG9nTGV2ZWwiOnIubG9nTGV2ZWwhPT12b2lkIDAmJnRoaXMuc2V0TG9nTGV2ZWwoci5sb2dMZXZlbCksci53b3JrZXJJZCE9PXZvaWQgMCYmdGhpcy5zZXRXb3JrZXJJZChyLndvcmtlcklkKTticmVhaztkZWZhdWx0OnRoaXMuc2VuZEVycm9yKHIuaWQsYFVua25vd24gcmVxdWVzdCB0eXBlOiAke3IudHlwZX1gLHQpfX1jYXRjaChzKXt0aGlzLnNlbmRFcnJvcihyLmlkLHMgaW5zdGFuY2VvZiBFcnJvcj9zLm1lc3NhZ2U6U3RyaW5nKHMpLHQpfX1oYW5kbGVMZXZlbnNodGVpblNlYXJjaChlLHQpe2lmKHRoaXMubG9nZ2VyLmluZm8oYFx1ezFGNENGfSBMZXZlbnNodGVpbiBXb3JrZXI6IFN0YXJ0aW5nIHNlYXJjaCBmb3IgIiR7ZS5xdWVyeX0iIHdpdGggJHtlLml0ZW1zPy5sZW5ndGh8fDB9IGl0ZW1zYCksIShlLnF1ZXJ5JiZlLml0ZW1zJiZlLnNlYXJjaEZpZWxkcykpe3RoaXMuc2VuZEVycm9yKGUuaWQsIlF1ZXJ5LCBpdGVtcywgYW5kIHNlYXJjaEZpZWxkcyBhcmUgcmVxdWlyZWQgZm9yIGxldmVuc2h0ZWluU2VhcmNoIix0KTtyZXR1cm59bGV0e3F1ZXJ5OnIsaXRlbXM6cyxzZWFyY2hGaWVsZHM6bixvcHRpb25zOmN9PWU7dGhpcy5jdXJyZW50SXRlbXM9cyx0aGlzLmN1cnJlbnRTZWFyY2hGaWVsZHM9bix0aGlzLmxvZ2dlci5pbmZvKGBcdXsxRjRDRn0gTGV2ZW5zaHRlaW4gV29ya2VyOiBDb25maWd1cmF0aW9uIC0gcXVlcnk6ICIke3J9IiwgZmllbGRzOiBbJHtuLmpvaW4oIiwgIil9XSwgdGhyZXNob2xkOiAke2M/LmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8udGhyZXNob2xkPz9jPy50aHJlc2hvbGQ/P3AubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy50aHJlc2hvbGQ/Py4zfWApO2xldCBsPWM/LmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8udGhyZXNob2xkPz9jPy50aHJlc2hvbGQ/P3AubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy50aHJlc2hvbGQ/Py4zLGE9dGhpcy5jYWxjdWxhdGVTaW1pbGFyaXR5KHIsQXJyYXkuZnJvbSh7bGVuZ3RoOnMubGVuZ3RofSwoaCx1KT0+dSksY3x8e30sbCksbz1wZXJmb3JtYW5jZS5ub3coKS10O3RoaXMudXBkYXRlV29ya2VyU3RhdHMoImxldmVuc2h0ZWluU2VhcmNoIixvLHtxdWVyeUxlbmd0aDpyLmxlbmd0aCxpdGVtQ291bnQ6cy5sZW5ndGgscmVzdWx0Q291bnQ6YS5sZW5ndGgsdGhyZXNob2xkOmwsYXZlcmFnZURpc3RhbmNlOmEucmVkdWNlKChoLHUpPT5oKygxLXUuc2NvcmUpLDApLyhhLmxlbmd0aHx8MSl9KSxhLmZvckVhY2goaD0+e2gubWF0Y2hlZEZpZWxkcy5mb3JFYWNoKHU9Pnt0aGlzLnVwZGF0ZUZpZWxkU3RhdHModSxoLnNjb3JlKX0pfSk7bGV0IG09e3R5cGU6ImxldmVuc2h0ZWluU2VhcmNoIixpZDplLmlkLHJlc3VsdHM6YSxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpvLHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7dGhyZXNob2xkOmwsdG90YWxDYWxjdWxhdGlvbnM6YS5sZW5ndGgsYXZlcmFnZURpc3RhbmNlOmEucmVkdWNlKChoLHUpPT5oKygxLXUuc2NvcmUpLDApLyhhLmxlbmd0aHx8MSl9fTt0aGlzLmxvZ2dlci5pbmZvKGBcdTI2QTEgTGV2ZW5zaHRlaW4gV29ya2VyOiBDYWxjdWxhdGVkIHNpbWlsYXJpdHkgZm9yICR7cy5sZW5ndGh9IGl0ZW1zLCByZXR1cm5lZCAke2EubGVuZ3RofSByZXN1bHRzYCksdGhpcy5sb2dnZXIuaW5mbygiXHV7MUY0Q0F9IExldmVuc2h0ZWluIFdvcmtlcjogU2VuZGluZyB1bmlmaWVkIHJlc3BvbnNlIHdpdGggc3RhdHM6Iix7dG90YWxDYWxjdWxhdGlvbnM6bS5vcGVyYXRpb25NZXRhPy50b3RhbENhbGN1bGF0aW9ucyxhdmVyYWdlRGlzdGFuY2U6bS5vcGVyYXRpb25NZXRhPy5hdmVyYWdlRGlzdGFuY2Usc3RhdHNLZXlzOk9iamVjdC5rZXlzKG0uc3RhdHN8fHt9KSxwcm9jZXNzaW5nVGltZTptLnByb2Nlc3NpbmdUaW1lfSksc2VsZi5wb3N0TWVzc2FnZShtKSx0aGlzLnNlbmRTdGF0c1VwZGF0ZSgpfWhhbmRsZUdldFN0YXRzKGUsdCl7bGV0IHI9e3R5cGU6InN0YXRzIixpZDplLmlkLHN0YXRzOnRoaXMuZ2V0V29ya2VyU3RhdHMoKSxtZXRyaWNzOnRoaXMuZ2V0TWV0cmljcygpLHByb2Nlc3NpbmdUaW1lOnBlcmZvcm1hbmNlLm5vdygpLXQsd29ya2VyVHlwZTp0aGlzLmdldFdvcmtlclR5cGUoKSxvcGVyYXRpb25NZXRhOnt9fTtzZWxmLnBvc3RNZXNzYWdlKHIpfWhhbmRsZVJlc2V0U3RhdHMoZSx0KXt0aGlzLnJlc2V0U3RhdHMoKTtsZXQgcj17dHlwZToicmVzZXRTdGF0cyIsaWQ6ZS5pZCxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpwZXJmb3JtYW5jZS5ub3coKS10LHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7cmVzZXRDb21wbGV0ZWQ6ITB9fTtzZWxmLnBvc3RNZXNzYWdlKHIpfWNhbGN1bGF0ZVNpbWlsYXJpdHkoZSx0LHIscyl7dGhpcy5sb2dnZXIuaW5mbyhgXHV7MUY1MDR9IExldmVuc2h0ZWluIFdvcmtlcjogUHJvY2Vzc2luZyAke3QubGVuZ3RofSBjYW5kaWRhdGVzIHdpdGggdGhyZXNob2xkICR7c31gKTtsZXQgbj1bXSxjPXIuY2FzZVNlbnNpdGl2ZT9lOmUudG9Mb3dlckNhc2UoKSxsPXRoaXMuZ2V0UXVlcnlUb2tlbnMoZSxyKSxvPXRoaXMuZ2V0TXVsdGlUZXJtT3BlcmF0b3Iocik9PT0iYW5kIiYmbC5sZW5ndGg+MSxtPXIuc29ydEJ5fHxwLnNvcnRCeSxoPW09PT0icmVsZXZhbmNlIix1PWg/ci5sZXZlbnNodGVpbldvcmtlck9wdGlvbnM/LnJlbGV2YW5jZUZpZWxkV2VpZ2h0Pz9wLmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8ucmVsZXZhbmNlRmllbGRXZWlnaHQ/Py4xNTowLHg9aD9yLmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8ucGFydGlhbE1hdGNoQm9udXM/P3AubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5wYXJ0aWFsTWF0Y2hCb251cz8/LjE6MDtmb3IobGV0IGcgb2YgdCl7aWYoZz49dGhpcy5jdXJyZW50SXRlbXMubGVuZ3RoKWNvbnRpbnVlO2xldCBkPXRoaXMuY3VycmVudEl0ZW1zW2ddO2lmKG8mJiF0aGlzLml0ZW1NYXRjaGVzVG9rZW5zKGQsbCxyKSljb250aW51ZTtsZXQgUz0wLGY9MCx5PVtdLEM9W107Zm9yKGxldCBXIG9mIHRoaXMuY3VycmVudFNlYXJjaEZpZWxkcyl7bGV0IE09U3RyaW5nKGRbV10/PyIiKTtpZighTSljb250aW51ZTtsZXQgRj1yLmNhc2VTZW5zaXRpdmU/TTpNLnRvTG93ZXJDYXNlKCksUj10aGlzLmNhbGN1bGF0ZUxldmVuc2h0ZWluU2ltaWxhcml0eShjLEYscik7dGhpcy5sZXZlbnNodGVpblN0YXRzLnRvdGFsQ2FsY3VsYXRpb25zKys7bGV0IEQ9ci5jdXN0b21XZWlnaHRzPy5bV10/PzEsdj1SKkQ7Qy5wdXNoKHYpLHY+MCYmeS5wdXNoKFcpLFI+ZiYmKGY9Uiksdj5TJiYoUz12KX1sZXQgdz1TO2gmJnkubGVuZ3RoPjAmJih3PVMreS5sZW5ndGgqdSt4KSx3Pj1zJiZuLnB1c2goe2l0ZW06ZCxzY29yZTp3LGJhc2VTY29yZTpmLG1hdGNoZWRGaWVsZHM6eSxvcmlnaW5hbEluZGV4Omd9KX1sZXQgUD1yLnNvcnRPcmRlcnx8cC5zb3J0T3JkZXIsYjttPT09InJlbGV2YW5jZSI/Yj1uLnNvcnQoKGcsZCk9PlA9PT0iYXNjIj9nLnNjb3JlLWQuc2NvcmU6ZC5zY29yZS1nLnNjb3JlKTptPT09Im9yaWdpbmFsIj9iPW4uc29ydCgoZyxkKT0+e2xldCBTPWcub3JpZ2luYWxJbmRleD8/MCxmPWQub3JpZ2luYWxJbmRleD8/MDtyZXR1cm4gUD09PSJhc2MiP1MtZjpmLVN9KTpiPW4uc29ydCgoZyxkKT0+UD09PSJhc2MiP2cuc2NvcmUtZC5zY29yZTpkLnNjb3JlLWcuc2NvcmUpO2xldCBPPXIubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5tYXhSZXN1bHRzO3JldHVybiB0eXBlb2YgTz09Im51bWJlciI/Yi5zbGljZSgwLE8pOmJ9Z2V0TXVsdGlUZXJtT3BlcmF0b3IoZSl7cmV0dXJuIGUubXVsdGlUZXJtT3BlcmF0b3I/P3AubXVsdGlUZXJtT3BlcmF0b3I/PyJvciJ9Z2V0UXVlcnlUb2tlbnMoZSx0KXtyZXR1cm4odC5jYXNlU2Vuc2l0aXZlP2U6ZS50b0xvd2VyQ2FzZSgpKS5zcGxpdCgvXHMrLykuZmlsdGVyKHM9PnMubGVuZ3RoPjApfWl0ZW1NYXRjaGVzVG9rZW5zKGUsdCxyKXtpZih0Lmxlbmd0aD09PTApcmV0dXJuITA7bGV0IHM9bmV3IFNldCh0KTtmb3IobGV0IG4gb2YgdGhpcy5jdXJyZW50U2VhcmNoRmllbGRzKXtpZihzLnNpemU9PT0wKWJyZWFrO2xldCBjPVN0cmluZyhlW25dPz8iIik7aWYoIWMpY29udGludWU7bGV0IGw9ci5jYXNlU2Vuc2l0aXZlP2M6Yy50b0xvd2VyQ2FzZSgpO2ZvcihsZXQgYSBvZiB0KWlmKHMuaGFzKGEpJiZsLmluY2x1ZGVzKGEpJiYocy5kZWxldGUoYSkscy5zaXplPT09MCkpYnJlYWt9cmV0dXJuIHMuc2l6ZT09PTB9Y2FsY3VsYXRlTGV2ZW5zaHRlaW5TaW1pbGFyaXR5KGUsdCxyKXtpZihlPT09dClyZXR1cm4gdGhpcy5sZXZlbnNodGVpblN0YXRzLnBlcmZlY3RNYXRjaGVzKyssMTtpZihlLmxlbmd0aD09PTApcmV0dXJuIHQubGVuZ3RoPT09MD8xOjA7aWYodC5sZW5ndGg9PT0wKXJldHVybiAwO2xldCBzPU1hdGguYWJzKGUubGVuZ3RoLXQubGVuZ3RoKSxuPU1hdGgubWF4KGUubGVuZ3RoLHQubGVuZ3RoKSxjPXIubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5sZW5ndGhEaWZmUGVuYWx0eXx8cC5sZXZlbnNodGVpbldvcmtlck9wdGlvbnM/Lmxlbmd0aERpZmZQZW5hbHR5fHwxLGw9MS1zL24qYyxhPXIubGV2ZW5zaHRlaW5Xb3JrZXJPcHRpb25zPy5sZW5ndGhTaW1pbGFyaXR5VGhyZXNob2xkfHxwLmxldmVuc2h0ZWluV29ya2VyT3B0aW9ucz8ubGVuZ3RoU2ltaWxhcml0eVRocmVzaG9sZHx8LjE7aWYobDxhKXJldHVybiAwO2xldCBvPXRoaXMubGV2ZW5zaHRlaW5EaXN0YW5jZShlLHQpLG09MS1vL247dGhpcy5sZXZlbnNodGVpblN0YXRzLnRvdGFsRGlzdGFuY2VDYWxjdWxhdGlvbnMrPTEsdGhpcy5sZXZlbnNodGVpblN0YXRzLm1pbkRpc3RhbmNlPU1hdGgubWluKHRoaXMubGV2ZW5zaHRlaW5TdGF0cy5taW5EaXN0YW5jZSxvKSx0aGlzLmxldmVuc2h0ZWluU3RhdHMubWF4RGlzdGFuY2U9TWF0aC5tYXgodGhpcy5sZXZlbnNodGVpblN0YXRzLm1heERpc3RhbmNlLG8pO2xldCBoPXRoaXMuZGlzdGFuY2VEaXN0cmlidXRpb24uZ2V0KG8pfHwwO3RoaXMuZGlzdGFuY2VEaXN0cmlidXRpb24uc2V0KG8saCsxKTtsZXQgdT10aGlzLmxldmVuc2h0ZWluU3RhdHMudG90YWxEaXN0YW5jZUNhbGN1bGF0aW9ucyx4PXRoaXMubGV2ZW5zaHRlaW5TdGF0cy5hdmVyYWdlRGlzdGFuY2U7cmV0dXJuIHRoaXMubGV2ZW5zaHRlaW5TdGF0cy5hdmVyYWdlRGlzdGFuY2U9KHgqKHUtMSkrbykvdSx0aGlzLnVwZGF0ZVNpbWlsYXJpdHlTdGF0cyhtKSx0LmluY2x1ZGVzKGUpJiZ0aGlzLmxldmVuc2h0ZWluU3RhdHMucGFydGlhbE1hdGNoZXMrKyxNYXRoLm1heCgwLG0pfWxldmVuc2h0ZWluRGlzdGFuY2UoZSx0KXtsZXQgcj1bXTtmb3IobGV0IHM9MDtzPD10Lmxlbmd0aDtzKyspcltzXT1bc107Zm9yKGxldCBzPTA7czw9ZS5sZW5ndGg7cysrKXJbMF1bc109cztmb3IobGV0IHM9MTtzPD10Lmxlbmd0aDtzKyspZm9yKGxldCBuPTE7bjw9ZS5sZW5ndGg7bisrKXQuY2hhckF0KHMtMSk9PT1lLmNoYXJBdChuLTEpP3Jbc11bbl09cltzLTFdW24tMV06cltzXVtuXT1NYXRoLm1pbihyW3MtMV1bbi0xXSsxLHJbc11bbi0xXSsxLHJbcy0xXVtuXSsxKTtyZXR1cm4gclt0Lmxlbmd0aF1bZS5sZW5ndGhdfWdlbmVyYXRlUGVyZm9ybWFuY2VJbnNpZ2h0cygpe2lmKHRoaXMucGVyZm9ybWFuY2VIaXN0b3J5Lmxlbmd0aD09PTApcmV0dXJue3JlY2VudEF2ZXJhZ2VQcm9jZXNzaW5nVGltZTowLHJlY2VudEF2ZXJhZ2VSZXN1bHRDb3VudDowLHRocm91Z2hwdXRQZXJTZWNvbmQ6MCx0b3RhbEhpc3RvcnlFbnRyaWVzOjAsbW9zdENvbW1vblF1ZXJ5TGVuZ3RoOjAsYmVzdFBlcmZvcm1pbmdGaWVsZDoiIixzaW1pbGFyaXR5RGlzdHJpYnV0aW9uOntoaWdoU2ltaWxhcml0eTowLG1lZGl1bVNpbWlsYXJpdHk6MCxsb3dTaW1pbGFyaXR5OjAsdmVyeUxvd1NpbWlsYXJpdHk6MH19O2xldCBlPXRoaXMucGVyZm9ybWFuY2VIaXN0b3J5LnNsaWNlKC0xMCksdD1lLnJlZHVjZSgocyxuKT0+cytuLnByb2Nlc3NpbmdUaW1lLDApL2UubGVuZ3RoLHI9ZS5yZWR1Y2UoKHMsbik9PnMrbi5yZXN1bHRDb3VudCwwKS9lLmxlbmd0aDtyZXR1cm57cmVjZW50QXZlcmFnZVByb2Nlc3NpbmdUaW1lOnQscmVjZW50QXZlcmFnZVJlc3VsdENvdW50OnIsdGhyb3VnaHB1dFBlclNlY29uZDplLmxlbmd0aD4wPzFlMy90OjAsdG90YWxIaXN0b3J5RW50cmllczp0aGlzLnBlcmZvcm1hbmNlSGlzdG9yeS5sZW5ndGgsbW9zdENvbW1vblF1ZXJ5TGVuZ3RoOnRoaXMuZ2V0TW9zdENvbW1vblF1ZXJ5TGVuZ3RoKCksYmVzdFBlcmZvcm1pbmdGaWVsZDp0aGlzLmdldEJlc3RQZXJmb3JtaW5nRmllbGQoKSxzaW1pbGFyaXR5RGlzdHJpYnV0aW9uOntoaWdoU2ltaWxhcml0eTp0aGlzLnNpbWlsYXJpdHlUaHJlc2hvbGRTdGF0cy5hYm92ZTgwLG1lZGl1bVNpbWlsYXJpdHk6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYWJvdmU2MCxsb3dTaW1pbGFyaXR5OnRoaXMuc2ltaWxhcml0eVRocmVzaG9sZFN0YXRzLmFib3ZlNDAsdmVyeUxvd1NpbWlsYXJpdHk6dGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkU3RhdHMuYmVsb3c0MH19fWdldE1vc3RDb21tb25RdWVyeUxlbmd0aCgpe2xldCBlPTAsdD0wO3JldHVybiB0aGlzLnF1ZXJ5TGVuZ3RoU3RhdHMuZm9yRWFjaCgocixzKT0+e3IuY291bnQ+ZSYmKGU9ci5jb3VudCx0PXMpfSksdH1nZXRCZXN0UGVyZm9ybWluZ0ZpZWxkKCl7bGV0IGU9IiIsdD0wO3JldHVybiB0aGlzLmZpZWxkU3RhdHMuZm9yRWFjaCgocixzKT0+e3IuYXZlcmFnZVNjb3JlPnQmJih0PXIuYXZlcmFnZVNjb3JlLGU9cyl9KSxlfXNlbmRFcnJvcihlLHQscil7dGhpcy51cGRhdGVTdGF0cyhwZXJmb3JtYW5jZS5ub3coKS1yLCExKTtsZXQgcz17dHlwZToiZXJyb3IiLGlkOmUsZXJyb3I6dCxzdGF0czp0aGlzLmdldFdvcmtlclN0YXRzKCksbWV0cmljczp0aGlzLmdldE1ldHJpY3MoKSxwcm9jZXNzaW5nVGltZTpwZXJmb3JtYW5jZS5ub3coKS1yLHdvcmtlclR5cGU6dGhpcy5nZXRXb3JrZXJUeXBlKCksb3BlcmF0aW9uTWV0YTp7fX07c2VsZi5wb3N0TWVzc2FnZShzKX19O25ldyBMOwo=", import.meta.url), a = l.workerUrls?.levenshteinWorker ? new URL(l.workerUrls.levenshteinWorker, window.location.origin) : t;
326
- this.logger.debug("🔧 Global Levenshtein Worker URL:", a.toString()), this.levenshteinWorker = new Worker(a, { type: "module" }), this.logger.info("🔧 Global Levenshtein Worker: Initialized successfully");
353
+ let s = t.workerUrls?.levenshteinWorker ? new URL(t.workerUrls.levenshteinWorker, window.location.origin) : ce(r, "levenshteinWorker");
354
+ s ? (this.logger.debug("🔧 Global Levenshtein Worker URL:", s.toString()), this.levenshteinWorker = new Worker(s, { type: "module" }), this.logger.info("🔧 Global Levenshtein Worker: Initialized successfully")) : this.logger.warn("⚠️ Global Levenshtein Worker: default worker URL cannot be resolved in a CJS build. Specify options.workerUrls.levenshteinWorker explicitly.");
327
355
  }
328
- } catch (t) {
329
- this.logger.warn("⚠️ Failed to initialize global Workers:", t);
356
+ } catch (s) {
357
+ this.logger.warn("⚠️ Failed to initialize global Workers:", s);
330
358
  }
331
359
  }
332
360
  releaseReference() {
333
361
  this.referenceCount--, this.logger.debug(`🔧 Worker reference released (ref count: ${this.referenceCount})`);
334
362
  }
335
363
  dispose() {
336
- this.indexWorker && (this.indexWorker.terminate(), this.indexWorker = null), this.levenshteinWorker && (this.levenshteinWorker.terminate(), this.levenshteinWorker = null), this.initializationPromise = null, this.referenceCount = 0, this.logger.info("🔧 Global Workers disposed");
364
+ this.indexWorker && (this.indexWorker.terminate(), this.indexWorker = null), this.levenshteinWorker && (this.levenshteinWorker.terminate(), this.levenshteinWorker = null), this.initializationPromise = null, this.referenceCount = 0, this.lastIndexedDataHash = null, this.lastLevenshteinDataHash = null, this.logger.info("🔧 Global Workers disposed");
337
365
  }
338
366
  };
339
- me.instances = /* @__PURE__ */ new Map();
340
- var Q = me, pe = class {
367
+ fe.instances = /* @__PURE__ */ new Map();
368
+ var M = fe, Ie = class {
341
369
  constructor() {
342
370
  this.listeners = /* @__PURE__ */ new Map(), this.logger = new ee(2);
343
371
  }
344
372
  setLogger(e) {
345
373
  this.logger = e;
346
374
  }
347
- on(e, l) {
348
- this.listeners.has(e) || this.listeners.set(e, /* @__PURE__ */ new Set()), this.listeners.get(e)?.add(l);
375
+ on(e, t) {
376
+ this.listeners.has(e) || this.listeners.set(e, /* @__PURE__ */ new Set()), this.listeners.get(e)?.add(t);
349
377
  }
350
- off(e, l) {
351
- let t = this.listeners.get(e);
352
- t && t.delete(l);
378
+ off(e, t) {
379
+ let r = this.listeners.get(e);
380
+ r && r.delete(t);
353
381
  }
354
- emit(e, l) {
355
- let t = this.listeners.get(e);
356
- t && t.forEach((a) => {
382
+ emit(e, t) {
383
+ let r = this.listeners.get(e);
384
+ r && r.forEach((s) => {
357
385
  try {
358
- a(l);
359
- } catch (r) {
360
- this.logger.error(`❌ Error in event listener for ${e}:`, r);
386
+ s(t);
387
+ } catch (a) {
388
+ this.logger.error(`❌ Error in event listener for ${e}:`, a);
361
389
  }
362
390
  });
363
391
  }
364
392
  removeAllListeners() {
365
393
  this.listeners.clear();
366
394
  }
367
- }, We = class {
368
- constructor(e = _) {
369
- this.defaultOptions = e, this.indexWorker = null, this.levenshteinWorker = null, this.searchHistory = [], this.learningData = { fieldWeights: {}, queryPatterns: {}, userPreferences: { preferredThreshold: 0.4, frequentFields: [], searchStyle: "fuzzy", lastUsedOptions: {} }, performanceMetrics: { averageSearchTime: {}, indexBuildTime: 0 } }, this.requestId = 0, this.pendingRequests = /* @__PURE__ */ new Map(), this.eventEmitter = new pe(), this.isIndexBuilt = !1, this.lastIndexedDataHash = null, this.stats = { totalSearches: 0, averageSearchTime: 0, popularQueries: [], performanceBySize: {}, workers: { index: { stats: {} }, levenshtein: { stats: {} } } }, this.isDisposed = !1;
370
- let l = "[fuzzy-search]";
371
- e.instanceName ? l = `[fuzzy-search:${e.instanceName}]` : e.workerId && (l = `[fuzzy-search:${e.workerId}]`), this.logger = new ee(e.logLevel ?? 2, l, e.logger ?? console), this.eventEmitter.setLogger(this.logger), this.handleIndexWorkerMessageBound = this.handleIndexWorkerMessage.bind(this), this.handleIndexWorkerErrorBound = this.handleIndexWorkerError.bind(this), this.handleLevenshteinWorkerMessageBound = this.handleLevenshteinWorkerMessage.bind(this), this.handleLevenshteinWorkerErrorBound = this.handleLevenshteinWorkerError.bind(this), this.loadLearningData(), this.workersInitialized = this.initializeWorkers(), setInterval(() => this.cleanupPendingRequests(), 3e4);
395
+ }, Le = class {
396
+ constructor(e = {}) {
397
+ this.indexWorker = null, this.levenshteinWorker = null, this.searchHistory = [], this.learningData = { fieldWeights: {}, queryPatterns: {}, userPreferences: { preferredThreshold: 0.4, frequentFields: [], searchStyle: "fuzzy", lastUsedOptions: {} }, performanceMetrics: { averageSearchTime: {}, indexBuildTime: 0 } }, this.instanceId = `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 8)}`, this.requestId = 0, this.pendingRequests = /* @__PURE__ */ new Map(), this.eventEmitter = new Ie(), this.isIndexBuilt = !1, this.lastIndexedDataHash = null, this.stats = { totalSearches: 0, averageSearchTime: 0, popularQueries: [], performanceBySize: {}, workers: { index: { stats: {} }, levenshtein: { stats: {} } } }, this.isDisposed = !1, this.cleanupTimerId = null, this.defaultOptions = { ..._, ...e, indexWorkerOptions: { ..._.indexWorkerOptions, ...e.indexWorkerOptions }, levenshteinWorkerOptions: { ..._.levenshteinWorkerOptions, ...e.levenshteinWorkerOptions } }, e.threshold !== void 0 && (e.levenshteinWorkerOptions || (this.defaultOptions.levenshteinWorkerOptions = { ...this.defaultOptions.levenshteinWorkerOptions, threshold: e.threshold }), e.indexWorkerOptions || (this.defaultOptions.indexWorkerOptions = { ...this.defaultOptions.indexWorkerOptions, threshold: e.threshold }));
398
+ let t = this.defaultOptions, r = "[fuzzy-search]";
399
+ t.instanceName ? r = `[fuzzy-search:${t.instanceName}]` : t.workerId && (r = `[fuzzy-search:${t.workerId}]`), this.logger = new ee(t.logLevel ?? 2, r, t.logger ?? console), this.eventEmitter.setLogger(this.logger), this.handleIndexWorkerMessageBound = this.handleIndexWorkerMessage.bind(this), this.handleIndexWorkerErrorBound = this.handleIndexWorkerError.bind(this), this.handleLevenshteinWorkerMessageBound = this.handleLevenshteinWorkerMessage.bind(this), this.handleLevenshteinWorkerErrorBound = this.handleLevenshteinWorkerError.bind(this), this.loadLearningData(), this.workersInitialized = this.initializeWorkers(), this.cleanupTimerId = setInterval(() => this.cleanupPendingRequests(), 3e4);
372
400
  }
373
401
  async initializeWorkers() {
374
402
  if (!(typeof Worker > "u")) try {
375
- let e = await Q.getInstance(this.defaultOptions.workerId).getWorkers(this.defaultOptions);
403
+ let e = await M.getInstance(this.defaultOptions.workerId).getWorkers(this.defaultOptions);
376
404
  if (this.isDisposed) {
377
405
  this.logger.debug("🔧 Manager disposed before worker initialization completed");
378
406
  return;
379
407
  }
380
- this.indexWorker = e.indexWorker, this.levenshteinWorker = e.levenshteinWorker, this.indexWorker && (this.indexWorker.addEventListener("message", this.handleIndexWorkerMessageBound), this.indexWorker.addEventListener("error", this.handleIndexWorkerErrorBound), this.indexWorker.addEventListener("error", (l) => {
381
- this.logger.error("🔧 Index Worker Error (Event Listener):", l);
382
- })), this.levenshteinWorker && (this.levenshteinWorker.addEventListener("message", this.handleLevenshteinWorkerMessageBound), this.levenshteinWorker.addEventListener("error", this.handleLevenshteinWorkerErrorBound), this.levenshteinWorker.addEventListener("error", (l) => {
383
- this.logger.error("🔧 Levenshtein Worker Error (Event Listener):", l);
408
+ this.indexWorker = e.indexWorker, this.levenshteinWorker = e.levenshteinWorker, this.indexWorker && (this.indexWorker.addEventListener("message", this.handleIndexWorkerMessageBound), this.indexWorker.addEventListener("error", this.handleIndexWorkerErrorBound), this.indexWorker.addEventListener("error", (t) => {
409
+ this.logger.error("🔧 Index Worker Error (Event Listener):", t);
410
+ })), this.levenshteinWorker && (this.levenshteinWorker.addEventListener("message", this.handleLevenshteinWorkerMessageBound), this.levenshteinWorker.addEventListener("error", this.handleLevenshteinWorkerErrorBound), this.levenshteinWorker.addEventListener("error", (t) => {
411
+ this.logger.error("🔧 Levenshtein Worker Error (Event Listener):", t);
384
412
  })), this.eventEmitter.emit("workers:initialized", { indexWorker: !!this.indexWorker, levenshteinWorker: !!this.levenshteinWorker }), await this.testWorkerConnectivity();
385
413
  } catch (e) {
386
414
  this.logger.warn("⚠️ Failed to initialize Workers:", e);
@@ -394,39 +422,42 @@ var Q = me, pe = class {
394
422
  this.logger.error("🔧 Worker connectivity test failed:", e);
395
423
  }
396
424
  }
397
- async pingWorker(e, l) {
398
- let t = `ping-${l}-${Date.now()}`;
399
- await new Promise((a, r) => {
400
- let d = setTimeout(() => {
401
- this.logger.warn(`🔧 ${l === "index" ? "Index" : "Levenshtein"} Worker: Ping timeout`), e.removeEventListener("message", n), r(new Error(`${l === "index" ? "Index" : "Levenshtein"} Worker ping timeout`));
402
- }, 5e3), n = (c) => {
403
- let b = c.data;
404
- b.type === "pong" && b.id === t && (clearTimeout(d), e.removeEventListener("message", n), this.logger.debug(`🔧 ${l === "index" ? "Index" : "Levenshtein"} Worker: Ping successful`), a());
425
+ async pingWorker(e, t) {
426
+ let r = `ping-${t}-${this.instanceId}-${Date.now()}`;
427
+ await new Promise((s, a) => {
428
+ let o = setTimeout(() => {
429
+ this.logger.warn(`🔧 ${t === "index" ? "Index" : "Levenshtein"} Worker: Ping timeout`), e.removeEventListener("message", n), a(new Error(`${t === "index" ? "Index" : "Levenshtein"} Worker ping timeout`));
430
+ }, 5e3), n = (l) => {
431
+ let d = l.data;
432
+ d.type === "pong" && d.id === r && (clearTimeout(o), e.removeEventListener("message", n), this.logger.debug(`🔧 ${t === "index" ? "Index" : "Levenshtein"} Worker: Ping successful`), s());
405
433
  };
406
- e.addEventListener("message", n), this.logger.debug(`🔧 ${l === "index" ? "Index" : "Levenshtein"} Worker: Sending ping message:`, t), e.postMessage({ type: "ping", id: t });
434
+ e.addEventListener("message", n), this.logger.debug(`🔧 ${t === "index" ? "Index" : "Levenshtein"} Worker: Sending ping message:`, r), e.postMessage({ type: "ping", id: r });
407
435
  });
408
436
  }
409
437
  handleIndexWorkerMessage(e) {
410
- let l = e.data;
411
- if (this.logger.debug("🔧 Index Worker message received:", l.type, l), l.type === "indexSearchResults") {
412
- let t = this.pendingRequests.get(l.id);
413
- t && (this.pendingRequests.delete(l.id), l.error ? t.reject(new Error(l.error)) : t.resolve(l.results || [])), this.eventEmitter.emit("indexWorker:searchCompleted", { requestId: l.id, resultsCount: l.results?.length || 0, processingTime: l.processingTime });
414
- } else if (l.type === "error") {
415
- let t = this.pendingRequests.get(l.id);
416
- t && (this.pendingRequests.delete(l.id), t.reject(new Error(l.error || "Index Worker error"))), this.logger.error("❌ Index Worker reported error:", { requestId: l.id, message: l.error, processingTime: l.processingTime }), this.eventEmitter.emit("indexWorker:error", { requestId: l.id, error: l.error, processingTime: l.processingTime });
417
- } else l.type === "indexReady" ? (this.logger.info("✅ Index Worker: Index ready notification received", l), l.stats && (this.stats.workers.index.stats = l.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "index", stats: this.stats.workers.index.stats })), this.eventEmitter.emit("indexWorker:message", l)) : l.type === "pong" || l.type === "stats" && l.stats && (this.stats.workers.index.stats = l.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "index", stats: this.stats.workers.index.stats }));
418
- this.eventEmitter.emit("indexWorker:message", l);
438
+ let t = e.data;
439
+ if (this.logger.debug("🔧 Index Worker message received:", t.type, t), t.type === "indexSearchResults") {
440
+ let r = this.pendingRequests.get(t.id);
441
+ r && (this.pendingRequests.delete(t.id), t.error ? r.reject(new Error(t.error)) : r.resolve(t.results || [])), t.stats && (this.stats.workers.index.stats = t.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "index", stats: this.stats.workers.index.stats })), this.eventEmitter.emit("indexWorker:searchCompleted", { requestId: t.id, resultsCount: t.results?.length || 0, processingTime: t.processingTime });
442
+ } else if (t.type === "error") {
443
+ let r = this.pendingRequests.get(t.id);
444
+ r && (this.pendingRequests.delete(t.id), r.reject(new Error(t.error || "Index Worker error"))), this.logger.error("❌ Index Worker reported error:", { requestId: t.id, message: t.error, processingTime: t.processingTime }), this.eventEmitter.emit("indexWorker:error", { requestId: t.id, error: t.error, processingTime: t.processingTime });
445
+ } else t.type === "indexReady" ? (this.logger.info("✅ Index Worker: Index ready notification received", t), t.stats && (this.stats.workers.index.stats = t.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "index", stats: this.stats.workers.index.stats }))) : t.type === "pong" || t.type === "stats" && t.stats && (this.stats.workers.index.stats = t.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "index", stats: this.stats.workers.index.stats }));
446
+ this.eventEmitter.emit("indexWorker:message", t);
419
447
  }
420
448
  handleIndexWorkerError(e) {
421
449
  this.logger.error("🔧 Index Worker Error:", { message: e.message, filename: e.filename, lineno: e.lineno, colno: e.colno, error: e.error, type: e.type }), this.eventEmitter.emit("indexWorker:error", e);
422
450
  }
423
451
  handleLevenshteinWorkerMessage(e) {
424
- let l = e.data;
425
- if (this.logger.debug("🔧 Levenshtein Worker message received:", l.type, "stats present:", !!l.stats), l.type === "levenshteinSearch") {
426
- let t = this.pendingRequests.get(l.id);
427
- t && (this.pendingRequests.delete(l.id), l.error ? t.reject(new Error(l.error)) : t.resolve(l.results || [])), l.stats && (this.stats.workers.levenshtein.stats = l.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "levenshtein", stats: this.stats.workers.levenshtein.stats })), this.eventEmitter.emit("levenshteinWorker:searchCompleted", { requestId: l.id, processingTime: l.processingTime, workerType: l.workerType, operationMeta: l.operationMeta });
428
- } else l.type === "pong" || l.type === "stats" && l.stats && (this.stats.workers.levenshtein.stats = l.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "levenshtein", stats: this.stats.workers.levenshtein.stats }));
429
- this.eventEmitter.emit("levenshteinWorker:message", l);
452
+ let t = e.data;
453
+ if (this.logger.debug("🔧 Levenshtein Worker message received:", t.type, "stats present:", !!t.stats), t.type === "levenshteinSearch") {
454
+ let r = this.pendingRequests.get(t.id);
455
+ r && (this.pendingRequests.delete(t.id), t.error ? r.reject(new Error(t.error)) : r.resolve(t.results || [])), t.stats && (this.stats.workers.levenshtein.stats = t.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "levenshtein", stats: this.stats.workers.levenshtein.stats })), this.eventEmitter.emit("levenshteinWorker:searchCompleted", { requestId: t.id, processingTime: t.processingTime, workerType: t.workerType, operationMeta: t.operationMeta });
456
+ } else if (t.type === "error") {
457
+ let r = this.pendingRequests.get(t.id);
458
+ r && (this.pendingRequests.delete(t.id), r.reject(new Error(t.error || "Levenshtein Worker error"))), this.logger.error("❌ Levenshtein Worker reported error:", { requestId: t.id, message: t.error, processingTime: t.processingTime }), this.eventEmitter.emit("levenshteinWorker:error", { requestId: t.id, error: t.error, processingTime: t.processingTime });
459
+ } else t.type === "pong" || t.type === "stats" && t.stats && (this.stats.workers.levenshtein.stats = t.stats, this.eventEmitter.emit("worker:statsUpdated", { worker: "levenshtein", stats: this.stats.workers.levenshtein.stats }));
460
+ this.eventEmitter.emit("levenshteinWorker:message", t);
430
461
  }
431
462
  handleLevenshteinWorkerError(e) {
432
463
  this.logger.error("🔧 Levenshtein Worker Error:", { message: e.message, filename: e.filename, lineno: e.lineno, colno: e.colno, error: e.error, type: e.type }), this.eventEmitter.emit("levenshteinWorker:error", e);
@@ -442,7 +473,10 @@ var Q = me, pe = class {
442
473
  try {
443
474
  if (this.isLocalStorageAvailable()) {
444
475
  let e = localStorage.getItem("fuzzy-search-learning-data");
445
- e ? this.learningData = JSON.parse(e) : this.initializeDefaultLearningData();
476
+ if (e) {
477
+ let t = JSON.parse(e);
478
+ t && typeof t == "object" && t.queryPatterns && typeof t.queryPatterns == "object" && t.userPreferences && t.performanceMetrics && typeof t.performanceMetrics.averageSearchTime == "object" ? this.learningData = t : (this.logger.warn("⚠️ Stored learning data has an unexpected shape. Reinitializing with defaults."), this.initializeDefaultLearningData());
479
+ } else this.initializeDefaultLearningData();
446
480
  } else this.initializeDefaultLearningData();
447
481
  } catch (e) {
448
482
  this.logger.warn("⚠️ Failed to load learning data:", e), this.initializeDefaultLearningData();
@@ -458,37 +492,38 @@ var Q = me, pe = class {
458
492
  this.logger.warn("⚠️ Failed to save learning data:", e);
459
493
  }
460
494
  }
461
- async search(e, l, t, a) {
462
- let r = performance.now(), d = { ...this.defaultOptions, ...a };
463
- a?.threshold !== void 0 && (a.levenshteinWorkerOptions || (d.levenshteinWorkerOptions = { ...d.levenshteinWorkerOptions, threshold: a.threshold }), a.indexWorkerOptions || (d.indexWorkerOptions = { ...d.indexWorkerOptions, threshold: a.threshold })), this.logger.debug(`🚀 FuzzySearchManager.search called: query="${e}", items.length=${l.length}`), this.eventEmitter.emit("search:start", { query: e, options: d });
495
+ async search(e, t, r, s) {
496
+ if (!e.trim()) return this.logger.debug("🚫 search skipped for empty query"), [];
497
+ let a = performance.now(), o = { ...this.defaultOptions, ...s };
498
+ s?.threshold !== void 0 && (s.levenshteinWorkerOptions || (o.levenshteinWorkerOptions = { ...o.levenshteinWorkerOptions, threshold: s.threshold }), s.indexWorkerOptions || (o.indexWorkerOptions = { ...o.indexWorkerOptions, threshold: s.threshold })), this.logger.debug(`🚀 FuzzySearchManager.search called: query="${e}", items.length=${t.length}`), this.eventEmitter.emit("search:start", { query: e, options: o });
464
499
  try {
465
500
  if (await this.workersInitialized, this.isDisposed) return this.logger.debug("🚫 search skipped because manager is disposed"), [];
466
- let n = this.generateDataHash(l, t), c = Q.getInstance(this.defaultOptions.workerId), b = c.getLastIndexedDataHash();
467
- if (b !== n) {
468
- let o = c.getBuildingPromise(n);
469
- if (o) this.logger.debug("🔧 Index build already in progress globally, waiting..."), await o, this.isIndexBuilt = !0, this.lastIndexedDataHash = n;
501
+ let n = this.generateDataHash(t, r), l = M.getInstance(this.defaultOptions.workerId), d = l.getLastIndexedDataHash();
502
+ if (d !== n) {
503
+ let m = l.getBuildingPromise(n);
504
+ if (m) this.logger.debug("🔧 Index build already in progress globally, waiting..."), await m, this.isIndexBuilt = !0, this.lastIndexedDataHash = n;
470
505
  else {
471
- this.logger.debug(`🔧 Building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${b !== n}`);
472
- let Z = (async () => {
473
- await this.buildIndex(l, t, d), this.isIndexBuilt = !0, this.lastIndexedDataHash = n, c.setLastIndexedDataHash(n);
506
+ this.logger.debug(`🔧 Building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${d !== n}`);
507
+ let h = (async () => {
508
+ await this.buildIndex(t, r, o), this.isIndexBuilt = !0, this.lastIndexedDataHash = n, l.setLastIndexedDataHash(n);
474
509
  })();
475
- c.setBuildingPromise(n, Z), await Z;
510
+ l.setBuildingPromise(n, h), await h;
476
511
  }
477
512
  } else this.isIndexBuilt ? this.logger.debug("🔧 Index already built for current data, skipping rebuild") : (this.logger.debug("🔧 Index already built globally for current data, skipping rebuild"), this.isIndexBuilt = !0, this.lastIndexedDataHash = n);
478
513
  if (!(this.indexWorker && this.levenshteinWorker)) {
479
514
  if (this.isDisposed) return this.logger.debug("🚫 search skipped because manager is disposed"), [];
480
515
  throw new Error("Web Workers are not available or not initialized.");
481
516
  }
482
- let X = await this.searchParallel(e, l, t, d), m = performance.now() - r;
483
- this.updateStats(e, m), this.updateLearningData(e, l.length, m);
484
- let G = { results: X, totalItems: l.length, processingTime: m, query: e, options: d };
485
- return this.eventEmitter.emit("search:complete", G), X;
517
+ let p = await this.searchParallel(e, t, r, o, n), g = performance.now() - a;
518
+ this.updateStats(e, g), this.updateLearningData(e, t.length, g);
519
+ let x = { results: p, totalItems: t.length, processingTime: g, query: e, options: o };
520
+ return this.eventEmitter.emit("search:complete", x), p;
486
521
  } catch (n) {
487
- let c = n instanceof Error ? n : new Error("Unknown search error");
488
- throw this.eventEmitter.emit("search:error", { error: c, query: e }), c;
522
+ let l = n instanceof Error ? n : new Error("Unknown search error");
523
+ throw this.eventEmitter.emit("search:error", { error: l, query: e }), l;
489
524
  }
490
525
  }
491
- async buildIndex(e, l, t) {
526
+ async buildIndex(e, t, r) {
492
527
  if (this.isDisposed) {
493
528
  this.logger.debug("🚫 buildIndex skipped because manager is disposed");
494
529
  return;
@@ -500,107 +535,151 @@ var Q = me, pe = class {
500
535
  }
501
536
  throw new Error("Index Worker not available");
502
537
  }
503
- let a = `build-index-${++this.requestId}`;
504
- this.logger.debug(`📤 Building index: requestId=${a}`);
505
- let r = { type: "buildIndex", id: a, items: e, searchFields: l, options: t };
506
- return new Promise((d, n) => {
507
- let c = null, b = (m) => {
508
- let G = m;
509
- G.type === "indexReady" && G.id === a && (this.logger.info(`✅ Index Worker: Index built successfully (requestId=${a})`), this.logger.debug(`🎯 buildIndex: Match found! Resolving promise for requestId=${a}`), this.eventEmitter.off("indexWorker:message", b), this.eventEmitter.off("indexWorker:message", X), c && (clearTimeout(c), c = null), d());
510
- }, X = (m) => {
511
- let G = m;
512
- G.type === "error" && G.id === a && (this.logger.warn(`❌ buildIndex: Worker reported error for requestId=${a}`, G.error), this.eventEmitter.off("indexWorker:message", b), this.eventEmitter.off("indexWorker:message", X), c && (clearTimeout(c), c = null), n(new Error(G.error || "Index Worker error")));
538
+ let s = `build-index-${this.instanceId}-${++this.requestId}`;
539
+ this.logger.debug(`📤 Building index: requestId=${s}`);
540
+ let a = { type: "buildIndex", id: s, items: e, searchFields: t, options: this.toWorkerSafeOptions(r), dataHash: this.generateDataHash(e, t) };
541
+ return new Promise((o, n) => {
542
+ let l = null, d = (g) => {
543
+ let x = g;
544
+ x.type === "indexReady" && x.id === s && (this.logger.info(`✅ Index Worker: Index built successfully (requestId=${s})`), this.logger.debug(`🎯 buildIndex: Match found! Resolving promise for requestId=${s}`), this.eventEmitter.off("indexWorker:message", d), this.eventEmitter.off("indexWorker:message", p), l && (clearTimeout(l), l = null), o());
545
+ }, p = (g) => {
546
+ let x = g;
547
+ x.type === "error" && x.id === s && (this.logger.warn(`❌ buildIndex: Worker reported error for requestId=${s}`, x.error), this.eventEmitter.off("indexWorker:message", d), this.eventEmitter.off("indexWorker:message", p), l && (clearTimeout(l), l = null), n(new Error(x.error || "Index Worker error")));
513
548
  };
514
- this.eventEmitter.on("indexWorker:message", b), this.eventEmitter.on("indexWorker:message", X), this.indexWorker?.postMessage(r), c = setTimeout(() => {
515
- this.eventEmitter.off("indexWorker:message", b), this.eventEmitter.off("indexWorker:message", X), c = null, n(new Error("Index build timeout"));
549
+ this.eventEmitter.on("indexWorker:message", d), this.eventEmitter.on("indexWorker:message", p), this.indexWorker?.postMessage(a), l = setTimeout(() => {
550
+ this.eventEmitter.off("indexWorker:message", d), this.eventEmitter.off("indexWorker:message", p), l = null, n(new Error("Index build timeout"));
516
551
  }, 6e4);
517
552
  });
518
553
  }
519
- async searchParallel(e, l, t, a) {
554
+ async searchParallel(e, t, r, s, a) {
520
555
  if (this.isDisposed) return this.logger.debug("🚫 searchParallel skipped because manager is disposed"), [];
521
- this.logger.debug(`🌐 searchParallel: query="${e}", items.length=${l.length}`);
522
- let { enableIndexFiltering: r, enableLevenshtein: d } = a;
523
- if (!(r || d)) return this.logger.warn("⚠️ Both search stages are disabled. Returning empty results."), [];
524
- let n = r ? this.runIndexStage(e, l, t, a) : Promise.resolve({ stage: "index", results: [], processingTime: 0, confidence: 0, candidatesProcessed: 0 }), c = d ? this.runLevenshteinStage(e, l, t, a) : Promise.resolve({ stage: "levenshtein", results: [], processingTime: 0, confidence: 0, candidatesProcessed: 0 }), [b, X] = await Promise.all([n, c]), m = this.mergeParallelResults(b, X, a.parallelSearchStrategy || "balanced", a);
525
- return this.logger.debug(`🔧 Parallel search completed: Index=${b.results.length}, Levenshtein=${X.results.length}, Merged=${m.results.length}`), m.results;
526
- }
527
- async runIndexStage(e, l, t, a) {
528
- let r = `index-${++this.requestId}`;
529
- this.logger.debug(`📤 Index Stage: requestId=${r}`);
530
- let d = { type: "indexSearch", id: r, query: e, items: l, searchFields: t, options: a };
531
- return this.executeWorkerStage(this.indexWorker, d, { stage: "index", confidence: 0.8, timeoutMessage: "Index search timeout", unavailableMessage: "Index Worker not available" });
532
- }
533
- async runLevenshteinStage(e, l, t, a) {
534
- let r = `levenshtein-${++this.requestId}`;
535
- this.logger.debug(`📤 Levenshtein Stage: requestId=${r}`);
536
- let d = { type: "levenshteinSearch", id: r, query: e, items: l, searchFields: t, options: a };
537
- return this.executeWorkerStage(this.levenshteinWorker, d, { stage: "levenshtein", confidence: 0.9, timeoutMessage: "Levenshtein search timeout", unavailableMessage: "Levenshtein Worker not available" });
538
- }
539
- executeWorkerStage(e, l, t) {
540
- if (!e) throw new Error(t.unavailableMessage);
541
- return new Promise((a, r) => {
542
- let d = setTimeout(() => {
543
- this.pendingRequests.has(l.id) && (this.pendingRequests.delete(l.id), r(new Error(t.timeoutMessage)));
556
+ this.logger.debug(`🌐 searchParallel: query="${e}", items.length=${t.length}`);
557
+ let { enableIndexFiltering: o, enableLevenshtein: n } = s;
558
+ if (!(o || n)) return this.logger.warn("⚠️ Both search stages are disabled. Returning empty results."), [];
559
+ let l = o ? this.runIndexStage(e, t, r, s, a) : Promise.resolve({ stage: "index", results: [], processingTime: 0, confidence: 0, candidatesProcessed: 0 }), d = n ? this.runLevenshteinStage(e, t, r, s, a) : Promise.resolve({ stage: "levenshtein", results: [], processingTime: 0, confidence: 0, candidatesProcessed: 0 }), [p, g] = await Promise.all([l, d]), x = this.mergeParallelResults(p, g, s.parallelSearchStrategy || "balanced", s);
560
+ return this.logger.debug(`🔧 Parallel search completed: Index=${p.results.length}, Levenshtein=${g.results.length}, Merged=${x.results.length}`), x.results;
561
+ }
562
+ async runIndexStage(e, t, r, s, a) {
563
+ let o = () => {
564
+ let n = `index-${this.instanceId}-${++this.requestId}`;
565
+ this.logger.debug(`📤 Index Stage: requestId=${n}`);
566
+ let l = { type: "indexSearch", id: n, query: e, searchFields: r, options: this.toWorkerSafeOptions(s), dataHash: a };
567
+ return this.executeWorkerStage(this.indexWorker, l, { stage: "index", confidence: 0.8, timeoutMessage: "Index search timeout", unavailableMessage: "Index Worker not available" });
568
+ };
569
+ try {
570
+ return await o();
571
+ } catch (n) {
572
+ if (!(n instanceof Error ? n.message : String(n)).includes(he)) throw n;
573
+ this.logger.warn("⚠️ Index Stage: shared index was replaced by another dataset. Rebuilding and retrying..."), await this.rebuildSharedIndex(t, r, s, a);
574
+ try {
575
+ return await o();
576
+ } catch (l) {
577
+ if (!(l instanceof Error ? l.message : String(l)).includes(he)) throw l;
578
+ return this.logger.warn("⚠️ Index Stage: index is still contended by another dataset. Continuing without index results."), { stage: "index", results: [], processingTime: 0, confidence: 0, candidatesProcessed: 0 };
579
+ }
580
+ }
581
+ }
582
+ async rebuildSharedIndex(e, t, r, s) {
583
+ let a = M.getInstance(this.defaultOptions.workerId), o = a.getBuildingPromise(s);
584
+ if (o) {
585
+ await o;
586
+ return;
587
+ }
588
+ let n = (async () => {
589
+ await this.buildIndex(e, t, r), a.setLastIndexedDataHash(s);
590
+ })();
591
+ a.setBuildingPromise(s, n), await n;
592
+ }
593
+ async runLevenshteinStage(e, t, r, s, a) {
594
+ let o = M.getInstance(this.defaultOptions.workerId), n = (d) => {
595
+ let p = `levenshtein-${this.instanceId}-${++this.requestId}`;
596
+ this.logger.debug(`📤 Levenshtein Stage: requestId=${p}, includeItems=${d}`);
597
+ let g = { type: "levenshteinSearch", id: p, query: e, items: d ? t : void 0, searchFields: r, options: this.toWorkerSafeOptions(s), dataHash: a };
598
+ return this.executeWorkerStage(this.levenshteinWorker, g, { stage: "levenshtein", confidence: 0.9, timeoutMessage: "Levenshtein search timeout", unavailableMessage: "Levenshtein Worker not available" });
599
+ }, l = o.getLastLevenshteinDataHash() !== a;
600
+ try {
601
+ let d = await n(l);
602
+ return l && o.setLastLevenshteinDataHash(a), d;
603
+ } catch (d) {
604
+ let p = d instanceof Error ? d.message : String(d);
605
+ if (l || !p.includes(Ee)) throw d;
606
+ this.logger.warn("⚠️ Levenshtein Stage: worker dataset cache was replaced by another dataset. Retrying with items...");
607
+ let g = await n(!0);
608
+ return o.setLastLevenshteinDataHash(a), g;
609
+ }
610
+ }
611
+ executeWorkerStage(e, t, r) {
612
+ if (!e) throw new Error(r.unavailableMessage);
613
+ return new Promise((s, a) => {
614
+ let o = setTimeout(() => {
615
+ this.pendingRequests.has(t.id) && (this.pendingRequests.delete(t.id), a(new Error(r.timeoutMessage)));
544
616
  }, 3e4);
545
- this.pendingRequests.set(l.id, { resolve: (n) => {
546
- clearTimeout(d), a({ stage: t.stage, results: n, processingTime: 0, confidence: t.confidence, candidatesProcessed: n.length });
617
+ this.pendingRequests.set(t.id, { resolve: (n) => {
618
+ clearTimeout(o), s({ stage: r.stage, results: n, processingTime: 0, confidence: r.confidence, candidatesProcessed: n.length });
547
619
  }, reject: (n) => {
548
- clearTimeout(d), r(n);
549
- }, timestamp: Date.now() }), e.postMessage(l);
620
+ clearTimeout(o), a(n);
621
+ }, timestamp: Date.now() }), e.postMessage(t);
550
622
  });
551
623
  }
552
- mergeParallelResults(e, l, t, a) {
553
- let r = [];
554
- switch (t) {
624
+ mergeParallelResults(e, t, r, s) {
625
+ let a = [];
626
+ switch (r) {
555
627
  case "index-first":
556
- r = e.results.length > 0 ? e.results : l.results;
628
+ a = e.results.length > 0 ? e.results : t.results;
557
629
  break;
558
630
  case "levenshtein-first":
559
- r = l.results.length > 0 ? l.results : e.results;
631
+ a = t.results.length > 0 ? t.results : e.results;
560
632
  break;
561
633
  default:
562
- r = this.mergeByScore([...e.results, ...l.results], a);
634
+ a = this.mergeByScore([...e.results, ...t.results], s);
563
635
  break;
564
636
  }
565
- return { results: r, totalProcessingTime: e.processingTime + l.processingTime, indexStage: e, levenshteinStage: l, mergeStrategy: t, mergeQuality: 0.8 };
637
+ return { results: a, totalProcessingTime: e.processingTime + t.processingTime, indexStage: e, levenshteinStage: t, mergeStrategy: r, mergeQuality: 0.8 };
566
638
  }
567
- mergeByScore(e, l) {
568
- let t = /* @__PURE__ */ new Map();
639
+ mergeByScore(e, t) {
640
+ let r = /* @__PURE__ */ new Map();
569
641
  e.forEach((n) => {
570
642
  if (n.originalIndex !== void 0) {
571
- let c = t.get(n.originalIndex);
572
- (!c || n.score > c.score) && t.set(n.originalIndex, n);
643
+ let l = r.get(n.originalIndex);
644
+ (!l || n.score > l.score) && r.set(n.originalIndex, n);
573
645
  }
574
646
  });
575
- let a = Array.from(t.values()), r = l.sortBy || _.sortBy, d = l.sortOrder || _.sortOrder;
576
- return r === "original" ? a.sort((n, c) => {
577
- let b = n.originalIndex ?? 0, X = c.originalIndex ?? 0;
578
- return d === "asc" ? b - X : X - b;
579
- }) : a.sort((n, c) => d === "asc" ? n.score - c.score : c.score - n.score);
647
+ let s = Array.from(r.values()), a = t.sortBy || _.sortBy, o = t.sortOrder || _.sortOrder;
648
+ return a === "original" ? s.sort((n, l) => (n.originalIndex ?? 0) - (l.originalIndex ?? 0)) : s.sort((n, l) => o === "asc" ? n.score - l.score : l.score - n.score);
649
+ }
650
+ generateDataHash(e, t) {
651
+ return `${e.length}|${t.join(",")}|${We(e)}`;
580
652
  }
581
- generateDataHash(e, l) {
582
- return `${e.length}|${l.join(",")}|${JSON.stringify(e.slice(0, 3))}`;
653
+ toWorkerSafeOptions(e) {
654
+ if (!e.logger) return e;
655
+ let { logger: t, ...r } = e;
656
+ return r;
583
657
  }
584
- updateStats(e, l) {
585
- this.stats.totalSearches++, this.stats.averageSearchTime = (this.stats.averageSearchTime * (this.stats.totalSearches - 1) + l) / this.stats.totalSearches;
658
+ updateStats(e, t) {
659
+ this.stats.totalSearches++, this.stats.averageSearchTime = (this.stats.averageSearchTime * (this.stats.totalSearches - 1) + t) / this.stats.totalSearches;
586
660
  }
587
- updateLearningData(e, l, t) {
588
- this.learningData.queryPatterns[e] = (this.learningData.queryPatterns[e] ?? 0) + 1;
589
- let a = this.getPerformanceSizeKey(l);
590
- this.learningData.performanceMetrics.averageSearchTime[a] = t, this.stats.totalSearches % 10 === 0 && this.saveLearningData();
661
+ updateLearningData(e, t, r) {
662
+ if (this.learningData.queryPatterns[e] = (this.learningData.queryPatterns[e] ?? 0) + 1, Object.keys(this.learningData.queryPatterns).length > 200) {
663
+ let o = Object.entries(this.learningData.queryPatterns).sort((n, l) => l[1] - n[1]).slice(0, 100);
664
+ this.learningData.queryPatterns = Object.fromEntries(o);
665
+ }
666
+ let s = this.getPerformanceSizeKey(t);
667
+ this.learningData.performanceMetrics.averageSearchTime[s] = r, this.stats.popularQueries = Object.entries(this.learningData.queryPatterns).sort((o, n) => n[1] - o[1]).slice(0, 10).map(([o, n]) => ({ query: o, count: n }));
668
+ let a = this.stats.performanceBySize[s] ?? { averageTime: 0, sampleSize: 0 };
669
+ a.averageTime = (a.averageTime * a.sampleSize + r) / (a.sampleSize + 1), a.sampleSize += 1, this.stats.performanceBySize[s] = a, this.stats.totalSearches % 10 === 0 && this.saveLearningData();
591
670
  }
592
671
  getPerformanceSizeKey(e) {
593
672
  return e < 1e3 ? "small" : e < 1e4 ? "medium" : e < 1e5 ? "large" : "xlarge";
594
673
  }
595
674
  cleanupPendingRequests() {
596
- let e = Date.now(), l = 3e4;
597
- this.pendingRequests.forEach((t, a) => {
598
- e - t.timestamp > l && (t.reject(new Error("Request timeout")), this.pendingRequests.delete(a));
675
+ let e = Date.now(), t = 3e4;
676
+ this.pendingRequests.forEach((r, s) => {
677
+ e - r.timestamp > t && (r.reject(new Error("Request timeout")), this.pendingRequests.delete(s));
599
678
  });
600
679
  }
601
- updateSearchHistory(e, l, t = 0, a = 0) {
602
- let r = { query: e, timestamp: Date.now(), selectedItemId: l, resultCount: t, processingTime: a, searchTime: a, successful: t > 0 };
603
- this.searchHistory.unshift(r), this.searchHistory.length > 1e3 && (this.searchHistory = this.searchHistory.slice(0, 500));
680
+ updateSearchHistory(e, t, r = 0, s = 0) {
681
+ let a = { query: e, timestamp: Date.now(), selectedItemId: t, resultCount: r, processingTime: s, searchTime: s, successful: r > 0 };
682
+ this.searchHistory.unshift(a), this.searchHistory.length > 1e3 && (this.searchHistory = this.searchHistory.slice(0, 500));
604
683
  }
605
684
  async getStats(e = 5e3) {
606
685
  return await Promise.all([this.waitForWorkerStats(this.indexWorker, "index", e), this.waitForWorkerStats(this.levenshteinWorker, "levenshtein", e)]), this.stats;
@@ -609,31 +688,34 @@ var Q = me, pe = class {
609
688
  return this.stats;
610
689
  }
611
690
  async resetStats(e = 5e3) {
612
- let l = [this.resetWorkerStats(this.indexWorker, "index", e), this.resetWorkerStats(this.levenshteinWorker, "levenshtein", e)];
613
- this.stats = { totalSearches: 0, averageSearchTime: 0, popularQueries: [], performanceBySize: {}, workers: { index: { stats: this.createEmptyWorkerStats("index") }, levenshtein: { stats: this.createEmptyWorkerStats("levenshtein") } } }, this.searchHistory = [], await Promise.all(l), this.logger.info("📊 FuzzySearchManager: All statistics have been reset"), this.eventEmitter.emit("stats:reset", { timestamp: Date.now(), resetBy: "manager" });
614
- }
615
- waitForWorkerStats(e, l, t) {
616
- return e ? new Promise((a) => {
617
- let r = setTimeout(() => {
618
- this.logger.warn(`⚠️ getStats: Timeout waiting for ${l} worker.`), this.eventEmitter.off("worker:statsUpdated", d), a();
619
- }, t), d = (n) => {
620
- let { worker: c } = n;
621
- c === l && (clearTimeout(r), this.eventEmitter.off("worker:statsUpdated", d), a());
691
+ let t = [this.resetWorkerStats(this.indexWorker, "index", e), this.resetWorkerStats(this.levenshteinWorker, "levenshtein", e)];
692
+ this.stats = { totalSearches: 0, averageSearchTime: 0, popularQueries: [], performanceBySize: {}, workers: { index: { stats: this.createEmptyWorkerStats("index") }, levenshtein: { stats: this.createEmptyWorkerStats("levenshtein") } } }, this.searchHistory = [], await Promise.all(t), this.logger.info("📊 FuzzySearchManager: All statistics have been reset"), this.eventEmitter.emit("stats:reset", { timestamp: Date.now(), resetBy: "manager" });
693
+ }
694
+ waitForWorkerStats(e, t, r) {
695
+ return e ? new Promise((s) => {
696
+ let a = setTimeout(() => {
697
+ this.logger.warn(`⚠️ getStats: Timeout waiting for ${t} worker.`), this.eventEmitter.off("worker:statsUpdated", o), s();
698
+ }, r), o = (n) => {
699
+ let { worker: l } = n;
700
+ l === t && (clearTimeout(a), this.eventEmitter.off("worker:statsUpdated", o), s());
622
701
  };
623
- this.eventEmitter.on("worker:statsUpdated", d), e.postMessage({ type: "getStats" });
702
+ this.eventEmitter.on("worker:statsUpdated", o), e.postMessage({ type: "getStats" });
624
703
  }) : Promise.resolve();
625
704
  }
626
- resetWorkerStats(e, l, t) {
627
- return e ? new Promise((a) => {
628
- let r = setTimeout(() => {
629
- this.logger.warn(`⚠️ resetStats: Timeout waiting for ${l} worker.`), e.removeEventListener("message", d), a();
630
- }, t), d = (c) => {
631
- c.data.type === "resetStats" && (clearTimeout(r), e.removeEventListener("message", d), this.logger.info(`📊 ${l} worker statistics have been reset`), a());
705
+ resetWorkerStats(e, t, r) {
706
+ if (!e) return Promise.resolve();
707
+ let s = `resetStats-${this.instanceId}-${++this.requestId}-${t}`;
708
+ return new Promise((a) => {
709
+ let o = setTimeout(() => {
710
+ this.logger.warn(`⚠️ resetStats: Timeout waiting for ${t} worker.`), e.removeEventListener("message", n), a();
711
+ }, r), n = (d) => {
712
+ let p = d.data;
713
+ p.type === "resetStats" && p.id === s && (clearTimeout(o), e.removeEventListener("message", n), this.logger.info(`📊 ${t} worker statistics have been reset`), a());
632
714
  };
633
- e.addEventListener("message", d);
634
- let n = { type: "resetStats", id: `resetStats-${Date.now()}-${l}` };
635
- e.postMessage(n);
636
- }) : Promise.resolve();
715
+ e.addEventListener("message", n);
716
+ let l = { type: "resetStats", id: s };
717
+ e.postMessage(l);
718
+ });
637
719
  }
638
720
  createEmptyWorkerStats(e) {
639
721
  return { basic: { totalSearches: 0, totalProcessingTime: 0, averageSearchTime: 0, lastSearchTime: 0, errorCount: 0, timestamp: Date.now() }, workerSpecific: { workerType: e, operationCount: 0, operationDistribution: {}, specificMetrics: {} }, analysis: { fieldPerformance: {}, performanceInsights: { recentAverageProcessingTime: 0, recentAverageResultCount: 0, throughputPerSecond: 0, totalHistoryEntries: 0, mostCommonQueryLength: 0, bestPerformingField: "", similarityDistribution: { highSimilarity: 0, mediumSimilarity: 0, lowSimilarity: 0, veryLowSimilarity: 0 } }, recentHistory: [] } };
@@ -641,444 +723,490 @@ var Q = me, pe = class {
641
723
  getSearchHistory() {
642
724
  return [...this.searchHistory];
643
725
  }
644
- on(e, l) {
645
- this.eventEmitter.on(e, l);
726
+ on(e, t) {
727
+ this.eventEmitter.on(e, t);
646
728
  }
647
- off(e, l) {
648
- this.eventEmitter.off(e, l);
729
+ off(e, t) {
730
+ this.eventEmitter.off(e, t);
649
731
  }
650
- async prebuildIndex(e, l, t) {
732
+ async prebuildIndex(e, t, r) {
651
733
  this.logger.info(`🏗️ Pre-building index for ${e.length} items`);
652
734
  try {
653
735
  if (await this.workersInitialized, this.isDisposed) {
654
736
  this.logger.debug("🚫 prebuildIndex skipped because manager is disposed");
655
737
  return;
656
738
  }
657
- let a = this.generateDataHash(e, l), r = Q.getInstance(this.defaultOptions.workerId), d = r.getLastIndexedDataHash();
658
- if (this.logger.debug(`🔧 Checking index status: globalHash=${d}, currentHash=${a}`), !this.isIndexBuilt || this.lastIndexedDataHash !== a) {
659
- if (d === a) {
660
- this.logger.debug("🔧 Index already built globally for current data, skipping pre-build"), this.isIndexBuilt = !0, this.lastIndexedDataHash = a;
739
+ let s = this.generateDataHash(e, t), a = M.getInstance(this.defaultOptions.workerId), o = a.getLastIndexedDataHash();
740
+ if (this.logger.debug(`🔧 Checking index status: globalHash=${o}, currentHash=${s}`), !this.isIndexBuilt || this.lastIndexedDataHash !== s) {
741
+ if (o === s) {
742
+ this.logger.debug("🔧 Index already built globally for current data, skipping pre-build"), this.isIndexBuilt = !0, this.lastIndexedDataHash = s;
661
743
  return;
662
744
  }
663
- let n = r.getBuildingPromise(a);
745
+ let n = a.getBuildingPromise(s);
664
746
  if (n) {
665
- this.logger.debug("🔧 Index build already in progress globally, waiting..."), await n, this.isIndexBuilt = !0, this.lastIndexedDataHash = a;
747
+ this.logger.debug("🔧 Index build already in progress globally, waiting..."), await n, this.isIndexBuilt = !0, this.lastIndexedDataHash = s;
666
748
  return;
667
749
  }
668
- this.logger.debug(`🔧 Pre-building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${this.lastIndexedDataHash !== a}`);
669
- let c = (async () => {
670
- await this.rebuildIndex(e, l, t);
750
+ this.logger.debug(`🔧 Pre-building index: isIndexBuilt=${this.isIndexBuilt}, dataChanged=${this.lastIndexedDataHash !== s}`);
751
+ let l = (async () => {
752
+ await this.rebuildIndex(e, t, r);
671
753
  })();
672
- r.setBuildingPromise(a, c), await c, this.logger.info(`✅ Index pre-built successfully for ${e.length} items`);
754
+ a.setBuildingPromise(s, l), await l, this.logger.info(`✅ Index pre-built successfully for ${e.length} items`);
673
755
  } else this.logger.debug("🔧 Index already built for current data, skipping pre-build");
674
- } catch (a) {
675
- throw this.logger.error("🔧 Error during index pre-building:", a), a;
756
+ } catch (s) {
757
+ throw this.logger.error("🔧 Error during index pre-building:", s), s;
676
758
  }
677
759
  }
678
- async rebuildIndex(e, l, t) {
760
+ async rebuildIndex(e, t, r) {
679
761
  this.logger.info(`🔄 Starting forced index rebuild for ${e.length} items`);
680
- let a = { ...this.defaultOptions, ...t };
762
+ let s = { ...this.defaultOptions, ...r };
681
763
  try {
682
764
  if (await this.workersInitialized, this.isDisposed) {
683
765
  this.logger.debug("🚫 rebuildIndex skipped because manager is disposed");
684
766
  return;
685
767
  }
686
- this.isIndexBuilt = !1, this.lastIndexedDataHash = null, await this.buildIndex(e, l, a), this.logger.info(`✅ Index rebuild completed successfully for ${e.length} items`), this.isIndexBuilt = !0, this.lastIndexedDataHash = this.generateDataHash(e, l), Q.getInstance(this.defaultOptions.workerId).setLastIndexedDataHash(this.lastIndexedDataHash), this.eventEmitter.emit("index:rebuilt", { itemCount: e.length, searchFields: l, timestamp: Date.now() });
687
- } catch (r) {
688
- throw this.logger.error("❌ Failed to rebuild index:", r), this.eventEmitter.emit("index:rebuildError", { error: r instanceof Error ? r.message : String(r), timestamp: Date.now() }), r;
768
+ this.isIndexBuilt = !1, this.lastIndexedDataHash = null, await this.buildIndex(e, t, s), this.logger.info(`✅ Index rebuild completed successfully for ${e.length} items`), this.isIndexBuilt = !0, this.lastIndexedDataHash = this.generateDataHash(e, t);
769
+ let a = M.getInstance(this.defaultOptions.workerId);
770
+ a.setLastIndexedDataHash(this.lastIndexedDataHash), a.setLastLevenshteinDataHash(null), this.eventEmitter.emit("index:rebuilt", { itemCount: e.length, searchFields: t, timestamp: Date.now() });
771
+ } catch (a) {
772
+ throw this.logger.error("❌ Failed to rebuild index:", a), this.eventEmitter.emit("index:rebuildError", { error: a instanceof Error ? a.message : String(a), timestamp: Date.now() }), a;
689
773
  }
690
774
  }
691
775
  dispose() {
692
- this.isDisposed = !0, this.indexWorker && (this.indexWorker.removeEventListener("message", this.handleIndexWorkerMessageBound), this.indexWorker.removeEventListener("error", this.handleIndexWorkerErrorBound)), this.levenshteinWorker && (this.levenshteinWorker.removeEventListener("message", this.handleLevenshteinWorkerMessageBound), this.levenshteinWorker.removeEventListener("error", this.handleLevenshteinWorkerErrorBound)), Q.getInstance(this.defaultOptions.workerId).releaseReference(), this.indexWorker = null, this.levenshteinWorker = null, this.pendingRequests.clear(), this.eventEmitter.removeAllListeners(), this.saveLearningData();
776
+ this.isDisposed = !0, this.cleanupTimerId && (clearInterval(this.cleanupTimerId), this.cleanupTimerId = null), this.indexWorker && (this.indexWorker.removeEventListener("message", this.handleIndexWorkerMessageBound), this.indexWorker.removeEventListener("error", this.handleIndexWorkerErrorBound)), this.levenshteinWorker && (this.levenshteinWorker.removeEventListener("message", this.handleLevenshteinWorkerMessageBound), this.levenshteinWorker.removeEventListener("error", this.handleLevenshteinWorkerErrorBound)), M.getInstance(this.defaultOptions.workerId).releaseReference(), this.indexWorker = null, this.levenshteinWorker = null, this.pendingRequests.forEach((e) => {
777
+ e.reject(new Error("FuzzySearchManager disposed"));
778
+ }), this.pendingRequests.clear(), this.eventEmitter.removeAllListeners(), this.saveLearningData();
693
779
  }
694
- }, C = (e, l) => {
780
+ }, q = (e, t) => {
695
781
  if (typeof e == "string" && e.trim()) return e;
696
782
  if (e instanceof Error && e.message.trim()) return e.message;
697
783
  if (typeof e == "object" && e !== null) {
698
- if ("error" in e) return C(e.error, l);
699
- if ("message" in e) return C(e.message, l);
784
+ if ("error" in e) return q(e.error, t);
785
+ if ("message" in e) return q(e.message, t);
700
786
  }
701
- return l;
787
+ return t;
702
788
  };
703
- function ye(e, l, t) {
704
- let [a, r] = M(""), [d, n] = M([]), [c, b] = M(!1), [X, m] = M(!1), [G, o] = M(null), [Z, N] = M([]), [k, T] = M({ totalSearches: 0, averageSearchTime: 0, itemCount: e.length, resultsCount: 0, workerStats: void 0 }), y = j(() => {
705
- let i = { ..._, ...t };
706
- return t?.threshold !== void 0 && (t.levenshteinWorkerOptions || (i.levenshteinWorkerOptions = { ...i.levenshteinWorkerOptions, threshold: t.threshold }), t.indexWorkerOptions || (i.indexWorkerOptions = { ...i.indexWorkerOptions, threshold: t.threshold })), i;
707
- }, [t]), u = j(() => {
708
- let i = "[fuzzy-search-react]";
709
- return y.instanceName ? i = `[fuzzy-search-react:${y.instanceName}]` : y.workerId && (i = `[fuzzy-search-react:${y.workerId}]`), new ee(y.logLevel ?? 2, i, y.logger ?? console);
710
- }, [y.logLevel, y.logger, y.workerId, y.instanceName]), p = K(null), H = K(a);
711
- S(() => {
712
- H.current = a;
713
- }, [a]);
714
- let U = j(() => l.map((i) => String(i)), [l]);
715
- S(() => (p.current = new We(y), u.debug("🔧 FuzzySearchManager created (initial setup)"), () => {
716
- u.debug("🔧 FuzzySearchManager disposed (component unmount)"), p.current?.dispose(), p.current = null;
717
- }), [y, u]), S(() => {
718
- if (!p.current) return;
719
- let i = () => {
720
- if (p.current) {
721
- let x = p.current.getCurrentStats(), L = { totalSearches: x?.totalSearches ?? 0, averageSearchTime: x?.averageSearchTime ?? 0, itemCount: e.length, resultsCount: d.length, workerStats: { index: x?.workers.index.stats, levenshtein: x?.workers.levenshtein.stats } };
722
- T(L);
789
+ function Fe(e, t, r) {
790
+ let [s, a] = A(""), [o, n] = A([]), [l, d] = A(!1), [p, g] = A(!1), [x, m] = A(null), [h, E] = A([]), [R, y] = A({ totalSearches: 0, averageSearchTime: 0, itemCount: e.length, resultsCount: 0, workerStats: void 0 }), v = H(() => {
791
+ let u = { ..._, ...r };
792
+ return r?.threshold !== void 0 && (r.levenshteinWorkerOptions || (u.levenshteinWorkerOptions = { ...u.levenshteinWorkerOptions, threshold: r.threshold }), r.indexWorkerOptions || (u.indexWorkerOptions = { ...u.indexWorkerOptions, threshold: r.threshold })), u;
793
+ }, [r]), c = H(() => {
794
+ let u = "[fuzzy-search-react]";
795
+ return v.instanceName ? u = `[fuzzy-search-react:${v.instanceName}]` : v.workerId && (u = `[fuzzy-search-react:${v.workerId}]`), new ee(v.logLevel ?? 2, u, v.logger ?? console);
796
+ }, [v.logLevel, v.logger, v.workerId, v.instanceName]), b = N(null), C = N(s);
797
+ $(() => {
798
+ C.current = s;
799
+ }, [s]);
800
+ let z = H(() => t.map((u) => String(u)), [t]);
801
+ $(() => (b.current = new Le(v), c.debug("🔧 FuzzySearchManager created (initial setup)"), () => {
802
+ c.debug("🔧 FuzzySearchManager disposed (component unmount)"), b.current?.dispose(), b.current = null;
803
+ }), [v, c]), $(() => {
804
+ if (!b.current) return;
805
+ let u = () => {
806
+ if (b.current) {
807
+ let W = b.current.getCurrentStats(), O = { totalSearches: W?.totalSearches ?? 0, averageSearchTime: W?.averageSearchTime ?? 0, itemCount: e.length, resultsCount: o.length, workerStats: { index: W?.workers.index.stats, levenshtein: W?.workers.levenshtein.stats } };
808
+ y(O);
723
809
  }
724
- }, R = (x) => {
725
- let L = C(x, "Index Worker error");
726
- u.error("❌ Index worker error event", x), o(L), m(!1);
727
- }, g = (x) => {
728
- let L = C(x, "Index rebuild error");
729
- u.error("❌ Index rebuild error event", x), o(L), m(!1);
730
- }, F = (x) => {
731
- let L = C(x, "Search execution failed");
732
- u.error("❌ Search error event", x), o(L);
810
+ }, w = (W) => {
811
+ let O = q(W, "Index Worker error");
812
+ c.error("❌ Index worker error event", W), m(O), g(!1);
813
+ }, I = (W) => {
814
+ let O = q(W, "Index rebuild error");
815
+ c.error("❌ Index rebuild error event", W), m(O), g(!1);
816
+ }, T = (W) => {
817
+ let O = q(W, "Search execution failed");
818
+ c.error("❌ Search error event", W), m(O);
733
819
  };
734
- return p.current.on("worker:statsUpdated", i), p.current.on("search:complete", i), p.current.on("indexWorker:error", R), p.current.on("index:rebuildError", g), p.current.on("search:error", F), () => {
735
- p.current && (p.current.off("worker:statsUpdated", i), p.current.off("search:complete", i), p.current.off("indexWorker:error", R), p.current.off("index:rebuildError", g), p.current.off("search:error", F));
820
+ return b.current.on("worker:statsUpdated", u), b.current.on("search:complete", u), b.current.on("indexWorker:error", w), b.current.on("index:rebuildError", I), b.current.on("search:error", T), () => {
821
+ b.current && (b.current.off("worker:statsUpdated", u), b.current.off("search:complete", u), b.current.off("indexWorker:error", w), b.current.off("index:rebuildError", I), b.current.off("search:error", T));
736
822
  };
737
- });
738
- let f = v(async (i) => {
739
- if (p.current) {
740
- if (u.debug(`🔍 performSearch called with query: "${i}"`), i !== H.current) {
741
- u.debug(`🚫 performSearch skipped for stale query: "${i}" (current: "${H.current}")`);
823
+ }, [e.length, o.length, c, v]);
824
+ let j = D(async (u) => {
825
+ if (b.current) {
826
+ if (c.debug(`🔍 performSearch called with query: "${u}"`), u !== C.current) {
827
+ c.debug(`🚫 performSearch skipped for stale query: "${u}" (current: "${C.current}")`);
742
828
  return;
743
829
  }
744
830
  try {
745
- if (u.debug(`📈 Setting isSearching to true for query: "${i}"`), b(!0), o(null), !i.trim()) {
746
- if (i !== H.current) return;
747
- n(e.map((L, w) => ({ item: L, score: 1, baseScore: 1, matchedFields: [], relevanceReason: "全件表示", originalIndex: w }))), u.debug(`📈 Setting isSearching to false for empty query: "${i}"`), b(!1);
831
+ if (c.debug(`📈 Setting isSearching to true for query: "${u}"`), d(!0), m(null), !u.trim()) {
832
+ c.debug(`📈 Setting isSearching to false for empty query: "${u}"`), d(!1);
748
833
  return;
749
834
  }
750
- u.info(`🚀 Starting search with query: "${i}", items count: ${e.length}`);
751
- let R = performance.now(), g = await p.current.search(i, e, U, y), F = performance.now() - R;
752
- if (i !== H.current) {
753
- u.debug(`🚫 Search result ignored for stale query: "${i}" (current: "${H.current}")`);
835
+ c.info(`🚀 Starting search with query: "${u}", items count: ${e.length}`);
836
+ let w = performance.now(), I = await b.current.search(u, e, z, v), T = performance.now() - w;
837
+ if (u !== C.current) {
838
+ c.debug(`🚫 Search result ignored for stale query: "${u}" (current: "${C.current}")`);
754
839
  return;
755
840
  }
756
- u.info(`✅ Search completed with ${g.length} results in ${F}ms`), n(g);
757
- let x = { query: i, timestamp: Date.now(), resultCount: g.length, processingTime: F, searchTime: F, successful: g.length > 0 };
758
- N((L) => {
759
- let w = L.filter((D) => D.query !== i);
760
- return [x, ...w].slice(0, 50);
841
+ c.info(`✅ Search completed with ${I.length} results in ${T}ms`), n(I);
842
+ let W = { query: u, timestamp: Date.now(), resultCount: I.length, processingTime: T, searchTime: T, successful: I.length > 0 };
843
+ E((O) => {
844
+ let J = O.filter((Q) => Q.query !== u);
845
+ return [W, ...J].slice(0, 50);
761
846
  });
762
- } catch (R) {
763
- if (i !== H.current) return;
764
- u.error(`❌ Search error for query: "${i}"`, R), o(R instanceof Error ? R.message : "Search failed"), n([]);
847
+ } catch (w) {
848
+ if (u !== C.current) return;
849
+ c.error(`❌ Search error for query: "${u}"`, w), m(w instanceof Error ? w.message : "Search failed"), n([]);
765
850
  } finally {
766
- i === H.current && (u.debug(`📈 Setting isSearching to false (finally) for query: "${i}"`), b(!1));
851
+ u === C.current && (c.debug(`📈 Setting isSearching to false (finally) for query: "${u}"`), d(!1));
767
852
  }
768
853
  }
769
- }, [e, U, y, u.info, u.error, u.debug]);
770
- S(() => {
771
- if (!p.current || e.length === 0) return;
772
- let i = !1, R = y.autoSearchOnIndexRebuild ?? !0;
773
- return u.info(`🏗️ Data changed, pre-building index for ${e.length} items`), m(!0), p.current.prebuildIndex(e, U, y).then(() => {
774
- !i && R && (u.debug("🔁 Re-running search after index rebuild"), f(H.current));
775
- }).catch((g) => {
776
- u.warn("🔧 Failed to pre-build index:", g), o(C(g, "インデックスの事前構築中にエラーが発生しました"));
854
+ }, [e, z, v, c.info, c.error, c.debug]);
855
+ $(() => {
856
+ if (!b.current || e.length === 0) {
857
+ g(!1);
858
+ return;
859
+ }
860
+ let u = !1, w = v.autoSearchOnIndexRebuild ?? !0;
861
+ return c.info(`🏗️ Data changed, pre-building index for ${e.length} items`), g(!0), b.current.prebuildIndex(e, z, v).then(() => {
862
+ !u && w && (c.debug("🔁 Re-running search after index rebuild"), j(C.current));
863
+ }).catch((I) => {
864
+ c.warn("🔧 Failed to pre-build index:", I), u || m(q(I, "インデックスの事前構築中にエラーが発生しました"));
777
865
  }).finally(() => {
778
- i || m(!1);
866
+ u || g(!1);
779
867
  }), () => {
780
- i = !0;
868
+ u = !0;
781
869
  };
782
- }, [e, U, y, f, u.warn, u.info, u.debug]), S(() => {
783
- u.debug(`🎯 useEffect triggered - searchTerm: "${a}", debounceMs: ${y.debounceMs}`);
784
- let i = setTimeout(() => {
785
- u.debug(`⏰ Timeout executing performSearch for: "${a}"`), f(a);
786
- }, y.debounceMs);
870
+ }, [e, z, v, j, c.warn, c.info, c.debug]), $(() => {
871
+ c.debug(`🎯 useEffect triggered - searchTerm: "${s}", debounceMs: ${v.debounceMs}`);
872
+ let u = setTimeout(() => {
873
+ c.debug(`⏰ Timeout executing performSearch for: "${s}"`), j(s);
874
+ }, v.debounceMs);
787
875
  return () => {
788
- u.debug(`🚫 Timeout cleared for: "${a}"`), clearTimeout(i);
876
+ c.debug(`🚫 Timeout cleared for: "${s}"`), clearTimeout(u);
789
877
  };
790
- }, [a, y, f, u]), S(() => {
791
- a.trim() || n(e.map((i, R) => ({ item: i, score: 1, baseScore: 1, matchedFields: [], relevanceReason: "全件表示", originalIndex: R })));
792
- }, [e, a]);
793
- let le = v((i, R) => {
794
- u.info("🎯 Selected item:", i, "at index:", R);
795
- }, [u]), te = v(() => {
796
- r(""), o(null);
797
- }, []), E = v(() => {
798
- N([]);
799
- }, []), ae = v(async () => {
800
- if (p.current) {
801
- await p.current.resetStats(), N([]), o(null);
802
- let i = p.current.getCurrentStats(), R = { totalSearches: i?.totalSearches ?? 0, averageSearchTime: i?.averageSearchTime ?? 0, itemCount: e.length, resultsCount: d.length, workerStats: { index: i?.workers.index.stats, levenshtein: i?.workers.levenshtein.stats } };
803
- T(R), u.info("📊 useFuzzySearch: Statistics have been reset and refreshed");
878
+ }, [s, v, j, c]), $(() => {
879
+ s.trim() || n(e.map((u, w) => ({ item: u, score: 1, baseScore: 1, matchedFields: [], relevanceReason: "全件表示", originalIndex: w })));
880
+ }, [e, s]);
881
+ let te = D((u, w) => {
882
+ c.info("🎯 Selected item:", u, "at index:", w);
883
+ }, [c]), re = D(() => {
884
+ a(""), m(null);
885
+ }, []), U = D(() => {
886
+ E([]);
887
+ }, []), se = D(async () => {
888
+ if (b.current) {
889
+ await b.current.resetStats(), E([]), m(null);
890
+ let u = b.current.getCurrentStats(), w = { totalSearches: u?.totalSearches ?? 0, averageSearchTime: u?.averageSearchTime ?? 0, itemCount: e.length, resultsCount: o.length, workerStats: { index: u?.workers.index.stats, levenshtein: u?.workers.levenshtein.stats } };
891
+ y(w), c.info("📊 useFuzzySearch: Statistics have been reset and refreshed");
804
892
  }
805
- }, [e.length, d.length, u]), se = v((i, R = 5) => {
806
- let g = Z.filter((F) => F.query.toLowerCase().includes(i.toLowerCase()) && F.query !== i).sort((F, x) => x.timestamp - F.timestamp).slice(0, R).map((F) => F.query);
807
- return Array.from(new Set(g));
808
- }, [Z]), P = v(async (i) => {
809
- if (!p.current) {
810
- u.warn("⚠️ Search manager is not initialized");
893
+ }, [e.length, o.length, c]), ie = D((u, w = 5) => {
894
+ let I = h.filter((T) => T.query.toLowerCase().includes(u.toLowerCase()) && T.query !== u).sort((T, W) => W.timestamp - T.timestamp).slice(0, w).map((T) => T.query);
895
+ return Array.from(new Set(I));
896
+ }, [h]), Y = D(async (u) => {
897
+ if (!b.current) {
898
+ c.warn("⚠️ Search manager is not initialized");
811
899
  return;
812
900
  }
813
- u.info(`🔄 Rebuilding index for ${e.length} items`), m(!0), o(null);
901
+ c.info(`🔄 Rebuilding index for ${e.length} items`), g(!0), m(null);
814
902
  try {
815
- let R = i ? { ...y, ...i } : y;
816
- await p.current.rebuildIndex(e, U, R), u.info("✅ Index rebuild completed successfully");
817
- } catch (R) {
818
- let g = R instanceof Error ? R.message : "インデックス再構築中にエラーが発生しました";
819
- throw u.error("❌ Index rebuild failed:", g), o(g), R;
903
+ let w = u ? { ...v, ...u } : v;
904
+ await b.current.rebuildIndex(e, z, w), c.info("✅ Index rebuild completed successfully");
905
+ } catch (w) {
906
+ let I = w instanceof Error ? w.message : "インデックス再構築中にエラーが発生しました";
907
+ throw c.error("❌ Index rebuild failed:", I), m(I), w;
820
908
  } finally {
821
- m(!1);
909
+ g(!1);
822
910
  }
823
- }, [e, U, y, u]);
824
- return { searchTerm: a, setSearchTerm: r, filteredItems: d, isSearching: c, isIndexBuilding: X, error: G, searchHistory: Z, options: y, selectItem: le, clearSearch: te, clearHistory: E, resetStats: ae, getSearchSuggestions: se, performanceMetrics: k, rebuildIndex: P };
911
+ }, [e, z, v, c]);
912
+ return { searchTerm: s, setSearchTerm: a, filteredItems: o, isSearching: l, isIndexBuilding: p, error: x, searchHistory: h, options: v, selectItem: te, clearSearch: re, clearHistory: U, resetStats: se, getSearchSuggestions: ie, performanceMetrics: R, rebuildIndex: Y };
825
913
  }
826
- function Re(e, l) {
827
- const t = j(
914
+ function Te(e, t, r) {
915
+ const s = H(
828
916
  () => ({
829
917
  threshold: 0.3,
830
918
  sortBy: "score",
831
- sortOrder: "desc"
919
+ sortOrder: "desc",
920
+ workerUrls: r
832
921
  }),
833
- []
834
- ), a = j(() => ["label"], []), { setSearchTerm: r, filteredItems: d, isSearching: n } = ye(e, a, t);
835
- S(() => {
836
- r(l);
837
- }, [l, r]);
838
- const c = j(() => {
839
- if (!l) return e;
840
- const b = l.toLowerCase(), X = [], m = [];
841
- for (const G of d) {
842
- const o = G.item;
843
- o.label.toLowerCase() === b ? X.push(o) : m.push(o);
922
+ [r]
923
+ ), a = H(() => ["label"], []), { setSearchTerm: o, filteredItems: n, isSearching: l } = Fe(e, a, s);
924
+ $(() => {
925
+ o(t);
926
+ }, [t, o]);
927
+ const d = H(() => {
928
+ if (!t) return e;
929
+ const p = t.toLowerCase(), g = [], x = [];
930
+ for (const m of n) {
931
+ const h = m.item;
932
+ h.label.toLowerCase() === p ? g.push(h) : x.push(h);
844
933
  }
845
- return [...X, ...m];
846
- }, [d, l, e]);
934
+ return [...g, ...x];
935
+ }, [n, t, e]);
847
936
  return {
848
- filteredOptions: l ? c : e,
849
- isSearching: n
937
+ filteredOptions: t ? d : e,
938
+ isSearching: l
850
939
  };
851
940
  }
852
- function Ve({ value: e, onChange: l, multiple: t }) {
853
- const [a, r] = M(!1), [d, n] = M(""), c = K(null);
854
- S(() => {
855
- const G = (o) => {
856
- c.current && !c.current.contains(o.target) && r(!1);
941
+ function Re({ value: e, onChange: t, multiple: r }) {
942
+ const [s, a] = A(!1), [o, n] = A(""), l = N(null);
943
+ $(() => {
944
+ const m = (h) => {
945
+ l.current && !l.current.contains(h.target) && (a(!1), n(""));
857
946
  };
858
- return document.addEventListener("mousedown", G), () => {
859
- document.removeEventListener("mousedown", G);
947
+ return document.addEventListener("mousedown", m), () => {
948
+ document.removeEventListener("mousedown", m);
860
949
  };
861
950
  }, []);
862
- const b = v(
863
- (G) => {
864
- if (t) {
865
- const o = Array.isArray(e) ? e : e ? [e] : [], Z = o.some((k) => k.value === G.value);
866
- let N;
867
- Z ? N = o.filter((k) => k.value !== G.value) : N = [...o, G], l?.(N);
951
+ const d = D(
952
+ (m) => {
953
+ if (r) {
954
+ const h = Array.isArray(e) ? e : e ? [e] : [], E = h.some((y) => y.value === m.value);
955
+ let R;
956
+ E ? R = h.filter((y) => y.value !== m.value) : R = [...h, m], t?.(R);
868
957
  } else
869
- l?.(G), r(!1), n("");
958
+ t?.(m), a(!1), n("");
870
959
  },
871
- [t, e, l]
872
- ), X = v(
873
- (G) => {
874
- if (!t) return;
875
- const Z = (Array.isArray(e) ? e : e ? [e] : []).filter((N) => N.value !== G.value);
876
- l?.(Z);
960
+ [r, e, t]
961
+ ), p = D(
962
+ (m) => {
963
+ if (!r) return;
964
+ const E = (Array.isArray(e) ? e : e ? [e] : []).filter((R) => R.value !== m.value);
965
+ t?.(E);
877
966
  },
878
- [t, e, l]
879
- ), m = v(() => {
880
- r((G) => !G);
967
+ [r, e, t]
968
+ ), g = D(() => {
969
+ t?.(r ? [] : null), n(""), a(!1);
970
+ }, [r, t]), x = D(() => {
971
+ a((m) => (m && n(""), !m));
881
972
  }, []);
882
973
  return {
883
- isOpen: a,
884
- setIsOpen: r,
885
- query: d,
974
+ isOpen: s,
975
+ setIsOpen: a,
976
+ query: o,
886
977
  setQuery: n,
887
- containerRef: c,
888
- handleSelect: b,
889
- handleRemove: X,
890
- toggleOpen: m
978
+ containerRef: l,
979
+ handleSelect: d,
980
+ handleRemove: p,
981
+ handleClear: g,
982
+ toggleOpen: x
891
983
  };
892
984
  }
893
- function xe({
985
+ function De({
894
986
  title: e,
895
- titleId: l,
896
- ...t
897
- }, a) {
898
- return /* @__PURE__ */ J.createElement("svg", Object.assign({
987
+ titleId: t,
988
+ ...r
989
+ }, s) {
990
+ return /* @__PURE__ */ P.createElement("svg", Object.assign({
899
991
  xmlns: "http://www.w3.org/2000/svg",
900
992
  viewBox: "0 0 20 20",
901
993
  fill: "currentColor",
902
994
  "aria-hidden": "true",
903
995
  "data-slot": "icon",
904
- ref: a,
905
- "aria-labelledby": l
906
- }, t), e ? /* @__PURE__ */ J.createElement("title", {
907
- id: l
908
- }, e) : null, /* @__PURE__ */ J.createElement("path", {
996
+ ref: s,
997
+ "aria-labelledby": t
998
+ }, r), e ? /* @__PURE__ */ P.createElement("title", {
999
+ id: t
1000
+ }, e) : null, /* @__PURE__ */ P.createElement("path", {
909
1001
  fillRule: "evenodd",
910
1002
  d: "M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z",
911
1003
  clipRule: "evenodd"
912
1004
  }));
913
1005
  }
914
- const oe = /* @__PURE__ */ J.forwardRef(xe);
915
- function ge({
1006
+ const ge = /* @__PURE__ */ P.forwardRef(De);
1007
+ function Oe({
916
1008
  title: e,
917
- titleId: l,
918
- ...t
919
- }, a) {
920
- return /* @__PURE__ */ J.createElement("svg", Object.assign({
1009
+ titleId: t,
1010
+ ...r
1011
+ }, s) {
1012
+ return /* @__PURE__ */ P.createElement("svg", Object.assign({
921
1013
  xmlns: "http://www.w3.org/2000/svg",
922
1014
  viewBox: "0 0 20 20",
923
1015
  fill: "currentColor",
924
1016
  "aria-hidden": "true",
925
1017
  "data-slot": "icon",
926
- ref: a,
927
- "aria-labelledby": l
928
- }, t), e ? /* @__PURE__ */ J.createElement("title", {
929
- id: l
930
- }, e) : null, /* @__PURE__ */ J.createElement("path", {
1018
+ ref: s,
1019
+ "aria-labelledby": t
1020
+ }, r), e ? /* @__PURE__ */ P.createElement("title", {
1021
+ id: t
1022
+ }, e) : null, /* @__PURE__ */ P.createElement("path", {
931
1023
  fillRule: "evenodd",
932
1024
  d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z",
933
1025
  clipRule: "evenodd"
934
1026
  }));
935
1027
  }
936
- const Ye = /* @__PURE__ */ J.forwardRef(ge);
937
- function ze({
1028
+ const Pe = /* @__PURE__ */ P.forwardRef(Oe);
1029
+ function Ce({
938
1030
  title: e,
939
- titleId: l,
940
- ...t
941
- }, a) {
942
- return /* @__PURE__ */ J.createElement("svg", Object.assign({
1031
+ titleId: t,
1032
+ ...r
1033
+ }, s) {
1034
+ return /* @__PURE__ */ P.createElement("svg", Object.assign({
943
1035
  xmlns: "http://www.w3.org/2000/svg",
944
1036
  viewBox: "0 0 20 20",
945
1037
  fill: "currentColor",
946
1038
  "aria-hidden": "true",
947
1039
  "data-slot": "icon",
948
- ref: a,
949
- "aria-labelledby": l
950
- }, t), e ? /* @__PURE__ */ J.createElement("title", {
951
- id: l
952
- }, e) : null, /* @__PURE__ */ J.createElement("path", {
1040
+ ref: s,
1041
+ "aria-labelledby": t
1042
+ }, r), e ? /* @__PURE__ */ P.createElement("title", {
1043
+ id: t
1044
+ }, e) : null, /* @__PURE__ */ P.createElement("path", {
953
1045
  d: "M6.28 5.22a.75.75 0 0 0-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 1 0 1.06 1.06L10 11.06l3.72 3.72a.75.75 0 1 0 1.06-1.06L11.06 10l3.72-3.72a.75.75 0 0 0-1.06-1.06L10 8.94 6.28 5.22Z"
954
1046
  }));
955
1047
  }
956
- const Ne = /* @__PURE__ */ J.forwardRef(ze), Fe = ({ option: e, isSelected: l, isFocused: t, onClick: a, multiple: r, style: d }) => /* @__PURE__ */ W.jsxs(
1048
+ const me = /* @__PURE__ */ P.forwardRef(Ce), Ae = ({ option: e, isSelected: t, isFocused: r, onClick: s, multiple: a, style: o }) => /* @__PURE__ */ k.jsxs(
957
1049
  "div",
958
1050
  {
959
1051
  role: "option",
960
- "aria-selected": l,
1052
+ "aria-selected": t,
961
1053
  tabIndex: 0,
962
1054
  onKeyDown: (n) => {
963
- (n.key === "Enter" || n.key === " ") && a(e);
1055
+ (n.key === "Enter" || n.key === " ") && s(e);
964
1056
  },
965
- style: d,
966
- onClick: () => a(e),
967
- className: `sb-option ${t ? "sb-option--focused" : ""}
968
- ${l && !r ? "sb-option--selected" : "sb-option--not-selected"}
1057
+ style: o,
1058
+ onClick: () => s(e),
1059
+ className: `sb-option ${r ? "sb-option--focused" : ""}
1060
+ ${t && !a ? "sb-option--selected" : "sb-option--not-selected"}
969
1061
  `,
970
1062
  children: [
971
- r && /* @__PURE__ */ W.jsx(
1063
+ a && /* @__PURE__ */ k.jsx(
972
1064
  "div",
973
1065
  {
974
- className: `sb-checkbox ${l ? "sb-checkbox--checked" : "sb-checkbox--unchecked"}
1066
+ className: `sb-checkbox ${t ? "sb-checkbox--checked" : "sb-checkbox--unchecked"}
975
1067
  `,
976
- children: l && /* @__PURE__ */ W.jsx(oe, { className: "sb-check-icon-white" })
1068
+ children: t && /* @__PURE__ */ k.jsx(ge, { className: "sb-check-icon-white" })
977
1069
  }
978
1070
  ),
979
- /* @__PURE__ */ W.jsx("span", { className: "sb-option-label", children: e.label }),
980
- !r && l && /* @__PURE__ */ W.jsx(oe, { className: "sb-check-icon-blue" })
1071
+ /* @__PURE__ */ k.jsx("span", { className: "sb-option-label", children: e.label }),
1072
+ !a && t && /* @__PURE__ */ k.jsx(ge, { className: "sb-check-icon-blue" })
981
1073
  ]
982
1074
  }
983
- ), Le = ({ options: e, value: l, multiple: t, onSelect: a, className: r }) => {
984
- const [d, n] = M(300), c = K(null), b = K(!1), X = (Z) => {
985
- b.current = !0, Z.currentTarget.setPointerCapture(Z.pointerId), Z.preventDefault();
986
- }, m = v((Z) => {
987
- if (!(b.current && c.current)) return;
988
- const N = c.current.getBoundingClientRect(), k = Z.clientY - N.top;
989
- n(Math.max(100, Math.min(k, 600)));
990
- }, []), G = v(() => {
991
- b.current = !1;
1075
+ ), $e = ({ options: e, value: t, multiple: r, onSelect: s, className: a }) => {
1076
+ const [o, n] = A(300), l = N(null), d = N(!1), p = (h) => {
1077
+ d.current = !0, h.currentTarget.setPointerCapture(h.pointerId), h.preventDefault();
1078
+ }, g = D((h) => {
1079
+ if (!(d.current && l.current)) return;
1080
+ const E = l.current.getBoundingClientRect(), R = h.clientY - E.top;
1081
+ n(Math.max(100, Math.min(R, 600)));
1082
+ }, []), x = D(() => {
1083
+ d.current = !1;
992
1084
  }, []);
993
- S(() => (document.addEventListener("pointermove", m), document.addEventListener("pointerup", G), () => {
994
- document.removeEventListener("pointermove", m), document.removeEventListener("pointerup", G);
995
- }), [m, G]);
996
- const o = (Z) => t ? (Array.isArray(l) ? l : l ? [l] : []).some((k) => k.value === Z.value) : l?.value === Z.value;
997
- return /* @__PURE__ */ W.jsxs("div", { ref: c, className: `sb-dropdown ${r || ""}`, style: { height: d }, children: [
998
- e.length > 0 ? /* @__PURE__ */ W.jsx(
999
- Ze,
1085
+ $(() => (document.addEventListener("pointermove", g), document.addEventListener("pointerup", x), () => {
1086
+ document.removeEventListener("pointermove", g), document.removeEventListener("pointerup", x);
1087
+ }), [g, x]);
1088
+ const m = (h) => r ? (Array.isArray(t) ? t : t ? [t] : []).some((R) => R.value === h.value) : t?.value === h.value;
1089
+ return /* @__PURE__ */ k.jsxs("div", { ref: l, className: `sb-dropdown ${a || ""}`, style: { height: o }, children: [
1090
+ e.length > 0 ? /* @__PURE__ */ k.jsx(
1091
+ ke,
1000
1092
  {
1001
1093
  itemCount: e.length,
1002
- getItem: (Z) => e[Z],
1094
+ getItem: (h) => e[h],
1003
1095
  getItemHeight: () => 36,
1004
- viewportSize: d,
1096
+ viewportSize: o,
1005
1097
  className: "h-full w-full",
1006
1098
  scrollBarOptions: {
1007
1099
  width: 10,
1008
1100
  enableThumbDrag: !0,
1009
- enableTrackClick: !0
1101
+ enableTrackClick: !0,
1102
+ tapScrollCircleOptions: {
1103
+ enabled: !0,
1104
+ renderVisual: xe
1105
+ }
1010
1106
  },
1011
1107
  behaviorOptions: {
1012
1108
  enableKeyboardNavigation: !0
1013
1109
  },
1014
- children: (Z, N) => Z ? /* @__PURE__ */ W.jsx(Fe, { option: Z, isSelected: o(Z), onClick: a, multiple: t, style: { height: 36 } }, Z.value) : null
1110
+ children: (h, E) => h ? /* @__PURE__ */ k.jsx(Ae, { option: h, isSelected: m(h), onClick: s, multiple: r, style: { height: 36 } }, h.value) : null
1015
1111
  }
1016
- ) : /* @__PURE__ */ W.jsx("div", { className: "sb-no-options", children: "No options found" }),
1017
- /* @__PURE__ */ W.jsx("div", { onPointerDown: X, className: "sb-resize-handle", children: /* @__PURE__ */ W.jsxs("svg", { viewBox: "0 0 10 10", className: "sb-resize-icon", children: [
1018
- /* @__PURE__ */ W.jsx("title", { children: "Resize handle" }),
1019
- /* @__PURE__ */ W.jsx("path", { d: "M10 10L10 0L0 10Z" })
1112
+ ) : /* @__PURE__ */ k.jsx("div", { className: "sb-no-options", children: "No options found" }),
1113
+ /* @__PURE__ */ k.jsx("div", { onPointerDown: p, className: "sb-resize-handle", children: /* @__PURE__ */ k.jsxs("svg", { viewBox: "0 0 10 10", className: "sb-resize-icon", children: [
1114
+ /* @__PURE__ */ k.jsx("title", { children: "Resize handle" }),
1115
+ /* @__PURE__ */ k.jsx("path", { d: "M10 10L10 0L0 10Z" })
1020
1116
  ] }) })
1021
1117
  ] });
1022
- }, ve = ({ value: e, multiple: l, query: t, onQueryChange: a, onRemove: r, onFocus: d, placeholder: n = "Select...", disabled: c, isLoading: b }) => {
1023
- const X = K(null), m = Array.isArray(e) ? e : e ? [e] : [], G = (o) => {
1024
- o.key === "Backspace" && !t && m.length > 0 && l && r(m[m.length - 1]);
1118
+ }, ze = ({ value: e, multiple: t, query: r, onQueryChange: s, onRemove: a, onFocus: o, placeholder: n = "Select...", disabled: l, isLoading: d, clearable: p, onClear: g, onToggle: x, autoFocus: m }) => {
1119
+ const h = N(null);
1120
+ $(() => {
1121
+ m && h.current?.focus();
1122
+ }, [m]);
1123
+ const E = Array.isArray(e) ? e : e ? [e] : [], R = (y) => {
1124
+ y.key === "Backspace" && !r && E.length > 0 && t && a(E[E.length - 1]);
1025
1125
  };
1026
- return /* @__PURE__ */ W.jsxs(
1126
+ return /* @__PURE__ */ k.jsxs(
1027
1127
  "fieldset",
1028
1128
  {
1029
- className: `sb-input-area ${c ? "sb-input-area--disabled" : "sb-input-area--active"}
1129
+ className: `sb-input-area ${l ? "sb-input-area--disabled" : "sb-input-area--active"}
1030
1130
  `,
1031
- onMouseDown: (o) => {
1032
- const Z = o.target;
1033
- Z !== X.current && !Z.closest("button") && (o.preventDefault(), X.current?.focus());
1131
+ onMouseDown: (y) => {
1132
+ const v = y.target;
1133
+ v !== h.current && !v.closest("button") && (y.preventDefault(), h.current?.focus());
1034
1134
  },
1035
1135
  children: [
1036
- l && m.map((o) => /* @__PURE__ */ W.jsxs("span", { className: "sb-tag", children: [
1037
- o.label,
1038
- /* @__PURE__ */ W.jsx(
1136
+ t && E.map((y) => /* @__PURE__ */ k.jsxs("span", { className: "sb-tag", children: [
1137
+ y.label,
1138
+ /* @__PURE__ */ k.jsx(
1039
1139
  "button",
1040
1140
  {
1041
1141
  type: "button",
1042
- onClick: (Z) => {
1043
- Z.stopPropagation(), r(o);
1142
+ onClick: (v) => {
1143
+ v.stopPropagation(), a(y);
1044
1144
  },
1045
1145
  className: "sb-tag-remove",
1046
- children: /* @__PURE__ */ W.jsx(Ne, { className: "h-3 w-3" })
1146
+ children: /* @__PURE__ */ k.jsx(me, { className: "h-3 w-3" })
1147
+ }
1148
+ )
1149
+ ] }, y.value)),
1150
+ !t && E.length > 0 && !r && /* @__PURE__ */ k.jsx("span", { className: "sb-single-value", children: E[0].label }),
1151
+ /* @__PURE__ */ k.jsx("input", { ref: h, type: "text", value: r, onChange: (y) => s(y.target.value), onFocus: o, onKeyDown: R, placeholder: E.length === 0 ? n : "", disabled: l, className: "sb-input" }),
1152
+ /* @__PURE__ */ k.jsxs("div", { className: "sb-indicators", children: [
1153
+ p && E.length > 0 && !l && /* @__PURE__ */ k.jsx(
1154
+ "button",
1155
+ {
1156
+ type: "button",
1157
+ onClick: (y) => {
1158
+ y.stopPropagation(), g();
1159
+ },
1160
+ className: "sb-clear-button",
1161
+ children: /* @__PURE__ */ k.jsx(me, { className: "h-4 w-4" })
1162
+ }
1163
+ ),
1164
+ d ? /* @__PURE__ */ k.jsxs("svg", { className: "sb-loading-icon", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
1165
+ /* @__PURE__ */ k.jsx("title", { children: "Loading" }),
1166
+ /* @__PURE__ */ k.jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
1167
+ /* @__PURE__ */ k.jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
1168
+ ] }) : /* @__PURE__ */ k.jsx(
1169
+ "button",
1170
+ {
1171
+ type: "button",
1172
+ disabled: l,
1173
+ onClick: (y) => {
1174
+ y.stopPropagation(), x();
1175
+ },
1176
+ className: "sb-chevron-button",
1177
+ children: /* @__PURE__ */ k.jsx(Pe, { className: "sb-chevron-icon" })
1047
1178
  }
1048
1179
  )
1049
- ] }, o.value)),
1050
- !l && m.length > 0 && !t && /* @__PURE__ */ W.jsx("span", { className: "sb-single-value", children: m[0].label }),
1051
- /* @__PURE__ */ W.jsx("input", { ref: X, type: "text", value: t, onChange: (o) => a(o.target.value), onFocus: d, onKeyDown: G, placeholder: m.length === 0 ? n : "", disabled: c, className: "sb-input" }),
1052
- /* @__PURE__ */ W.jsx("div", { className: "sb-indicators", children: b ? /* @__PURE__ */ W.jsxs("svg", { className: "sb-loading-icon", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", children: [
1053
- /* @__PURE__ */ W.jsx("title", { children: "Loading" }),
1054
- /* @__PURE__ */ W.jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
1055
- /* @__PURE__ */ W.jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
1056
- ] }) : /* @__PURE__ */ W.jsx(Ye, { className: "sb-chevron-icon" }) })
1180
+ ] })
1057
1181
  ]
1058
1182
  }
1059
1183
  );
1060
- }, He = (e) => {
1061
- const { isOpen: l, setIsOpen: t, query: a, setQuery: r, containerRef: d, handleSelect: n, handleRemove: c } = Ve(e), { filteredOptions: b, isSearching: X } = Re(e.options, a);
1062
- return /* @__PURE__ */ W.jsxs("div", { ref: d, className: `sb-container ${e.className || ""}`, children: [
1063
- /* @__PURE__ */ W.jsx(
1064
- ve,
1184
+ }, Be = (e) => {
1185
+ const { isOpen: t, setIsOpen: r, query: s, setQuery: a, containerRef: o, handleSelect: n, handleRemove: l, handleClear: d, toggleOpen: p } = Re(e), { filteredOptions: g, isSearching: x } = Te(e.options, s, e.workerUrls);
1186
+ return /* @__PURE__ */ k.jsxs("div", { ref: o, className: `sb-container ${e.className || ""}`, children: [
1187
+ /* @__PURE__ */ k.jsx(
1188
+ ze,
1065
1189
  {
1066
1190
  value: e.value,
1067
1191
  multiple: e.multiple,
1068
- query: a,
1192
+ query: s,
1069
1193
  onQueryChange: (m) => {
1070
- r(m), l || t(!0);
1194
+ a(m), t || r(!0);
1071
1195
  },
1072
- onRemove: c,
1073
- onFocus: () => t(!0),
1196
+ onRemove: l,
1197
+ onClear: d,
1198
+ onFocus: () => r(!0),
1074
1199
  placeholder: e.placeholder,
1075
1200
  disabled: e.disabled,
1076
- isLoading: X
1201
+ isLoading: x,
1202
+ clearable: e.clearable,
1203
+ onToggle: p,
1204
+ autoFocus: e.autoFocus
1077
1205
  }
1078
1206
  ),
1079
- l && !e.disabled && /* @__PURE__ */ W.jsx(Le, { options: b, value: e.value, multiple: e.multiple, onSelect: n })
1207
+ t && !e.disabled && /* @__PURE__ */ k.jsx($e, { options: g, value: e.value, multiple: e.multiple, onSelect: n })
1080
1208
  ] });
1081
1209
  };
1082
1210
  export {
1083
- He as SelectBox
1211
+ Be as SelectBox
1084
1212
  };