signalk-questdb 2.3.2 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/README.md +92 -0
  3. package/dist/container-env.js +14 -0
  4. package/dist/container-env.js.map +1 -1
  5. package/dist/drained.d.ts +2 -0
  6. package/dist/drained.js +22 -0
  7. package/dist/drained.js.map +1 -0
  8. package/dist/ilp-writer.d.ts +2 -0
  9. package/dist/ilp-writer.js +48 -13
  10. package/dist/ilp-writer.js.map +1 -1
  11. package/dist/image-refresh.d.ts +35 -0
  12. package/dist/image-refresh.js +118 -0
  13. package/dist/image-refresh.js.map +1 -0
  14. package/dist/index.js +464 -136
  15. package/dist/index.js.map +1 -1
  16. package/dist/query-client.d.ts +12 -1
  17. package/dist/query-client.js +37 -3
  18. package/dist/query-client.js.map +1 -1
  19. package/dist/questdb-ready.d.ts +21 -0
  20. package/dist/questdb-ready.js +35 -0
  21. package/dist/questdb-ready.js.map +1 -0
  22. package/dist/questdb-watchdog.d.ts +73 -0
  23. package/dist/questdb-watchdog.js +308 -0
  24. package/dist/questdb-watchdog.js.map +1 -0
  25. package/dist/watchdog-checks.d.ts +50 -0
  26. package/dist/watchdog-checks.js +279 -0
  27. package/dist/watchdog-checks.js.map +1 -0
  28. package/package.json +3 -3
  29. package/public/assets/AppPanel-C293yEHl.js +1 -0
  30. package/public/assets/{PluginConfigurationPanel-DR-y5e3d.js → PluginConfigurationPanel-7qfy8fIR.js} +1 -1
  31. package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BH9mY6vj.js +1 -0
  32. package/public/assets/_virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__loadShare__shared-H1lSL0nN.js +1 -0
  33. package/public/assets/{_virtual_mf___mfe_internal__signalk_questdb__mf_owner__196689844091135__prebuild__react__prebuild__-eQjVI-Oj.js → _virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__prebuild__react__prebuild__-CTXDWPi7.js} +1 -1
  34. package/public/assets/{dist-C5M3fhBw.js → dist-BhVCbinB.js} +1 -1
  35. package/public/assets/helpers-CvnX61Ju.js +1 -0
  36. package/public/assets/{hostInit-3qWTwrQQ.js → hostInit-Ds8KD_fS.js} +1 -1
  37. package/public/assets/{index-D2iWq8nf.js → index-QJC86Uvi.js} +2 -2
  38. package/public/assets/{pendingShares-PvyVL1Z8.js → pendingShares-DemvETkM.js} +2 -2
  39. package/public/assets/rolldown-runtime-XKyaHtl9.js +1 -0
  40. package/public/assets/{utils-v9GZlbdk.js → utils-D62kKhzq.js} +1 -1
  41. package/public/remoteEntry.js +2 -2
  42. package/public/assets/AppPanel-Fvhb8xTK.js +0 -1
  43. package/public/assets/_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BUtmcsA-.js +0 -1
  44. package/public/assets/_virtual_mf___mfe_internal__signalk_questdb__mf_owner__196689844091135__loadShare__shared-BRI06Lxu.js +0 -8
  45. package/public/assets/helpers-oIxDNnZJ.js +0 -1
@@ -0,0 +1,279 @@
1
+ // The watchdog's look at a managed QuestDB and its restart of the container
2
+ // (questdb-watchdog.ts decides when). The plugin's state comes in through
3
+ // `deps`, so both can run against a fake container manager in tests.
4
+ import { globalMemoryLimitMessage, heldAtLimit, memoryLimitBytes, } from "./questdb-watchdog.js";
5
+ const DEFAULT_TIMING = {
6
+ silenceMs: 5 * 60_000,
7
+ evidenceMs: 10 * 60_000,
8
+ limitSilenceMs: 150_000,
9
+ containerCallMs: 60_000,
10
+ answerMs: 120_000,
11
+ pollMs: 1000,
12
+ };
13
+ // Native memory in use, as QuestDB's limit counts it.
14
+ const NATIVE_MEMORY_SQL = "SELECT sum(bytes) FROM memory_metrics() WHERE memory_tag LIKE 'NATIVE%'";
15
+ class Deadline extends Error {
16
+ }
17
+ // Rejects once `ms` passed; the call itself runs on, and its late failure is
18
+ // swallowed.
19
+ function bounded(call, ms, what) {
20
+ let timer;
21
+ return Promise.race([
22
+ call,
23
+ new Promise((_, reject) => {
24
+ timer = setTimeout(() => reject(new Deadline(`${what} did not finish within ${Math.round(ms / 1000)} s`)), ms);
25
+ }),
26
+ ]).finally(() => {
27
+ clearTimeout(timer);
28
+ call.catch(() => { });
29
+ });
30
+ }
31
+ const mib = (bytes) => Math.round(bytes / 1048576);
32
+ export class WatchdogChecks {
33
+ deps;
34
+ limit = null;
35
+ answeredAt;
36
+ seenEpoch;
37
+ // Set while the container may be down because of a stop of the
38
+ // watchdog's: from the moment restart() stops it until the container is
39
+ // seen running with none of those stops pending. While it is set, a
40
+ // stopped container is the watchdog's to start again, not someone else's
41
+ // to respect: a stop that outlives its deadline can still take the
42
+ // container down minutes later, and recording must not then stay off.
43
+ leftStopped;
44
+ now;
45
+ timing;
46
+ constructor(deps) {
47
+ this.deps = deps;
48
+ this.now = deps.now ?? (() => performance.now());
49
+ this.timing = { ...DEFAULT_TIMING, ...deps.timing };
50
+ this.answeredAt = this.now();
51
+ this.seenEpoch = deps.epoch();
52
+ this.leftStopped = deps.stops.pending > 0;
53
+ }
54
+ // A container stop of the watchdog's own, counted until it settles.
55
+ ownStop() {
56
+ const stops = this.deps.stops;
57
+ stops.pending++;
58
+ const stop = this.deps.containers.stop(this.deps.name);
59
+ stop
60
+ .catch(() => { })
61
+ .finally(() => {
62
+ stops.pending--;
63
+ });
64
+ return stop;
65
+ }
66
+ // QueryClient observers (QueryClientOptions).
67
+ noteResponse() {
68
+ this.answeredAt = this.now();
69
+ }
70
+ noteErrorResponse(body) {
71
+ const message = globalMemoryLimitMessage(body);
72
+ if (message)
73
+ this.noteLimit(message);
74
+ }
75
+ // From the WAL monitor: a table suspended at the limit names it even when
76
+ // no read of the plugin's hit it.
77
+ noteSuspended(tables) {
78
+ for (const table of tables) {
79
+ const message = globalMemoryLimitMessage(table.errorMessage);
80
+ if (message)
81
+ this.noteLimit(`${table.name}: ${message}`);
82
+ }
83
+ }
84
+ noteLimit(message) {
85
+ const bytes = memoryLimitBytes(message) ?? this.limit?.bytes;
86
+ if (bytes !== undefined)
87
+ this.limit = { message, bytes, at: this.now() };
88
+ }
89
+ recentLimit() {
90
+ const limit = this.limit;
91
+ return limit && this.now() - limit.at <= this.timing.evidenceMs
92
+ ? limit
93
+ : null;
94
+ }
95
+ async readState() {
96
+ try {
97
+ return await bounded(this.deps.containers.getState(this.deps.name), this.timing.containerCallMs, "reading the container state");
98
+ }
99
+ catch {
100
+ return "unknown";
101
+ }
102
+ }
103
+ // Whether native memory is still held at the limit, with what was read;
104
+ // held is false where it cannot be told.
105
+ async memoryHeld(client, limitBytes) {
106
+ try {
107
+ const result = await client.exec(NATIVE_MEMORY_SQL, 10_000);
108
+ const used = Number(result.dataset[0]?.[0]);
109
+ return Number.isFinite(used)
110
+ ? {
111
+ held: heldAtLimit(used, limitBytes),
112
+ detail: `native memory ${mib(used)} of ${mib(limitBytes)} MiB`,
113
+ }
114
+ : { held: false, detail: "" };
115
+ }
116
+ catch (err) {
117
+ // The read itself hit the limit: as held as it gets. Anything else,
118
+ // such as an older QuestDB without memory_metrics(), tells nothing.
119
+ const message = err instanceof Error ? err.message : String(err);
120
+ return globalMemoryLimitMessage(message)
121
+ ? { held: true, detail: "reading native memory hit the limit too" }
122
+ : { held: false, detail: "" };
123
+ }
124
+ }
125
+ async probe() {
126
+ const busy = this.deps.busy();
127
+ if (busy)
128
+ return { state: "skip", why: busy };
129
+ const client = this.deps.client();
130
+ if (!client)
131
+ return { state: "skip", why: "not connected" };
132
+ // Stops are only issued under the lock this check holds too (bar a
133
+ // restart a purge overran, see restart()), so the count can only fall
134
+ // during the read; one that fell may be a stop that ended just after the
135
+ // container read as running.
136
+ const pendingBefore = this.deps.stops.pending;
137
+ const state = await this.readState();
138
+ if (state === "running" &&
139
+ pendingBefore === 0 &&
140
+ this.deps.stops.pending === 0) {
141
+ // Running, and no stop of ours left to take it down: a later stop is
142
+ // someone else's.
143
+ this.leftStopped = false;
144
+ }
145
+ if (this.deps.epoch() !== this.seenEpoch) {
146
+ // An update recreated the container: the checks before it were about
147
+ // the old one, and the new one gets its full grace.
148
+ this.seenEpoch = this.deps.epoch();
149
+ this.answeredAt = this.now();
150
+ this.limit = null;
151
+ return { state: "skip", why: "the container was just recreated" };
152
+ }
153
+ if (state === "stopped" && this.leftStopped) {
154
+ return {
155
+ state: "unresponsive",
156
+ message: "the container is stopped since the watchdog stopped it",
157
+ };
158
+ }
159
+ if (state !== "running") {
160
+ return { state: "skip", why: `the container is ${state}` };
161
+ }
162
+ const health = await client.health();
163
+ const healthy = health.ok;
164
+ // Noted by the observer too, so recentLimit() below has it.
165
+ const healthHitLimit = health.error !== undefined &&
166
+ globalMemoryLimitMessage(health.error) !== null;
167
+ const limit = this.recentLimit();
168
+ const silentMs = () => this.now() - this.answeredAt;
169
+ if (limit) {
170
+ if (!healthy) {
171
+ if (healthHitLimit) {
172
+ // QuestDB answered the health check itself with the limit.
173
+ return {
174
+ state: "out-of-memory",
175
+ message: `${limit.message}; the health check hit it too`,
176
+ };
177
+ }
178
+ // How a leak ends: QuestDB stops answering altogether.
179
+ if (silentMs() >= this.timing.limitSilenceMs) {
180
+ return {
181
+ state: "out-of-memory",
182
+ message: `${limit.message}; QuestDB no longer answers`,
183
+ };
184
+ }
185
+ }
186
+ else {
187
+ const memory = await this.memoryHeld(client, limit.bytes);
188
+ if (memory.held) {
189
+ return {
190
+ state: "out-of-memory",
191
+ message: `${limit.message}; ${memory.detail}`,
192
+ };
193
+ }
194
+ }
195
+ }
196
+ if (healthy)
197
+ return { state: "ok" };
198
+ const silent = silentMs();
199
+ if (silent < this.timing.silenceMs) {
200
+ return {
201
+ state: "skip",
202
+ why: `QuestDB is busy: it answered ${Math.round(silent / 1000)} s ago`,
203
+ };
204
+ }
205
+ const endpoint = this.deps.endpoint();
206
+ return {
207
+ state: "unresponsive",
208
+ message: (endpoint ? `no answer at ${endpoint}` : "no answer") +
209
+ ` for ${Math.round(silent / 60_000)} min`,
210
+ };
211
+ }
212
+ async restart() {
213
+ const pluginStopping = {
214
+ state: "called-off",
215
+ why: "the plugin is stopping",
216
+ };
217
+ if (this.deps.ended())
218
+ return pluginStopping;
219
+ const { containers, name } = this.deps;
220
+ const state = await this.readState();
221
+ // A purge forces its teardown through once it has waited its while for
222
+ // the lock, and a new start can then run beside this restart: past this
223
+ // point a stop would hit that start's container.
224
+ if (this.deps.ended())
225
+ return pluginStopping;
226
+ if (state !== "running" && !(state === "stopped" && this.leftStopped)) {
227
+ return { state: "called-off", why: `the container is ${state}` };
228
+ }
229
+ if (state === "running" && this.deps.stops.pending > 0) {
230
+ // Another stop would only queue behind the one that hangs, and hold the
231
+ // lifecycle lock for its deadline each time this is tried again.
232
+ throw new Error("a stop sent earlier has not finished, and no other is sent until it has");
233
+ }
234
+ // A WAL skip validated against the container before the restart must
235
+ // not run against the one after it.
236
+ this.deps.bumpEpoch();
237
+ this.seenEpoch = this.deps.epoch();
238
+ if (state === "running") {
239
+ this.leftStopped = true;
240
+ await bounded(this.ownStop(), this.timing.containerCallMs, "stopping the container");
241
+ }
242
+ if (this.deps.ended())
243
+ return pluginStopping;
244
+ // The instance this start brings up gets its grace from here, also when
245
+ // the start misses its deadline and lands later; a limit the old
246
+ // instance hit is no evidence against it.
247
+ this.answeredAt = this.now();
248
+ this.limit = null;
249
+ await bounded(containers.start(name), this.timing.containerCallMs, "starting the container");
250
+ // Running now, by this start: only a stop of ours still pending can
251
+ // take it down again.
252
+ this.leftStopped = this.deps.stops.pending > 0;
253
+ if (this.deps.ended()) {
254
+ // The teardown stopped the container while this start was in flight;
255
+ // leave it stopped as the teardown meant it. Counted like any stop of
256
+ // ours, for the watchdog of the plugin's next start.
257
+ await bounded(this.ownStop(), this.timing.containerCallMs, "stopping the container").catch(() => { });
258
+ return pluginStopping;
259
+ }
260
+ // And from here, once the start is done.
261
+ this.answeredAt = this.now();
262
+ this.limit = null;
263
+ const deadline = this.now() + this.timing.answerMs;
264
+ while (this.now() < deadline) {
265
+ if (this.deps.ended())
266
+ return pluginStopping;
267
+ const client = this.deps.client();
268
+ if (client && (await client.health()).ok) {
269
+ // The ILP writer lost its connection with the old instance and is
270
+ // backing off; it need not wait out the backoff.
271
+ this.deps.reconnectWriter();
272
+ return { state: "answering" };
273
+ }
274
+ await new Promise((resolve) => setTimeout(resolve, this.timing.pollMs));
275
+ }
276
+ return { state: "not-answering" };
277
+ }
278
+ }
279
+ //# sourceMappingURL=watchdog-checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watchdog-checks.js","sourceRoot":"","sources":["../src/watchdog-checks.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "signalk-questdb",
3
- "version": "2.3.2",
3
+ "version": "2.4.0",
4
4
  "type": "module",
5
5
  "description": "QuestDB history provider for Signal K — replaces signalk-to-influxdb",
6
6
  "keywords": [
@@ -47,9 +47,9 @@
47
47
  },
48
48
  "dependencies": {
49
49
  "@js-temporal/polyfill": "^0.5.0",
50
- "minimatch": "^10.2.3",
50
+ "minimatch": "^11.0.3",
51
51
  "saxes": "^6.0.0",
52
- "signalk-container-helper": "^0.12.0",
52
+ "signalk-container-helper": "^0.14.0",
53
53
  "typebox": "^1.3.11"
54
54
  },
55
55
  "devDependencies": {
@@ -0,0 +1 @@
1
+ import{a as e,i as t,n}from"./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__loadShare__shared-H1lSL0nN.js";var r=`/plugins/signalk-questdb/console/`;function i(){let[i,a]=t(null);return n(()=>{let e=!1;return fetch(r,{method:`GET`}).then(t=>{e||a(t.ok)}).catch(()=>{e||a(!1)}),()=>{e=!0}},[]),i===null?e.createElement(`div`,{style:{padding:`1rem`}},`Loading QuestDB console…`):i?e.createElement(`iframe`,{src:r,title:`QuestDB Console`,style:{width:`100%`,height:`100%`,minHeight:`80vh`,border:0},sandbox:`allow-scripts allow-same-origin`}):e.createElement(`div`,{style:{padding:`1rem`,maxWidth:`40rem`}},e.createElement(`h4`,null,`QuestDB console unavailable`),e.createElement(`p`,null,`The console could not be loaded. The usual causes are that the QuestDB container is not running, or that the`,` `,e.createElement(`strong`,null,`QuestDB console webapp`),` option is switched off in the plugin configuration.`))}export{i as default};
@@ -1,4 +1,4 @@
1
- import{a as e,i as t,n,r,t as i}from"./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__196689844091135__loadShare__shared-BRI06Lxu.js";var a={root:{fontFamily:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,color:`#333`,padding:`16px 0`},sectionToggle:{color:`#555`,display:`flex`,alignItems:`center`,gap:6,width:`100%`,textAlign:`left`,background:`none`,border:`none`,padding:0,cursor:`pointer`,userSelect:`none`},sectionMarker:{fontSize:11,transition:`transform 0.15s`},sectionTitle:{fontSize:13,fontWeight:600,color:`#888`,textTransform:`uppercase`,letterSpacing:`0.05em`,marginBottom:10,marginTop:24},btn:{display:`inline-flex`,alignItems:`center`,gap:8,padding:`8px 16px`,border:`none`,borderRadius:6,fontSize:13,fontWeight:600,cursor:`pointer`},btnPrimary:{background:`#3b82f6`,color:`#fff`},btnSecondary:{background:`#f1f5f9`,color:`#475569`,border:`1px solid #e2e8f0`},btnWarn:{background:`#f59e0b`,color:`#fff`},btnDanger:{background:`#ef4444`,color:`#fff`},btnDisabled:{opacity:.5,cursor:`not-allowed`},btnSmall:{padding:`4px 12px`,fontSize:12},status:{marginTop:8,fontSize:12,minHeight:18},card:{display:`flex`,alignItems:`center`,gap:14,padding:`14px 18px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:12},cardIcon:{width:44,height:44,borderRadius:10,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:20,fontWeight:700,flexShrink:0},cardInfo:{flex:1},cardTitle:{fontSize:15,fontWeight:600,color:`#333`},cardMeta:{fontSize:12,color:`#888`},stateIndicator:{width:10,height:10,borderRadius:`50%`,flexShrink:0},fieldRow:{display:`flex`,alignItems:`center`,gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:`#555`,width:180,flexShrink:0},select:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`,minWidth:200},input:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`,width:200},inputSmall:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`,width:80},checkbox:{width:16,height:16,accentColor:`#3b82f6`},hint:{fontSize:11,color:`#aaa`,marginLeft:8},link:{color:`#3b82f6`,textDecoration:`none`,fontSize:13,fontWeight:600},textarea:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,fontFamily:`monospace`,background:`#fff`,color:`#333`,width:`100%`,minHeight:70,boxSizing:`border-box`,resize:`vertical`},empty:{textAlign:`center`,padding:`30px 16px`,color:`#999`,fontSize:13},tag:{display:`inline-block`,padding:`2px 8px`,borderRadius:4,fontSize:10,fontWeight:600,marginLeft:8},tagPre:{background:`#fef3c7`,color:`#92400e`},tagLatest:{background:`#dcfce7`,color:`#166534`},warnBanner:{padding:`12px 16px`,background:`#fef2f2`,border:`1px solid #fecaca`,borderRadius:10,marginBottom:12,fontSize:13,color:`#991b1b`,lineHeight:1.5},warnBannerTitle:{fontWeight:700,marginBottom:4},infoBanner:{padding:`12px 16px`,background:`#fffbeb`,border:`1px solid #fde68a`,borderRadius:10,marginBottom:12,fontSize:13,color:`#92400e`,lineHeight:1.5},bannerCode:{display:`block`,marginTop:8,padding:`8px 10px`,background:`#fff`,border:`1px solid #fecaca`,borderRadius:6,fontFamily:`monospace`,fontSize:12,color:`#7f1d1d`,whiteSpace:`pre-wrap`,wordBreak:`break-word`},statsGrid:{display:`grid`,gridTemplateColumns:`repeat(auto-fit, minmax(140px, 1fr))`,gap:10,marginBottom:12},statCard:{padding:`12px 16px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,textAlign:`center`},statValue:{fontSize:22,fontWeight:700,color:`#333`},statLabel:{fontSize:11,color:`#888`,marginTop:2}},o={ok:`#10b981`,warn:`#f59e0b`,error:`#ef4444`};function s(e,t){if(!e)return{versions:null,versionsError:`⚠ Could not reach GitHub — showing last known versions, retry`};let n=t&&typeof t==`object`?t:{},r=Array.isArray(n)?n:Array.isArray(n.versions)?n.versions:[],i=!Array.isArray(n)&&n.sources&&typeof n.sources==`object`?n.sources:{},a=``;return i.prImages===`rate-limited`?a=`⚠ GitHub rate-limited — PR test images temporarily unavailable, retry shortly`:i.releases===`rate-limited`?a=`⚠ GitHub rate-limited — some versions temporarily unavailable, retry shortly`:(i.prImages===`error`||i.releases===`error`)&&(a=`⚠ Could not fetch some versions from GitHub, retry`),{versions:r,versionsError:a}}function c(e,t={}){let{stableCount:n=5,preCount:r=3}=t,i=e.filter(e=>typeof e.pr==`number`),a=e.filter(e=>typeof e.pr!=`number`);return{prVersions:i,stableVersions:a.filter(e=>!e.prerelease).slice(0,n),preVersions:a.filter(e=>e.prerelease).slice(0,r)}}function l(e,t=[`latest`],n={}){let{prVersions:r,stableVersions:i,preVersions:a}=c(e,n);return new Set([...t,...a.map(e=>e.tag),...i.map(e=>e.tag),...r.map(e=>e.tag)])}function u(e,t,n=[`latest`],r={}){return e?l(t,n,r).has(e)?null:e:null}function d(e){return e==null?`—`:e>=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`K`:String(e)}function f(e,a={}){let{intervalMs:o=5e3}=a,[s,c]=t(null),[l,u]=t(!0),d=r(0),f=r(a.fallback??null),p=i(async t=>{let n=++d.current,r=f.current;try{let n=await(await fetch(e,{signal:t})).json().catch(()=>null);n&&typeof n==`object`&&(r=n)}catch{}n===d.current&&(c(r),u(!1))},[e]);return n(()=>{let e=!1,t=null,n=new AbortController,r=async()=>{await p(n.signal),!e&&o>0&&(t=setTimeout(()=>void r(),o))};return r(),()=>{e=!0,n.abort(),t&&clearTimeout(t)}},[p,o]),{status:s,loading:l,refresh:()=>p()}}function p(e){let[a,o]=t([]),[c,l]=t(``),[u,d]=t(!1),f=r(0),p=i(async()=>{let t=++f.current;d(!0);try{let n=await fetch(e),r=await n.json().catch(()=>null),i=s(n.ok,r);if(t!==f.current)return;i.versions!==null&&o(i.versions),l(i.versionsError)}catch{if(t!==f.current)return;l(`⚠ Offline — showing last known versions`)}d(!1)},[e]);return n(()=>{p()},[p]),{versions:a,versionsError:c,loading:u,refresh:p}}function m({children:t,color:n}){return e.createElement(`span`,{style:{...a.hint,...n?{color:n}:{}}},t)}function h({state:t=`ok`,color:n,title:r,style:i}){return e.createElement(`div`,{style:{...a.stateIndicator,background:n??o[t],...i},title:r})}function g({icon:t,iconBackground:n,iconColor:r,title:i,meta:s,state:c=`ok`,stateTitle:l,link:u,children:d}){let f=c===`error`&&!n;return e.createElement(`div`,{style:a.card},e.createElement(`div`,{style:{...a.cardIcon,background:f?`#fef2f2`:n??`#3b82f6`,color:f?o.error:r??`#fff`}},t),e.createElement(`div`,{style:a.cardInfo},e.createElement(`div`,{style:a.cardTitle},i),s!=null&&e.createElement(`div`,{style:a.cardMeta},s)),d,u&&e.createElement(`a`,{href:u.href,target:`_blank`,rel:`noopener noreferrer`,style:a.link},u.label),e.createElement(h,{state:c,title:l}))}function _({title:n,defaultOpen:r=!1,children:i}){let[o,s]=t(r);return e.createElement(`div`,null,e.createElement(`button`,{type:`button`,"aria-expanded":o,style:{...a.sectionTitle,...a.sectionToggle},onClick:()=>s(!o)},e.createElement(`span`,{style:{...a.sectionMarker,transform:o?`rotate(90deg)`:`rotate(0deg)`}},`▶`),n),o&&e.createElement(`div`,{style:{marginBottom:16}},i))}var v={primary:a.btnPrimary,secondary:a.btnSecondary,warn:a.btnWarn,danger:a.btnDanger};function y({variant:t=`primary`,small:n=!1,busy:r=!1,busyLabel:i,disabled:o=!1,onClick:s,title:c,style:l,children:u}){let d=o||r;return e.createElement(`button`,{type:`button`,style:{...a.btn,...v[t],...n?a.btnSmall:{},...d?a.btnDisabled:{},...l},onClick:s,disabled:d,title:c},r?i??u:u)}function b({message:t,error:n=!1,style:r}){return t?e.createElement(`div`,{style:{...a.status,color:n?o.error:o.ok,marginTop:16,...r}},t):null}var x=[{tag:`latest`,label:`latest (recommended)`}];function S({value:t,onChange:n,versions:r,floatingOptions:i=x,stableCount:s,preCount:l,loading:d=!1,error:f,onRefresh:p,disabled:h=!1,style:g}){let _={stableCount:s,preCount:l},{prVersions:v,stableVersions:b,preVersions:S}=c(r,_),C=u(t,r,i.map(e=>e.tag),_);return e.createElement(e.Fragment,null,e.createElement(`select`,{style:{...a.select,...g},value:t,onChange:e=>n(e.target.value),disabled:h},i.map(t=>e.createElement(`option`,{key:t.tag,value:t.tag},t.label??t.tag)),S.map(t=>e.createElement(`option`,{key:t.tag,value:t.tag},t.tag,` (pre-release)`)),b.map((t,n)=>e.createElement(`option`,{key:t.tag,value:t.tag},t.tag,n===0?` (current stable)`:``)),v.length>0&&e.createElement(`optgroup`,{label:`PR test images`},v.map(t=>e.createElement(`option`,{key:t.tag,value:t.tag},t.tag,t.title?` — ${t.title}`:``))),C&&e.createElement(`option`,{value:C},C,` (running)`)),d&&e.createElement(m,null,`loading releases...`),p&&e.createElement(y,{small:!0,style:{padding:`4px 10px`,fontSize:11},onClick:p,title:`Refresh available versions`},`↻`),f&&e.createElement(m,{color:o.error},f))}var C={...a,warnBannerCode:{display:`block`,marginTop:8,padding:`8px 10px`,background:`#fff`,border:`1px solid #fecaca`,borderRadius:6,fontFamily:`monospace`,fontSize:12,color:`#7f1d1d`,whiteSpace:`pre-wrap`,wordBreak:`break-word`},fieldHelp:{fontSize:12,color:`#666`,marginTop:6,lineHeight:1.5},migrationItem:{display:`flex`,alignItems:`center`,gap:12,padding:`12px 16px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:8},migrationActions:{display:`flex`,gap:8,alignItems:`center`}},ee=8388608,te=3e5,w=3e5,T=1,E={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function ne(e){return e.replace(/&(?:#(\d+)|#x([0-9a-fA-F]+)|(amp|lt|gt|quot|apos));/g,(e,t,n,r)=>{if(r!==void 0)return E[r];let i=t===void 0?Number.parseInt(n,16):Number(t);return i<=1114111?String.fromCodePoint(i):e})}function re(e){return/^AIS\b/.test(e)||/^\d{9}$/.test(e)}var D=/[^\s/>]+/y,ie=[`trkpt`,`time`,`trkseg`,`trk`,`name`,`gpx`];function ae(e,t){for(let n of ie)if(e.startsWith(n,t)){let r=e.charCodeAt(t+n.length);if(r<=32||r===47||r===62)return n}D.lastIndex=t;let n=D.exec(e)?.[0]??``,r=n.indexOf(`:`);return r>=0?n.slice(r+1):n}function oe(e,t,n,r){let i=e.indexOf(t,n);for(;i>=0&&i<r;){let n=e.charCodeAt(i-1),a=i+t.length;for(;e.charCodeAt(a)===32;)a++;if((n===32||n===9||n===10||n===13)&&e.charCodeAt(a)===61){let t=a+1;for(;e.charCodeAt(t)===32;)t++;let n=e[t];if(n!==`"`&&n!==`'`)return NaN;let i=e.indexOf(n,t+1);return i>0&&i<r?Number(e.slice(t+1,i)):NaN}i=e.indexOf(t,i+1)}return NaN}async function se(e,t=()=>{},n,r=ee){let i=new Map,a=new TextDecoder(`utf-8`),o=[],s=``,c=``,l=!1,u=[],d=(e,t)=>{if(C!==2){c+=e;return}let n=u[u.length-1];n&&n.cdata===t?n.value+=e:u.push({value:e,cdata:t})},f=null,p=null,m=null,h=0,g=0,_=``,v=-1/0,y=``,b=NaN,x=e=>{p=e;let t=i.get(e);t||(t={name:e,tracks:0,points:0,from:null,to:null,samples:[]},i.set(e,t)),t.tracks++,f=t,v=-1/0},S=()=>{let e=f,t=m;if(m=null,!e||t===null)return;e.points++;let n=_.trim(),r=n.slice(0,16);r!==y&&(y=r,b=Date.parse(n));let i=b;if(Number.isFinite(i)&&((e.from===null||i<e.from)&&(e.from=i),(e.to===null||i>e.to)&&(e.to=i),i-v>=te)){let r=oe(t,`lat`,h,g),a=oe(t,`lon`,h,g);Number.isFinite(r)&&Number.isFinite(a)&&(e.samples.push(Date.parse(n),r,a),v=i)}},C=0,w=()=>{let e=o.length;return e<2||o[0]!==`gpx`||o[1]!==`trk`?0:e===2?1:e===3?o[2]===`name`?2:o[2]===`trkseg`?3:0:o[2]!==`trkseg`||o[3]!==`trkpt`?0:e===4?4:e===5&&o[4]===`time`?5:0},T=(e,t)=>{let n=s+e,r=0;for(;;){let e=n.indexOf(`<`,r);if(e<0){l&&d(n.slice(r),!1),s=``;return}l&&d(n.slice(r,e),!1);let i=null,a=n.charCodeAt(e+1);(a===33||a===63)&&(n.startsWith(`<!--`,e)?i=`-->`:n.startsWith(`<![CDATA[`,e)?i=`]]>`:a===63&&(i=`?>`));let v=i?n.indexOf(i,e):n.indexOf(`>`,e);if(v<0){s=t?``:n.slice(e);return}let y=v+(i?i.length:1);i===`]]>`&&l&&d(n.slice(e+9,v),!0),r=y,!i&&(a===47?(C===2&&p===null?x(u.map(e=>e.cdata?e.value:ne(e.value)).join(``).trim()):C===5?_=c:C===4?S():C===1&&(f=null),o.pop()):a!==33&&(o.push(ae(n,e+1)),C=w(),C===1?(p=null,f=null):C===3&&p===null?x(``):C===4&&(m=n,h=e,g=v,_=``),n.charCodeAt(v-1)===47&&(C===4&&S(),o.pop())),C=w(),c=``,u=[],l=C===2||C===5)}};for(let i=0;i<e.size;i+=r){if(n?.aborted)throw new DOMException(`Scan aborted`,`AbortError`);let o=new Uint8Array(await e.slice(i,i+r).arrayBuffer());T(a.decode(o,{stream:!0}),!1),t(Math.min(e.size,i+r))}return T(a.decode(),!0),de([...i.values()])}function O(e,t,n,r){let i=Math.PI/180,a=Math.sin((n-e)*i/2)**2+Math.cos(e*i)*Math.cos(n*i)*Math.sin((r-t)*i/2)**2;return 12742*Math.asin(Math.min(1,Math.sqrt(a)))}function ce(e){let t=[];for(let n=0;n<e.length;n+=3)t.push([e[n],e[n+1],e[n+2]]);return t.sort((e,t)=>e[0]-t[0])}function le(e,t,n){let r=e[t],i=e[t+1];if(r&&i&&r[0]<=n&&n<=i[0]&&i[0]-r[0]<=2*w){let e=i[0]===r[0]?0:(n-r[0])/(i[0]-r[0]),t=i[2]-r[2];return t>180?t-=360:t<-180&&(t+=360),[r[1]+e*(i[1]-r[1]),r[2]+e*t]}let a=[r,i].filter(e=>e!==void 0&&Math.abs(e[0]-n)<=w).sort((e,t)=>Math.abs(e[0]-n)-Math.abs(t[0]-n))[0];return a?[a[1],a[2]]:null}function ue(e,t){let n=[],r=0;for(let[i,a,o]of e){for(;r<t.length-1&&t[r+1][0]<=i;)r++;let e=le(t,r,i);e&&n.push({km:O(a,o,e[0],e[1]),at:i})}return n.length===0?null:{km:[...n].sort((e,t)=>e.km-t.km)[Math.floor(n.length/2)].km,at:n[0].at}}function de(e){let t=[...e].sort((e,t)=>t.points-e.points),n=new Map(e.map(e=>[e,ce(e.samples)])),r=t.find(e=>!re(e.name)&&e.name!==``);return t.map(e=>{let i=re(e.name),a=null;if(!i)for(let r of t){if(r===e)break;if(re(r.name))continue;let t=ue(n.get(e),n.get(r));if(t&&t.km>T){a={name:r.name,...t};break}}let o=!i&&a===null&&(e===r||e.tracks>=2&&e.name!==``);return{name:e.name,tracks:e.tracks,points:e.points,from:e.from,to:e.to,otherVessel:i,conflict:a,selected:o}})}var k=`/plugins/signalk-questdb/api/gpx-import`,fe=5,pe=2e3,A=class extends Error{status;constructor(e,t){super(e),this.status=t}};async function j(e){try{return await e.json()}catch{return{error:`${e.status} ${e.statusText}`}}}async function me(e){let t=e.fetch??fetch,n=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),{file:r,signal:i}=e,a=e.sliceBytes??4194304,o=await t(k,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({filename:e.filename,size:r.size,tracks:e.tracks,fillGapsOnly:e.fillGapsOnly})}),s=await j(o);if(!o.ok||!s.import)throw new A(s.error??`The import could not start`,s.import??null);let c=s.import;e.onStatus(c);let l=`${k}/${encodeURIComponent(c.id)}`,u=async()=>{throw await t(l,{method:`DELETE`}).catch(()=>void 0),new DOMException(`The import was aborted`,`AbortError`)},d=0;for(;c.received<r.size;){i.aborted&&await u();let o=c.received,s;try{let e=await r.slice(o,o+a).arrayBuffer();s=await t(`${l}?offset=${o}`,{method:`PUT`,headers:{"content-type":`application/octet-stream`},body:e})}catch(e){if(i.aborted&&await u(),++d>fe)throw e;await n(pe);let r=await t(k).then(j,()=>null);r?.import?.id===c.id&&(c=r.import);continue}let f=await j(s);if(s.status===409&&f.import?.state===`receiving`){if(f.import.received===o){if(++d>fe)throw new A(f.error??`The slice at byte ${o} was refused`,f.import);await n(pe)}c=f.import}else{if(!s.ok||!f.import)throw new A(f.error??`The slice at byte ${o} was refused`,f.import??null);d=0,c=f.import,e.onStatus(c)}}i.aborted&&await u();let f;try{f=await t(`${l}/finish`,{method:`POST`,signal:i})}catch(e){throw i.aborted&&await u(),e}let p=await j(f);if(i.aborted&&await u(),!f.ok||!p.import||p.import.state!==`finished`)throw new A(p.error??`The import could not finish`,p.import??null);return e.onStatus(p.import),p.import}var M=e=>e===null?`?`:new Date(e).toISOString().slice(0,10),he=(e,t)=>t>0?Math.min(100,Math.floor(e/t*100)):0,ge={receiving:`Importing`,finishing:`Finishing`,finished:`Import complete`,failed:`Import failed`,aborted:`Import aborted`};function _e({value:t}){return e.createElement(`div`,{role:`progressbar`,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":100,style:{height:8,background:`#e5e7eb`,borderRadius:4,overflow:`hidden`,margin:`8px 0`}},e.createElement(`div`,{style:{width:`${t}%`,height:`100%`,background:`#2563eb`}}))}function ve({status:t}){let n=t.summary;return e.createElement(`div`,{style:{...C.empty,padding:`12px`,textAlign:`left`}},e.createElement(`div`,null,e.createElement(`strong`,null,ge[t.state]),t.filename?` — ${t.filename}`:``),t.state===`receiving`&&e.createElement(_e,{value:he(t.received,t.size)}),e.createElement(`div`,{style:C.cardMeta},(t.received/1e6).toFixed(0),` of `,(t.size/1e6).toFixed(0),` `,`MB read · `,d(n.imported),` rows written ·`,` `,d(n.alreadyRecorded),` points already recorded ·`,` `,d(n.invalid),` invalid`),n.from&&n.to&&e.createElement(`div`,{style:C.cardMeta},`From `,n.from.slice(0,10),` to `,n.to.slice(0,10)),t.error&&e.createElement(`div`,{style:{...C.cardMeta,color:`#b91c1c`}},t.error))}function ye({archiveResolutionSeconds:i}){let[a,o]=t(null),[s,c]=t(0),[l,u]=t(null),[f,p]=t(new Set),[m,h]=t(!0),[g,_]=t(null),[v,b]=t(null),[x,S]=t(null),[ee,te]=t(!1),w=r(null),T=r(null),E=r(0);n(()=>{let e=!1,t=E.current;return fetch(k).then(e=>e.json()).then(n=>{!e&&t===E.current&&n.import&&_(n.import)}).catch(()=>void 0),()=>{e=!0,T.current?.abort()}},[]);let ne=v!==`importing`&&(g?.state===`receiving`||g?.state===`finishing`);n(()=>{if(!ne)return;let e=setInterval(()=>{let e=E.current;fetch(k).then(e=>e.json()).then(t=>{e===E.current&&t.import&&_(t.import)}).catch(()=>void 0)},2e3);return()=>clearInterval(e)},[ne]);let re=async e=>{T.current?.abort();let t=new AbortController;T.current=t,o(e),u(null),S(null),c(0),b(`scanning`);try{let n=await se(e,c,t.signal);u(n),p(new Set(n.filter(e=>e.selected).map(e=>e.name)))}catch(e){t.signal.aborted||S(e instanceof Error?e.message:String(e))}finally{T.current===t&&(T.current=null),b(null)}},D=async()=>{if(!a)return;let e=++E.current,t=new AbortController;w.current=t,S(null),b(`importing`);try{await me({file:a,filename:a.name,tracks:[...f],fillGapsOnly:m,onStatus:_,signal:t.signal})}catch(e){e instanceof A&&e.status&&_(e.status),t.signal.aborted||S(e instanceof Error?e.message:String(e))}finally{w.current===t&&(w.current=null),b(null)}let n=await fetch(k).then(e=>e.json()).catch(()=>null);e===E.current&&n?.import&&_(n.import)},ie=async()=>{if(E.current++,w.current?.abort(),g){let e=await(await fetch(`${k}/${encodeURIComponent(g.id)}`,{method:`DELETE`}).catch(()=>null))?.json().catch(()=>null);e?.import&&_(e.import)}},ae=e=>p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),oe=g?.state===`receiving`||g?.state===`finishing`,O=l?.filter(e=>e.otherVessel)??[];return e.createElement(`div`,null,e.createElement(`div`,{style:{fontSize:13,color:`#555`,marginBottom:10}},`Import a track exported from a chartplotter (GPX) into the archive, where retention never drops it. Points are thinned to one per`,` `,i>0?`${i} s`:`recorded point`,` `,`(Archive resolution). The file is read here first, so you choose which tracks are your own before anything is uploaded.`),e.createElement(`div`,{style:C.fieldRow},e.createElement(`span`,{style:C.label},`GPX file`),e.createElement(`input`,{type:`file`,accept:`.gpx,application/gpx+xml`,"aria-label":`GPX file`,disabled:v!==null,onChange:e=>{let t=e.target.files?.[0];t&&re(t)}})),v===`scanning`&&a&&e.createElement(`div`,{style:C.cardMeta},`Reading `,a.name,`…`,e.createElement(_e,{value:he(s,a.size)})),l&&e.createElement(e.Fragment,null,e.createElement(`div`,{style:{...C.label,width:`auto`,margin:`10px 0 6px`}},`Tracks in the file, by name`),e.createElement(`table`,{style:{width:`100%`,fontSize:13,borderSpacing:0}},e.createElement(`thead`,null,e.createElement(`tr`,{style:{textAlign:`left`,color:`#666`}},e.createElement(`th`,null),e.createElement(`th`,null,`Name`),e.createElement(`th`,null,`Tracks`),e.createElement(`th`,null,`Points`),e.createElement(`th`,null,`Period`),e.createElement(`th`,null))),e.createElement(`tbody`,null,l.filter(e=>!e.otherVessel||ee).map(t=>e.createElement(`tr`,{key:t.name},e.createElement(`td`,null,e.createElement(`input`,{type:`checkbox`,style:C.checkbox,"aria-label":`Import ${t.name||`(no name)`}`,checked:f.has(t.name),disabled:v!==null,onChange:()=>ae(t.name)})),e.createElement(`td`,null,t.name||e.createElement(`em`,null,`(no name)`)),e.createElement(`td`,null,d(t.tracks)),e.createElement(`td`,null,d(t.points)),e.createElement(`td`,null,M(t.from),` – `,M(t.to)),e.createElement(`td`,{style:{color:`#92400e`}},t.otherVessel?`AIS target`:t.conflict?`${Math.round(t.conflict.km).toLocaleString()} km from “${t.conflict.name}” on ${M(t.conflict.at)}: another vessel?`:``))),O.length>0&&e.createElement(`tr`,null,e.createElement(`td`,null),e.createElement(`td`,{colSpan:5},e.createElement(`button`,{type:`button`,style:{...C.link,background:`none`,border:0,padding:0},onClick:()=>te(e=>!e)},ee?`Hide`:`Show`,` `,O.length,` AIS target`,O.length===1?``:`s`,` (`,d(O.reduce((e,t)=>e+t.points,0)),` `,`points)`))))),e.createElement(`div`,{style:{...C.fieldRow,marginTop:10}},e.createElement(`span`,{style:C.label},`Skip recorded times`),e.createElement(`input`,{type:`checkbox`,style:C.checkbox,"aria-label":`Skip times already recorded`,checked:m,disabled:v!==null,onChange:e=>h(e.target.checked)}),e.createElement(`span`,{style:C.hint},`leave out points where QuestDB already has positions of the vessel within the same five minutes`)),e.createElement(`div`,{style:{display:`flex`,gap:8}},e.createElement(y,{variant:`primary`,busy:v===`importing`,busyLabel:`Importing…`,disabled:f.size===0||v!==null||oe,onClick:()=>void D()},`Import ${f.size} track name${f.size===1?``:`s`}`))),x&&e.createElement(`div`,{style:{...C.cardMeta,color:`#b91c1c`,marginTop:8}},x),g&&e.createElement(`div`,{style:{marginTop:10}},e.createElement(ve,{status:g}),oe&&e.createElement(y,{variant:`warn`,small:!0,onClick:()=>void ie()},`Abort`)))}var N=e=>typeof e==`object`&&!!e;function be(e){let t=N(e)?e.sources:void 0;return Array.isArray(t)?t.filter(e=>N(e)&&typeof e.type==`string`&&typeof e.url==`string`&&typeof e.status==`string`&&(e.version===void 0||typeof e.version==`string`)):[]}function xe(e){let t=N(e)?e.buckets:void 0;return Array.isArray(t)?t.filter(e=>N(e)&&typeof e.name==`string`&&(e.id===void 0||typeof e.id==`string`)&&(e.retentionSeconds===void 0||typeof e.retentionSeconds==`number`)):[]}function Se(e){let t=N(e)?e.measurements:void 0;return Array.isArray(t)?t.filter(e=>N(e)&&typeof e.name==`string`&&Array.isArray(e.fields)):[]}function P(e){let t=N(e)?e.run:void 0;if(!N(t)||typeof t.id!=`string`||typeof t.state!=`string`)return;let n=t.state;if(n!==`running`&&n!==`done`&&n!==`failed`&&n!==`cancelled`)return;let r=N(t.progress)?t.progress:{},i=e=>typeof e==`number`&&Number.isFinite(e)?e:0,a=e=>typeof e==`string`?e:void 0;return{id:t.id,state:n,url:a(t.url)??``,bucket:a(t.bucket)??``,startedAt:a(t.startedAt)??``,finishedAt:a(t.finishedAt),error:a(t.error),resumedFrom:N(t.resumedFrom)?{measurement:a(t.resumedFrom.measurement),windowStart:a(t.resumedFrom.windowStart)}:void 0,progress:{read:i(r.read),written:i(r.written),skipped:i(r.skipped),measurementsDone:i(r.measurementsDone),measurementsTotal:i(r.measurementsTotal),currentMeasurement:a(r.currentMeasurement),currentWindowStart:a(r.currentWindowStart)}}}function Ce(e){let t=e=>typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):0;return{rows:t(N(e)?e.rows:void 0),dropped:t(N(e)?e.dropped:void 0)}}function we(e){let t=N(e)&&Array.isArray(e.contexts)?e.contexts.filter(e=>typeof e==`string`&&!!e):[],n=N(e)&&typeof e.self==`string`&&t.includes(e.self)?e.self:void 0;return{contexts:t,self:n,selfBy:n!==void 0&&N(e)&&(e.selfBy===`tag`||e.selfBy===`identity`)?e.selfBy:void 0}}function F(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function Te(e){let t=N(e)?e.interrupted:void 0;if(N(t)&&typeof t.url==`string`&&typeof t.type==`string`&&typeof t.bucket==`string`&&typeof t.from==`string`&&typeof t.to==`string`&&typeof t.updatedAt==`string`)return{url:t.url,type:t.type,bucket:t.bucket,from:t.from,to:t.to,updatedAt:t.updatedAt,measurementsDone:typeof t.measurementsDone==`number`&&Number.isFinite(t.measurementsDone)?t.measurementsDone:0,measurement:typeof t.measurement==`string`?t.measurement:void 0,windowStart:typeof t.windowStart==`string`?t.windowStart:void 0}}function Ee(e,t){let n=new Date(e),r=new Date(t);return Number.isNaN(n.getTime())||Number.isNaN(r.getTime())?{error:`Enter a valid From and To date for the import.`}:r<=n?{error:`The To date must be after the From date.`}:{from:n.toISOString(),to:r.toISOString()}}function I(e){return e instanceof Error?e.message:String(e)}function L(e,t){return e??t}var De=[`none`,`lz4`,`zstd`],Oe={padding:`4px 12px`,fontSize:12};function ke(e){return De.includes(e)?e:`lz4`}function Ae({configuration:a,save:o}){let s=a||{},[c,l]=t(s.questdbHost||`127.0.0.1`),[u,m]=t(s.questdbIlpPort||9009),[h,v]=t(s.questdbHttpPort||9e3),[x,ee]=t(s.questdbPgPort||8812),[te,w]=t(s.questdbVersion||`latest`),[T,E]=t(s.managedContainer!==!1),[ne,re]=t(s.recordSelf!==!1),[D,ie]=t(s.recordOthers!==!1),[ae,oe]=t(s.restoreOnStart===!0),[se,O]=t(s.enableConsole!==!1),[ce,le]=t(s.historySourcePolicyAll===!0),[ue,de]=t((s.restoreMaxAgeMinutes??0)>0?s.restoreMaxAgeMinutes:9),[k,fe]=t(s.defaultSamplingRate??2e3),[pe,A]=t(String(s.ilpFlushIntervalMs??5e3)),[j,me]=t(String(s.unchangedHeartbeatSeconds??300)),[M,he]=t(s.retentionDays||0),[ge,_e]=t(s.archiveOwnTrack!==!1),[ve,N]=t((Array.isArray(s.archivePaths)?s.archivePaths:[]).join(`
1
+ import{a as e,i as t,n,r,t as i}from"./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__loadShare__shared-H1lSL0nN.js";var a={root:{fontFamily:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,color:`#333`,padding:`16px 0`},sectionToggle:{color:`#555`,display:`flex`,alignItems:`center`,gap:6,width:`100%`,textAlign:`left`,background:`none`,border:`none`,padding:0,cursor:`pointer`,userSelect:`none`},sectionMarker:{fontSize:11,transition:`transform 0.15s`},sectionTitle:{fontSize:13,fontWeight:600,color:`#888`,textTransform:`uppercase`,letterSpacing:`0.05em`,marginBottom:10,marginTop:24},btn:{display:`inline-flex`,alignItems:`center`,gap:8,padding:`8px 16px`,border:`none`,borderRadius:6,fontSize:13,fontWeight:600,cursor:`pointer`},btnPrimary:{background:`#3b82f6`,color:`#fff`},btnSecondary:{background:`#f1f5f9`,color:`#475569`,border:`1px solid #e2e8f0`},btnWarn:{background:`#f59e0b`,color:`#fff`},btnDanger:{background:`#ef4444`,color:`#fff`},btnDisabled:{opacity:.5,cursor:`not-allowed`},btnSmall:{padding:`4px 12px`,fontSize:12},status:{marginTop:8,fontSize:12,minHeight:18},card:{display:`flex`,alignItems:`center`,gap:14,padding:`14px 18px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:12},cardIcon:{width:44,height:44,borderRadius:10,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:20,fontWeight:700,flexShrink:0},cardInfo:{flex:1},cardTitle:{fontSize:15,fontWeight:600,color:`#333`},cardMeta:{fontSize:12,color:`#888`},stateIndicator:{width:10,height:10,borderRadius:`50%`,flexShrink:0},fieldRow:{display:`flex`,alignItems:`center`,gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:`#555`,width:180,flexShrink:0},select:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`,minWidth:200},input:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`,width:200},inputSmall:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`,width:80},checkbox:{width:16,height:16,accentColor:`#3b82f6`},hint:{fontSize:11,color:`#aaa`,marginLeft:8},link:{color:`#3b82f6`,textDecoration:`none`,fontSize:13,fontWeight:600},textarea:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,fontFamily:`monospace`,background:`#fff`,color:`#333`,width:`100%`,minHeight:70,boxSizing:`border-box`,resize:`vertical`},empty:{textAlign:`center`,padding:`30px 16px`,color:`#999`,fontSize:13},tag:{display:`inline-block`,padding:`2px 8px`,borderRadius:4,fontSize:10,fontWeight:600,marginLeft:8},tagPre:{background:`#fef3c7`,color:`#92400e`},tagLatest:{background:`#dcfce7`,color:`#166534`},warnBanner:{padding:`12px 16px`,background:`#fef2f2`,border:`1px solid #fecaca`,borderRadius:10,marginBottom:12,fontSize:13,color:`#991b1b`,lineHeight:1.5},warnBannerTitle:{fontWeight:700,marginBottom:4},infoBanner:{padding:`12px 16px`,background:`#fffbeb`,border:`1px solid #fde68a`,borderRadius:10,marginBottom:12,fontSize:13,color:`#92400e`,lineHeight:1.5},bannerCode:{display:`block`,marginTop:8,padding:`8px 10px`,background:`#fff`,border:`1px solid #fecaca`,borderRadius:6,fontFamily:`monospace`,fontSize:12,color:`#7f1d1d`,whiteSpace:`pre-wrap`,wordBreak:`break-word`},statsGrid:{display:`grid`,gridTemplateColumns:`repeat(auto-fit, minmax(140px, 1fr))`,gap:10,marginBottom:12},statCard:{padding:`12px 16px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,textAlign:`center`},statValue:{fontSize:22,fontWeight:700,color:`#333`},statLabel:{fontSize:11,color:`#888`,marginTop:2}},o={ok:`#10b981`,warn:`#f59e0b`,error:`#ef4444`};function s(e,t){if(!e)return{versions:null,versionsError:`⚠ Could not reach GitHub — showing last known versions, retry`};let n=t&&typeof t==`object`?t:{},r=Array.isArray(n)?n:Array.isArray(n.versions)?n.versions:[],i=!Array.isArray(n)&&n.sources&&typeof n.sources==`object`?n.sources:{},a=``;return i.prImages===`rate-limited`?a=`⚠ GitHub rate-limited — PR test images temporarily unavailable, retry shortly`:i.releases===`rate-limited`?a=`⚠ GitHub rate-limited — some versions temporarily unavailable, retry shortly`:(i.prImages===`error`||i.releases===`error`)&&(a=`⚠ Could not fetch some versions from GitHub, retry`),{versions:r,versionsError:a}}function c(e,t={}){let{stableCount:n=5,preCount:r=3}=t,i=e.filter(e=>typeof e.pr==`number`),a=e.filter(e=>typeof e.pr!=`number`);return{prVersions:i,stableVersions:a.filter(e=>!e.prerelease).slice(0,n),preVersions:a.filter(e=>e.prerelease).slice(0,r)}}function l(e,t=[`latest`],n={}){let{prVersions:r,stableVersions:i,preVersions:a}=c(e,n);return new Set([...t,...a.map(e=>e.tag),...i.map(e=>e.tag),...r.map(e=>e.tag)])}function u(e,t,n=[`latest`],r={}){return e?l(t,n,r).has(e)?null:e:null}function d(e){return e==null?`—`:e>=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`K`:String(e)}function f(e,a={}){let{intervalMs:o=5e3}=a,[s,c]=t(null),[l,u]=t(!0),d=r(0),f=r(a.fallback??null),p=i(async t=>{let n=++d.current,r=f.current;try{let n=await(await fetch(e,{signal:t})).json().catch(()=>null);n&&typeof n==`object`&&(r=n)}catch{}n===d.current&&(c(r),u(!1))},[e]);return n(()=>{let e=!1,t=null,n=new AbortController,r=async()=>{await p(n.signal),!e&&o>0&&(t=setTimeout(()=>void r(),o))};return r(),()=>{e=!0,n.abort(),t&&clearTimeout(t)}},[p,o]),{status:s,loading:l,refresh:()=>p()}}function p(e){let[a,o]=t([]),[c,l]=t(``),[u,d]=t(!1),f=r(0),p=i(async()=>{let t=++f.current;d(!0);try{let n=await fetch(e),r=await n.json().catch(()=>null),i=s(n.ok,r);if(t!==f.current)return;i.versions!==null&&o(i.versions),l(i.versionsError)}catch{if(t!==f.current)return;l(`⚠ Offline — showing last known versions`)}d(!1)},[e]);return n(()=>{p()},[p]),{versions:a,versionsError:c,loading:u,refresh:p}}function m({children:t,color:n}){return e.createElement(`span`,{style:{...a.hint,...n?{color:n}:{}}},t)}function h({state:t=`ok`,color:n,title:r,style:i}){return e.createElement(`div`,{style:{...a.stateIndicator,background:n??o[t],...i},title:r})}function g({icon:t,iconBackground:n,iconColor:r,title:i,meta:s,state:c=`ok`,stateTitle:l,link:u,children:d}){let f=c===`error`&&!n;return e.createElement(`div`,{style:a.card},e.createElement(`div`,{style:{...a.cardIcon,background:f?`#fef2f2`:n??`#3b82f6`,color:f?o.error:r??`#fff`}},t),e.createElement(`div`,{style:a.cardInfo},e.createElement(`div`,{style:a.cardTitle},i),s!=null&&e.createElement(`div`,{style:a.cardMeta},s)),d,u&&e.createElement(`a`,{href:u.href,target:`_blank`,rel:`noopener noreferrer`,style:a.link},u.label),e.createElement(h,{state:c,title:l}))}function _({title:n,defaultOpen:r=!1,children:i}){let[o,s]=t(r);return e.createElement(`div`,null,e.createElement(`button`,{type:`button`,"aria-expanded":o,style:{...a.sectionTitle,...a.sectionToggle},onClick:()=>s(!o)},e.createElement(`span`,{style:{...a.sectionMarker,transform:o?`rotate(90deg)`:`rotate(0deg)`}},`▶`),n),o&&e.createElement(`div`,{style:{marginBottom:16}},i))}var v={primary:a.btnPrimary,secondary:a.btnSecondary,warn:a.btnWarn,danger:a.btnDanger};function y({variant:t=`primary`,small:n=!1,busy:r=!1,busyLabel:i,disabled:o=!1,onClick:s,title:c,style:l,children:u}){let d=o||r;return e.createElement(`button`,{type:`button`,style:{...a.btn,...v[t],...n?a.btnSmall:{},...d?a.btnDisabled:{},...l},onClick:s,disabled:d,title:c},r?i??u:u)}function b({message:t,error:n=!1,style:r}){return t?e.createElement(`div`,{style:{...a.status,color:n?o.error:o.ok,marginTop:16,...r}},t):null}var x=[{tag:`latest`,label:`latest (recommended)`}];function S({value:t,onChange:n,versions:r,floatingOptions:i=x,stableCount:s,preCount:l,loading:d=!1,error:f,onRefresh:p,disabled:h=!1,style:g}){let _={stableCount:s,preCount:l},{prVersions:v,stableVersions:b,preVersions:S}=c(r,_),C=u(t,r,i.map(e=>e.tag),_);return e.createElement(e.Fragment,null,e.createElement(`select`,{style:{...a.select,...g},value:t,onChange:e=>n(e.target.value),disabled:h},i.map(t=>e.createElement(`option`,{key:t.tag,value:t.tag},t.label??t.tag)),S.map(t=>e.createElement(`option`,{key:t.tag,value:t.tag},t.tag,` (pre-release)`)),b.map((t,n)=>e.createElement(`option`,{key:t.tag,value:t.tag},t.tag,n===0?` (current stable)`:``)),v.length>0&&e.createElement(`optgroup`,{label:`PR test images`},v.map(t=>e.createElement(`option`,{key:t.tag,value:t.tag},t.tag,t.title?` — ${t.title}`:``))),C&&e.createElement(`option`,{value:C},C,` (running)`)),d&&e.createElement(m,null,`loading releases...`),p&&e.createElement(y,{small:!0,style:{padding:`4px 10px`,fontSize:11},onClick:p,title:`Refresh available versions`},`↻`),f&&e.createElement(m,{color:o.error},f))}var C={...a,warnBannerCode:{display:`block`,marginTop:8,padding:`8px 10px`,background:`#fff`,border:`1px solid #fecaca`,borderRadius:6,fontFamily:`monospace`,fontSize:12,color:`#7f1d1d`,whiteSpace:`pre-wrap`,wordBreak:`break-word`},fieldHelp:{fontSize:12,color:`#666`,marginTop:6,lineHeight:1.5},migrationItem:{display:`flex`,alignItems:`center`,gap:12,padding:`12px 16px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:8},migrationActions:{display:`flex`,gap:8,alignItems:`center`}},ee=8388608,te=3e5,w=3e5,T=1,E={amp:`&`,lt:`<`,gt:`>`,quot:`"`,apos:`'`};function ne(e){return e.replace(/&(?:#(\d+)|#x([0-9a-fA-F]+)|(amp|lt|gt|quot|apos));/g,(e,t,n,r)=>{if(r!==void 0)return E[r];let i=t===void 0?Number.parseInt(n,16):Number(t);return i<=1114111?String.fromCodePoint(i):e})}function re(e){return/^AIS\b/.test(e)||/^\d{9}$/.test(e)}var D=/[^\s/>]+/y,ie=[`trkpt`,`time`,`trkseg`,`trk`,`name`,`gpx`];function ae(e,t){for(let n of ie)if(e.startsWith(n,t)){let r=e.charCodeAt(t+n.length);if(r<=32||r===47||r===62)return n}D.lastIndex=t;let n=D.exec(e)?.[0]??``,r=n.indexOf(`:`);return r>=0?n.slice(r+1):n}function oe(e,t,n,r){let i=e.indexOf(t,n);for(;i>=0&&i<r;){let n=e.charCodeAt(i-1),a=i+t.length;for(;e.charCodeAt(a)===32;)a++;if((n===32||n===9||n===10||n===13)&&e.charCodeAt(a)===61){let t=a+1;for(;e.charCodeAt(t)===32;)t++;let n=e[t];if(n!==`"`&&n!==`'`)return NaN;let i=e.indexOf(n,t+1);return i>0&&i<r?Number(e.slice(t+1,i)):NaN}i=e.indexOf(t,i+1)}return NaN}async function se(e,t=()=>{},n,r=ee){let i=new Map,a=new TextDecoder(`utf-8`),o=[],s=``,c=``,l=!1,u=[],d=(e,t)=>{if(C!==2){c+=e;return}let n=u[u.length-1];n&&n.cdata===t?n.value+=e:u.push({value:e,cdata:t})},f=null,p=null,m=null,h=0,g=0,_=``,v=-1/0,y=``,b=NaN,x=e=>{p=e;let t=i.get(e);t||(t={name:e,tracks:0,points:0,from:null,to:null,samples:[]},i.set(e,t)),t.tracks++,f=t,v=-1/0},S=()=>{let e=f,t=m;if(m=null,!e||t===null)return;e.points++;let n=_.trim(),r=n.slice(0,16);r!==y&&(y=r,b=Date.parse(n));let i=b;if(Number.isFinite(i)&&((e.from===null||i<e.from)&&(e.from=i),(e.to===null||i>e.to)&&(e.to=i),i-v>=te)){let r=oe(t,`lat`,h,g),a=oe(t,`lon`,h,g);Number.isFinite(r)&&Number.isFinite(a)&&(e.samples.push(Date.parse(n),r,a),v=i)}},C=0,w=()=>{let e=o.length;return e<2||o[0]!==`gpx`||o[1]!==`trk`?0:e===2?1:e===3?o[2]===`name`?2:o[2]===`trkseg`?3:0:o[2]!==`trkseg`||o[3]!==`trkpt`?0:e===4?4:e===5&&o[4]===`time`?5:0},T=(e,t)=>{let n=s+e,r=0;for(;;){let e=n.indexOf(`<`,r);if(e<0){l&&d(n.slice(r),!1),s=``;return}l&&d(n.slice(r,e),!1);let i=null,a=n.charCodeAt(e+1);(a===33||a===63)&&(n.startsWith(`<!--`,e)?i=`-->`:n.startsWith(`<![CDATA[`,e)?i=`]]>`:a===63&&(i=`?>`));let v=i?n.indexOf(i,e):n.indexOf(`>`,e);if(v<0){s=t?``:n.slice(e);return}let y=v+(i?i.length:1);i===`]]>`&&l&&d(n.slice(e+9,v),!0),r=y,i||(a===47?(C===2&&p===null?x(u.map(e=>e.cdata?e.value:ne(e.value)).join(``).trim()):C===5?_=c:C===4?S():C===1&&(f=null),o.pop()):a!==33&&(o.push(ae(n,e+1)),C=w(),C===1?(p=null,f=null):C===3&&p===null?x(``):C===4&&(m=n,h=e,g=v,_=``),n.charCodeAt(v-1)===47&&(C===4&&S(),o.pop())),C=w(),c=``,u=[],l=C===2||C===5)}};for(let i=0;i<e.size;i+=r){if(n?.aborted)throw new DOMException(`Scan aborted`,`AbortError`);let o=new Uint8Array(await e.slice(i,i+r).arrayBuffer());T(a.decode(o,{stream:!0}),!1),t(Math.min(e.size,i+r))}return T(a.decode(),!0),de([...i.values()])}function O(e,t,n,r){let i=Math.PI/180,a=Math.sin((n-e)*i/2)**2+Math.cos(e*i)*Math.cos(n*i)*Math.sin((r-t)*i/2)**2;return 12742*Math.asin(Math.min(1,Math.sqrt(a)))}function ce(e){let t=[];for(let n=0;n<e.length;n+=3)t.push([e[n],e[n+1],e[n+2]]);return t.sort((e,t)=>e[0]-t[0])}function le(e,t,n){let r=e[t],i=e[t+1];if(r&&i&&r[0]<=n&&n<=i[0]&&i[0]-r[0]<=2*w){let e=i[0]===r[0]?0:(n-r[0])/(i[0]-r[0]),t=i[2]-r[2];return t>180?t-=360:t<-180&&(t+=360),[r[1]+e*(i[1]-r[1]),r[2]+e*t]}let a=[r,i].filter(e=>e!==void 0&&Math.abs(e[0]-n)<=w).sort((e,t)=>Math.abs(e[0]-n)-Math.abs(t[0]-n))[0];return a?[a[1],a[2]]:null}function ue(e,t){let n=[],r=0;for(let[i,a,o]of e){for(;r<t.length-1&&t[r+1][0]<=i;)r++;let e=le(t,r,i);e&&n.push({km:O(a,o,e[0],e[1]),at:i})}return n.length===0?null:{km:[...n].sort((e,t)=>e.km-t.km)[Math.floor(n.length/2)].km,at:n[0].at}}function de(e){let t=[...e].sort((e,t)=>t.points-e.points),n=new Map(e.map(e=>[e,ce(e.samples)])),r=t.find(e=>!re(e.name)&&e.name!==``);return t.map(e=>{let i=re(e.name),a=null;if(!i)for(let r of t){if(r===e)break;if(re(r.name))continue;let t=ue(n.get(e),n.get(r));if(t&&t.km>T){a={name:r.name,...t};break}}let o=!i&&a===null&&(e===r||e.tracks>=2&&e.name!==``);return{name:e.name,tracks:e.tracks,points:e.points,from:e.from,to:e.to,otherVessel:i,conflict:a,selected:o}})}var k=`/plugins/signalk-questdb/api/gpx-import`,fe=5,pe=2e3,A=class extends Error{status;constructor(e,t){super(e),this.status=t}};async function j(e){try{return await e.json()}catch{return{error:`${e.status} ${e.statusText}`}}}async function me(e){let t=e.fetch??fetch,n=e.sleep??(e=>new Promise(t=>setTimeout(t,e))),{file:r,signal:i}=e,a=e.sliceBytes??4194304,o=await t(k,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({filename:e.filename,size:r.size,tracks:e.tracks,fillGapsOnly:e.fillGapsOnly})}),s=await j(o);if(!o.ok||!s.import)throw new A(s.error??`The import could not start`,s.import??null);let c=s.import;e.onStatus(c);let l=`${k}/${encodeURIComponent(c.id)}`,u=async()=>{throw await t(l,{method:`DELETE`}).catch(()=>void 0),new DOMException(`The import was aborted`,`AbortError`)},d=0;for(;c.received<r.size;){i.aborted&&await u();let o=c.received,s;try{let e=await r.slice(o,o+a).arrayBuffer();s=await t(`${l}?offset=${o}`,{method:`PUT`,headers:{"content-type":`application/octet-stream`},body:e})}catch(e){if(i.aborted&&await u(),++d>fe)throw e;await n(pe);let r=await t(k).then(j,()=>null);r?.import?.id===c.id&&(c=r.import);continue}let f=await j(s);if(s.status===409&&f.import?.state===`receiving`){if(f.import.received===o){if(++d>fe)throw new A(f.error??`The slice at byte ${o} was refused`,f.import);await n(pe)}c=f.import}else{if(!s.ok||!f.import)throw new A(f.error??`The slice at byte ${o} was refused`,f.import??null);d=0,c=f.import,e.onStatus(c)}}i.aborted&&await u();let f;try{f=await t(`${l}/finish`,{method:`POST`,signal:i})}catch(e){throw i.aborted&&await u(),e}let p=await j(f);if(i.aborted&&await u(),!f.ok||!p.import||p.import.state!==`finished`)throw new A(p.error??`The import could not finish`,p.import??null);return e.onStatus(p.import),p.import}var M=e=>e===null?`?`:new Date(e).toISOString().slice(0,10),he=(e,t)=>t>0?Math.min(100,Math.floor(e/t*100)):0,ge={receiving:`Importing`,finishing:`Finishing`,finished:`Import complete`,failed:`Import failed`,aborted:`Import aborted`};function _e({value:t}){return e.createElement(`div`,{role:`progressbar`,"aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":100,style:{height:8,background:`#e5e7eb`,borderRadius:4,overflow:`hidden`,margin:`8px 0`}},e.createElement(`div`,{style:{width:`${t}%`,height:`100%`,background:`#2563eb`}}))}function ve({status:t}){let n=t.summary;return e.createElement(`div`,{style:{...C.empty,padding:`12px`,textAlign:`left`}},e.createElement(`div`,null,e.createElement(`strong`,null,ge[t.state]),t.filename?` — ${t.filename}`:``),t.state===`receiving`&&e.createElement(_e,{value:he(t.received,t.size)}),e.createElement(`div`,{style:C.cardMeta},(t.received/1e6).toFixed(0),` of `,(t.size/1e6).toFixed(0),` `,`MB read · `,d(n.imported),` rows written ·`,` `,d(n.alreadyRecorded),` points already recorded ·`,` `,d(n.invalid),` invalid`),n.from&&n.to&&e.createElement(`div`,{style:C.cardMeta},`From `,n.from.slice(0,10),` to `,n.to.slice(0,10)),t.error&&e.createElement(`div`,{style:{...C.cardMeta,color:`#b91c1c`}},t.error))}function ye({archiveResolutionSeconds:i}){let[a,o]=t(null),[s,c]=t(0),[l,u]=t(null),[f,p]=t(new Set),[m,h]=t(!0),[g,_]=t(null),[v,b]=t(null),[x,S]=t(null),[ee,te]=t(!1),w=r(null),T=r(null),E=r(0);n(()=>{let e=!1,t=E.current;return fetch(k).then(e=>e.json()).then(n=>{!e&&t===E.current&&n.import&&_(n.import)}).catch(()=>void 0),()=>{e=!0,T.current?.abort()}},[]);let ne=v!==`importing`&&(g?.state===`receiving`||g?.state===`finishing`);n(()=>{if(!ne)return;let e=setInterval(()=>{let e=E.current;fetch(k).then(e=>e.json()).then(t=>{e===E.current&&t.import&&_(t.import)}).catch(()=>void 0)},2e3);return()=>clearInterval(e)},[ne]);let re=async e=>{T.current?.abort();let t=new AbortController;T.current=t,o(e),u(null),S(null),c(0),b(`scanning`);try{let n=await se(e,c,t.signal);u(n),p(new Set(n.filter(e=>e.selected).map(e=>e.name)))}catch(e){t.signal.aborted||S(e instanceof Error?e.message:String(e))}finally{T.current===t&&(T.current=null),b(null)}},D=async()=>{if(!a)return;let e=++E.current,t=new AbortController;w.current=t,S(null),b(`importing`);try{await me({file:a,filename:a.name,tracks:[...f],fillGapsOnly:m,onStatus:_,signal:t.signal})}catch(e){e instanceof A&&e.status&&_(e.status),t.signal.aborted||S(e instanceof Error?e.message:String(e))}finally{w.current===t&&(w.current=null),b(null)}let n=await fetch(k).then(e=>e.json()).catch(()=>null);e===E.current&&n?.import&&_(n.import)},ie=async()=>{if(E.current++,w.current?.abort(),g){let e=await(await fetch(`${k}/${encodeURIComponent(g.id)}`,{method:`DELETE`}).catch(()=>null))?.json().catch(()=>null);e?.import&&_(e.import)}},ae=e=>p(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),oe=g?.state===`receiving`||g?.state===`finishing`,O=l?.filter(e=>e.otherVessel)??[];return e.createElement(`div`,null,e.createElement(`div`,{style:{fontSize:13,color:`#555`,marginBottom:10}},`Import a track exported from a chartplotter (GPX) into the archive, where retention never drops it. Points are thinned to one per`,` `,i>0?`${i} s`:`recorded point`,` `,`(Archive resolution). The file is read here first, so you choose which tracks are your own before anything is uploaded.`),e.createElement(`div`,{style:C.fieldRow},e.createElement(`span`,{style:C.label},`GPX file`),e.createElement(`input`,{type:`file`,accept:`.gpx,application/gpx+xml`,"aria-label":`GPX file`,disabled:v!==null,onChange:e=>{let t=e.target.files?.[0];t&&re(t)}})),v===`scanning`&&a&&e.createElement(`div`,{style:C.cardMeta},`Reading `,a.name,`…`,e.createElement(_e,{value:he(s,a.size)})),l&&e.createElement(e.Fragment,null,e.createElement(`div`,{style:{...C.label,width:`auto`,margin:`10px 0 6px`}},`Tracks in the file, by name`),e.createElement(`table`,{style:{width:`100%`,fontSize:13,borderSpacing:0}},e.createElement(`thead`,null,e.createElement(`tr`,{style:{textAlign:`left`,color:`#666`}},e.createElement(`th`,null),e.createElement(`th`,null,`Name`),e.createElement(`th`,null,`Tracks`),e.createElement(`th`,null,`Points`),e.createElement(`th`,null,`Period`),e.createElement(`th`,null))),e.createElement(`tbody`,null,l.filter(e=>!e.otherVessel||ee).map(t=>e.createElement(`tr`,{key:t.name},e.createElement(`td`,null,e.createElement(`input`,{type:`checkbox`,style:C.checkbox,"aria-label":`Import ${t.name||`(no name)`}`,checked:f.has(t.name),disabled:v!==null,onChange:()=>ae(t.name)})),e.createElement(`td`,null,t.name||e.createElement(`em`,null,`(no name)`)),e.createElement(`td`,null,d(t.tracks)),e.createElement(`td`,null,d(t.points)),e.createElement(`td`,null,M(t.from),` – `,M(t.to)),e.createElement(`td`,{style:{color:`#92400e`}},t.otherVessel?`AIS target`:t.conflict?`${Math.round(t.conflict.km).toLocaleString()} km from “${t.conflict.name}” on ${M(t.conflict.at)}: another vessel?`:``))),O.length>0&&e.createElement(`tr`,null,e.createElement(`td`,null),e.createElement(`td`,{colSpan:5},e.createElement(`button`,{type:`button`,style:{...C.link,background:`none`,border:0,padding:0},onClick:()=>te(e=>!e)},ee?`Hide`:`Show`,` `,O.length,` AIS target`,O.length===1?``:`s`,` (`,d(O.reduce((e,t)=>e+t.points,0)),` `,`points)`))))),e.createElement(`div`,{style:{...C.fieldRow,marginTop:10}},e.createElement(`span`,{style:C.label},`Skip recorded times`),e.createElement(`input`,{type:`checkbox`,style:C.checkbox,"aria-label":`Skip times already recorded`,checked:m,disabled:v!==null,onChange:e=>h(e.target.checked)}),e.createElement(`span`,{style:C.hint},`leave out points where QuestDB already has positions of the vessel within the same five minutes`)),e.createElement(`div`,{style:{display:`flex`,gap:8}},e.createElement(y,{variant:`primary`,busy:v===`importing`,busyLabel:`Importing…`,disabled:f.size===0||v!==null||oe,onClick:()=>void D()},`Import ${f.size} track name${f.size===1?``:`s`}`))),x&&e.createElement(`div`,{style:{...C.cardMeta,color:`#b91c1c`,marginTop:8}},x),g&&e.createElement(`div`,{style:{marginTop:10}},e.createElement(ve,{status:g}),oe&&e.createElement(y,{variant:`warn`,small:!0,onClick:()=>void ie()},`Abort`)))}var N=e=>typeof e==`object`&&!!e;function be(e){let t=N(e)?e.sources:void 0;return Array.isArray(t)?t.filter(e=>N(e)&&typeof e.type==`string`&&typeof e.url==`string`&&typeof e.status==`string`&&(e.version===void 0||typeof e.version==`string`)):[]}function xe(e){let t=N(e)?e.buckets:void 0;return Array.isArray(t)?t.filter(e=>N(e)&&typeof e.name==`string`&&(e.id===void 0||typeof e.id==`string`)&&(e.retentionSeconds===void 0||typeof e.retentionSeconds==`number`)):[]}function Se(e){let t=N(e)?e.measurements:void 0;return Array.isArray(t)?t.filter(e=>N(e)&&typeof e.name==`string`&&Array.isArray(e.fields)):[]}function P(e){let t=N(e)?e.run:void 0;if(!N(t)||typeof t.id!=`string`||typeof t.state!=`string`)return;let n=t.state;if(n!==`running`&&n!==`done`&&n!==`failed`&&n!==`cancelled`)return;let r=N(t.progress)?t.progress:{},i=e=>typeof e==`number`&&Number.isFinite(e)?e:0,a=e=>typeof e==`string`?e:void 0;return{id:t.id,state:n,url:a(t.url)??``,bucket:a(t.bucket)??``,startedAt:a(t.startedAt)??``,finishedAt:a(t.finishedAt),error:a(t.error),resumedFrom:N(t.resumedFrom)?{measurement:a(t.resumedFrom.measurement),windowStart:a(t.resumedFrom.windowStart)}:void 0,progress:{read:i(r.read),written:i(r.written),skipped:i(r.skipped),measurementsDone:i(r.measurementsDone),measurementsTotal:i(r.measurementsTotal),currentMeasurement:a(r.currentMeasurement),currentWindowStart:a(r.currentWindowStart)}}}function Ce(e){let t=e=>typeof e==`number`&&Number.isFinite(e)&&e>0?Math.floor(e):0;return{rows:t(N(e)?e.rows:void 0),dropped:t(N(e)?e.dropped:void 0)}}function we(e){let t=N(e)&&Array.isArray(e.contexts)?e.contexts.filter(e=>typeof e==`string`&&!!e):[],n=N(e)&&typeof e.self==`string`&&t.includes(e.self)?e.self:void 0;return{contexts:t,self:n,selfBy:n!==void 0&&N(e)&&(e.selfBy===`tag`||e.selfBy===`identity`)?e.selfBy:void 0}}function F(e){let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function Te(e){let t=N(e)?e.interrupted:void 0;if(N(t)&&typeof t.url==`string`&&typeof t.type==`string`&&typeof t.bucket==`string`&&typeof t.from==`string`&&typeof t.to==`string`&&typeof t.updatedAt==`string`)return{url:t.url,type:t.type,bucket:t.bucket,from:t.from,to:t.to,updatedAt:t.updatedAt,measurementsDone:typeof t.measurementsDone==`number`&&Number.isFinite(t.measurementsDone)?t.measurementsDone:0,measurement:typeof t.measurement==`string`?t.measurement:void 0,windowStart:typeof t.windowStart==`string`?t.windowStart:void 0}}function Ee(e,t){let n=new Date(e),r=new Date(t);return Number.isNaN(n.getTime())||Number.isNaN(r.getTime())?{error:`Enter a valid From and To date for the import.`}:r<=n?{error:`The To date must be after the From date.`}:{from:n.toISOString(),to:r.toISOString()}}function I(e){return e instanceof Error?e.message:String(e)}function L(e,t){return e??t}var De=[`none`,`lz4`,`zstd`],Oe={padding:`4px 12px`,fontSize:12};function ke(e){return De.includes(e)?e:`lz4`}function Ae({configuration:a,save:o}){let s=a||{},[c,l]=t(s.questdbHost||`127.0.0.1`),[u,m]=t(s.questdbIlpPort||9009),[h,v]=t(s.questdbHttpPort||9e3),[x,ee]=t(s.questdbPgPort||8812),[te,w]=t(s.questdbVersion||`latest`),[T,E]=t(s.managedContainer!==!1),[ne,re]=t(s.recordSelf!==!1),[D,ie]=t(s.recordOthers!==!1),[ae,oe]=t(s.restoreOnStart===!0),[se,O]=t(s.enableConsole!==!1),[ce,le]=t(s.historySourcePolicyAll===!0),[ue,de]=t((s.restoreMaxAgeMinutes??0)>0?s.restoreMaxAgeMinutes:9),[k,fe]=t(s.defaultSamplingRate??2e3),[pe,A]=t(String(s.ilpFlushIntervalMs??5e3)),[j,me]=t(String(s.unchangedHeartbeatSeconds??300)),[M,he]=t(s.retentionDays||0),[ge,_e]=t(s.archiveOwnTrack!==!1),[ve,N]=t((Array.isArray(s.archivePaths)?s.archivePaths:[]).join(`
2
2
  `)),[De,Ae]=t(String(s.archiveResolutionSeconds??10)),[je,Me]=t(s.pathFilter?.mode===`include`?`include`:`exclude`),[Ne,Pe]=t((Array.isArray(s.pathFilter?.paths)?s.pathFilter.paths:[]).join(`
3
3
  `)),[Fe,Ie]=t(s.compression||`lz4`),[Le,Re]=t(s.compressionLevel||3),[ze,Be]=t(s.networkName||`sk-network`),[Ve,He]=t(s.exposeToContainers||!1),{versions:Ue,versionsError:We,loading:Ge,refresh:Ke}=p(`/plugins/signalk-questdb/api/versions`),{status:R,loading:qe,refresh:Je}=f(`/plugins/signalk-questdb/api/status`,{fallback:{status:`not_running`},intervalMs:5e3}),[Ye,Xe]=t(null),[Ze,Qe]=t(!1),[z,$e]=t(``),[B,et]=t(null),[tt,nt]=t(``),[rt,it]=t(``),[at,ot]=t(``),[st,ct]=t(``),[lt,ut]=t(null),[V,dt]=t(``),[H,ft]=t(null),[pt,mt]=t(!1),[ht,gt]=t(!1),[U,_t]=t(null),[vt,yt]=t(``),[bt,xt]=t(!0),[St,Ct]=t(``),[wt,Tt]=t(``),[W,G]=t(null),[Et,Dt]=t(!1),[Ot,kt]=t(null),[At,jt]=t(!1),[K,q]=t(null),[Mt,J]=t(``),[Nt,Y]=t(!1),[X,Pt]=t(null),[Ft,It]=t(!1),[Lt,Rt]=t(!1),[zt,Bt]=t(!1),[Vt,Ht]=t(!1),[Ut,Z]=t(``),[Wt,Gt]=t(null),[Kt,qt]=t(!1),Jt=r(0),[Yt,Xt]=t(!1),Zt=i(async e=>{let t=++Jt.current;try{let n=await fetch(`/plugins/signalk-questdb/api/wal-diagnosis`,{signal:e});if(t!==Jt.current)return;if(n.ok){let e=await n.json();if(t!==Jt.current)return;Gt(e),qt(!1)}else qt(!0)}catch{t===Jt.current&&qt(!0)}},[]),Qt=!!(R&&R.status===`running`&&(R.suspendedTables||[]).length>0);n(()=>{if(!Qt){Gt(null),qt(!1);return}let e=!1,t=null,n=new AbortController,r=async()=>{await Zt(n.signal),e||(t=setTimeout(r,15e3))};return r(),()=>{e=!0,n.abort(),t&&clearTimeout(t)}},[Qt,Zt]);let $t=async(e,t)=>{let n=t.tailSkip?`
4
4
 
@@ -0,0 +1 @@
1
+ import"./dist-BhVCbinB.js";import{t as e}from"./vite-preload-helper-CRzLMJPS.js";var t=e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},n={react:async()=>await e(()=>import(`./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__prebuild__react__prebuild__-CTXDWPi7.js`),[],import.meta.url)},r={react:{name:`react`,version:`19.3.1`,scope:[`default`],loaded:!1,materialize:!0,eager:!1,from:`signalk_questdb`,canLiveRebind:!0,get(){let e=r.react;return e.lib?e.lib:(e.loading||=(async()=>{try{let{react:r}=n,i=t({...await r()});return i.__esModule!==!0&&Object.defineProperty(i,"__esModule",{value:!0,enumerable:!1}),e.lib=function(){return i},e.loaded=!0,e.lib}finally{e.loading=void 0}})(),e.loading)},shareConfig:{singleton:!0,requiredVersion:`^19.2.4`,strictVersion:!1,eager:!1}}},i=[];export{i as usedRemotes,r as usedShared};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./vite-preload-helper-CRzLMJPS.js";var n=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},r=Symbol.for(`module-federation.shared-cache-listeners`),i=e=>{let t=e[r];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,r,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},a=(e,t,n)=>{let r=i(e);(r[t.canonical]||=new Set).add(n)},o=Symbol.for(`module-federation.shared-cache-owners`),ee=e=>{let t=e[o];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,o,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},s=e=>{let t=[e,e?.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},te=(e,t)=>{if(e===t)return!0;let n=s(e),r=s(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},ne=(e,t,i,a)=>{let s=n(e,t);if(s!==void 0&&te(s,i))return i;e[t.canonical]=i;let ne=t.aliases||[];for(let t of ne)Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0});let c=e[o];a===void 0?c&&delete c[t.canonical]:ee(e)[t.canonical]=a;let l=e[r]?.[t.canonical];if(l)for(let e of l)e(i);return i},c=e({Activity:()=>oe,Children:()=>m,Component:()=>h,Fragment:()=>g,Profiler:()=>_,PureComponent:()=>v,StrictMode:()=>y,Suspense:()=>b,ViewTransition:()=>x,__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE:()=>S,__COMPILER_RUNTIME:()=>C,__moduleExports:()=>$,addTransitionType:()=>w,cache:()=>T,cacheSignal:()=>E,cloneElement:()=>D,createContext:()=>O,createElement:()=>k,createRef:()=>A,default:()=>p,forwardRef:()=>j,isValidElement:()=>M,lazy:()=>N,memo:()=>se,startTransition:()=>P,unstable_useCacheRefresh:()=>F,use:()=>I,useActionState:()=>L,useCallback:()=>R,useContext:()=>z,useDebugValue:()=>B,useDeferredValue:()=>V,useEffect:()=>H,useEffectEvent:()=>U,useId:()=>W,useImperativeHandle:()=>G,useInsertionEffect:()=>K,useLayoutEffect:()=>q,useMemo:()=>J,useOptimistic:()=>ce,useReducer:()=>le,useRef:()=>Y,useState:()=>X,useSyncExternalStore:()=>ue,useTransition:()=>de,version:()=>Z}),l=`__mf_init__virtual:mf:__mfe_internal__signalk_questdb__mf_owner__97224418320974__mf_v__runtimeInit__mf_v__.js__`,u=globalThis[l];if(!u){let e,t,n=new Promise((n,r)=>{e=n,t=r});u=globalThis[l]={initPromise:n,initResolve:e,initReject:t}}var re=u.initPromise,d=`__mf_module_cache__`;globalThis[d]||={share:{},remote:{}},globalThis[d].share||={},globalThis[d].remote||={};var f=globalThis[d],ie=e=>{let t=f.pendingShareLoads||=[];t.push(e);let n=()=>{let n=t.indexOf(e);n!==-1&&t.splice(n,1)};return e.then(n,n),e};for(let e of Object.keys(f.share))if(e.startsWith(`default:`)){let t=e.slice(8);f.share[t]===void 0&&(f.share[t]=f.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;f.share[t]===void 0&&(f.share[t]=f.share[e])}var ae=e=>{let t=(()=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`)break;let n=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(n.length>0&&n.some(e=>e!==void 0))break;t=e}return t})();return t&&Object.getPrototypeOf(t)===null?Object.assign({},t):t},p,oe,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,N,se,P,F,I,L,R,z,B,V,H,U,W,G,K,q,J,ce,le,Y,X,ue,de,Z,Q=e=>{$=e,oe=e.Activity,m=e.Children,h=e.Component,g=e.Fragment,_=e.Profiler,v=e.PureComponent,y=e.StrictMode,b=e.Suspense,x=e.ViewTransition,S=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,C=e.__COMPILER_RUNTIME,w=e.addTransitionType,T=e.cache,E=e.cacheSignal,D=e.cloneElement,O=e.createContext,k=e.createElement,A=e.createRef,j=e.forwardRef,M=e.isValidElement,N=e.lazy,se=e.memo,P=e.startTransition,F=e.unstable_useCacheRefresh,I=e.use,L=e.useActionState,R=e.useCallback,z=e.useContext,B=e.useDebugValue,V=e.useDeferredValue,H=e.useEffect,U=e.useEffectEvent,W=e.useId,G=e.useImperativeHandle,K=e.useInsertionEffect,q=e.useLayoutEffect,J=e.useMemo,ce=e.useOptimistic,le=e.useReducer,Y=e.useRef,X=e.useState,ue=e.useSyncExternalStore,de=e.useTransition,Z=e.version,p=e.default??e};a(f.share,{canonical:`default:react`,aliases:[`react`]},Q);var $=n(f.share,{canonical:`default:react`,aliases:[`react`]});$===void 0?ie(re.then(()=>{if($=n(f.share,{canonical:`default:react`,aliases:[`react`]}),$!==void 0)Q($);else return t(()=>import(`./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__prebuild__react__prebuild__-CTXDWPi7.js`).then(e=>{$=ae(e),ne(f.share,{canonical:`default:react`,aliases:[`react`]},$,`signalk_questdb`)}),[],import.meta.url)})):Q($);export{p as a,X as i,H as n,c as o,Y as r,R as t};
@@ -1 +1 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n)),u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function M(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function N(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function P(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,P(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+M(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),P(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+M(a,u),c+=P(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+M(a,u++),c+=P(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return P(N(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function F(e,t,n){if(e==null)return e;var r=[],i=0;return P(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function I(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var L=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function R(e){var t=T.T,n={};n.types=t===null?null:t.types,T.T=n;try{var r=e(),i=T.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(w,L)}catch(e){L(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),T.T=t}}function z(e){var t=T.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else R(z.bind(null,e))}var B={map:F,forEach:function(e,t,n){F(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return F(e,function(){t++}),t},toArray:function(e){return F(e,function(e){return e})||[]},only:function(e){if(!k(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=B,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=T,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return T.H.useMemoCache(e)}},e.addTransitionType=z,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!E.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return D(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)E.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return D(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=k,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:I}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=R,e.unstable_useCacheRefresh=function(){return T.H.useCacheRefresh()},e.use=function(e){return T.H.use(e)},e.useActionState=function(e,t,n){return T.H.useActionState(e,t,n)},e.useCallback=function(e,t){return T.H.useCallback(e,t)},e.useContext=function(e){return T.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return T.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return T.H.useEffect(e,t)},e.useEffectEvent=function(e){return T.H.useEffectEvent(e)},e.useId=function(){return T.H.useId()},e.useImperativeHandle=function(e,t,n){return T.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return T.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return T.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return T.H.useMemo(e,t)},e.useOptimistic=function(e,t){return T.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return T.H.useReducer(e,t,n)},e.useRef=function(e){return T.H.useRef(e)},e.useState=function(e){return T.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return T.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return T.H.useTransition()},e.version=`19.3.1`})),d=l(o(((e,t)=>{t.exports=u()}))()),f=d,p=f.Activity,m=f.Children,h=f.Component,g=f.Fragment,_=f.Profiler,v=f.PureComponent,y=f.StrictMode,b=f.Suspense,x=f.ViewTransition,S=f.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,C=f.__COMPILER_RUNTIME,w=f.addTransitionType,T=f.cache,E=f.cacheSignal,D=f.cloneElement,O=f.createContext,k=f.createElement,A=f.createRef,j=f.forwardRef,M=f.isValidElement,N=f.lazy,P=f.memo,F=f.startTransition,I=f.unstable_useCacheRefresh,L=f.use,R=f.useActionState,z=f.useCallback,B=f.useContext,V=f.useDebugValue,H=f.useDeferredValue,U=f.useEffect,W=f.useEffectEvent,G=f.useId,K=f.useImperativeHandle,q=f.useInsertionEffect,J=f.useLayoutEffect,Y=f.useMemo,X=f.useOptimistic,Z=f.useReducer,Q=f.useRef,$=f.useState,ee=f.useSyncExternalStore,te=f.useTransition,ne=f.version,re=Reflect.get(d,`default`)??d;export{p as Activity,m as Children,h as Component,g as Fragment,_ as Profiler,v as PureComponent,y as StrictMode,b as Suspense,x as ViewTransition,S as __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,C as __COMPILER_RUNTIME,w as addTransitionType,T as cache,E as cacheSignal,D as cloneElement,O as createContext,k as createElement,A as createRef,re as default,j as forwardRef,M as isValidElement,N as lazy,P as memo,F as startTransition,s as t,I as unstable_useCacheRefresh,L as use,R as useActionState,z as useCallback,B as useContext,V as useDebugValue,H as useDeferredValue,U as useEffect,W as useEffectEvent,G as useId,K as useImperativeHandle,q as useInsertionEffect,J as useLayoutEffect,Y as useMemo,X as useOptimistic,Z as useReducer,Q as useRef,$ as useState,ee as useSyncExternalStore,te as useTransition,ne as version};
1
+ import{r as e,t}from"./rolldown-runtime-XKyaHtl9.js";var n=t((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function M(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function N(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function P(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,P(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+M(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),P(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+M(a,u),c+=P(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+M(a,u++),c+=P(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return P(N(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function F(e,t,n){if(e==null)return e;var r=[],i=0;return P(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function I(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var L=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function R(e){var t=T.T,n={};n.types=t===null?null:t.types,T.T=n;try{var r=e(),i=T.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(w,L)}catch(e){L(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),T.T=t}}function z(e){var t=T.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else R(z.bind(null,e))}var B={map:F,forEach:function(e,t,n){F(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return F(e,function(){t++}),t},toArray:function(e){return F(e,function(e){return e})||[]},only:function(e){if(!k(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=B,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=T,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return T.H.useMemoCache(e)}},e.addTransitionType=z,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!E.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return D(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)E.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return D(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=k,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:I}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=R,e.unstable_useCacheRefresh=function(){return T.H.useCacheRefresh()},e.use=function(e){return T.H.use(e)},e.useActionState=function(e,t,n){return T.H.useActionState(e,t,n)},e.useCallback=function(e,t){return T.H.useCallback(e,t)},e.useContext=function(e){return T.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return T.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return T.H.useEffect(e,t)},e.useEffectEvent=function(e){return T.H.useEffectEvent(e)},e.useId=function(){return T.H.useId()},e.useImperativeHandle=function(e,t,n){return T.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return T.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return T.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return T.H.useMemo(e,t)},e.useOptimistic=function(e,t){return T.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return T.H.useReducer(e,t,n)},e.useRef=function(e){return T.H.useRef(e)},e.useState=function(e){return T.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return T.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return T.H.useTransition()},e.version=`19.3.1`})),r=e(t(((e,t)=>{t.exports=n()}))()),i=r,a=i.Activity,o=i.Children,s=i.Component,c=i.Fragment,l=i.Profiler,u=i.PureComponent,d=i.StrictMode,f=i.Suspense,p=i.ViewTransition,m=i.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,h=i.__COMPILER_RUNTIME,g=i.addTransitionType,_=i.cache,v=i.cacheSignal,y=i.cloneElement,b=i.createContext,x=i.createElement,S=i.createRef,C=i.forwardRef,w=i.isValidElement,T=i.lazy,E=i.memo,D=i.startTransition,O=i.unstable_useCacheRefresh,k=i.use,A=i.useActionState,j=i.useCallback,M=i.useContext,N=i.useDebugValue,P=i.useDeferredValue,F=i.useEffect,I=i.useEffectEvent,L=i.useId,R=i.useImperativeHandle,z=i.useInsertionEffect,B=i.useLayoutEffect,V=i.useMemo,H=i.useOptimistic,U=i.useReducer,W=i.useRef,G=i.useState,K=i.useSyncExternalStore,q=i.useTransition,J=i.version,Y=Reflect.get(r,`default`)??r;export{a as Activity,o as Children,s as Component,c as Fragment,l as Profiler,u as PureComponent,d as StrictMode,f as Suspense,p as ViewTransition,m as __CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,h as __COMPILER_RUNTIME,g as addTransitionType,_ as cache,v as cacheSignal,y as cloneElement,b as createContext,x as createElement,S as createRef,Y as default,C as forwardRef,w as isValidElement,T as lazy,E as memo,D as startTransition,O as unstable_useCacheRefresh,k as use,A as useActionState,j as useCallback,M as useContext,N as useDebugValue,P as useDeferredValue,F as useEffect,I as useEffectEvent,L as useId,R as useImperativeHandle,z as useInsertionEffect,B as useLayoutEffect,V as useMemo,H as useOptimistic,U as useReducer,W as useRef,G as useState,K as useSyncExternalStore,q as useTransition,J as version};
@@ -1 +1 @@
1
- import{a as e,i as t,o as n,r,t as i}from"./utils-v9GZlbdk.js";function a(e){let i=new((t())||r)({id:`${e.name}@${e.version||Date.now()}`,...e});return n(i),i}var o=null;function s(e){let t=i(e.name,e.version),n={...e,id:e.id||``};return t?(t.initOptions(n),o||=t,t):(o=a(n),o)}e(r);export{s as t};
1
+ import{a as e,i as t,o as n,r,t as i}from"./utils-D62kKhzq.js";function a(e){let i=new((t())||r)({id:`${e.name}@${e.version||Date.now()}`,...e});return n(i),i}var o=null;function s(e){let t=i(e.name,e.version),n={...e,id:e.id||``};return t?(t.initOptions(n),o||=t,t):(o=a(n),o)}e(r);export{s as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./utils-D62kKhzq.js";({...e.global});var t=e.share;e.utils;export{t};
@@ -1 +1 @@
1
- import{t as e}from"./vite-preload-helper-CRzLMJPS.js";import{t}from"./helpers-oIxDNnZJ.js";var n=`__mf_module_cache__`;globalThis[n]||={share:{},remote:{}},globalThis[n].share||={},globalThis[n].remote||={};var r=globalThis[n];for(let e of Object.keys(r.share))if(e.startsWith(`default:`)){let t=e.slice(8);r.share[t]===void 0&&(r.share[t]=r.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;r.share[t]===void 0&&(r.share[t]=r.share[e])}var i;async function a(){return i||=(async()=>{let n=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},i=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},a=Symbol.for(`module-federation.shared-cache-listeners`),o=Symbol.for(`module-federation.shared-cache-owners`),s=e=>{let t=e[o];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,o,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},c=(e,t)=>e[o]?.[t.canonical],l=e=>{let t=[e,e?.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},u=(e,t)=>{if(e===t)return!0;let n=l(e),r=l(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},d=(e,t,n,r)=>{let c=i(e,t);if(c!==void 0&&u(c,n))return n;e[t.canonical]=n;let l=t.aliases||[];for(let t of l)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let d=e[o];r===void 0?d&&delete d[t.canonical]:s(e)[t.canonical]=r;let f=e[a]?.[t.canonical];if(f)for(let e of f)e(n);return n},f=await(await e(()=>import(`../remoteEntry.js`),[],import.meta.url)).init(),{usedShared:p}=await e(async()=>{let{usedShared:e}=await import(`./_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BUtmcsA-.js`);return{usedShared:e}},[],import.meta.url),m=e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},h=(e,t)=>y(t).some(n=>Object.keys(f.shareScopeMap?.[n]?.[e]||{}).some(e=>e!==t.version)),g=[[`react`]];{let e=new Set(g.flat()),t=Object.keys(p).filter(t=>!e.has(t));t.length&&g.push(t)}let _=Symbol(`mf.originalSharedProvider`),v={emit:e=>e},y=e=>Array.isArray(e.scope)?e.scope:[e.scope||`default`],b=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[_]:r});return n},x=(e,n,r,i)=>{if(!e||!r)return;let a=Object.fromEntries(Object.entries(e).filter(([,e])=>e?.shareConfig?.import!==!1));if(Object.keys(a).length===0)return;let o=y(r),s=b(a,i),c={};for(let e of o)c[e||`default`]={[n]:s};let l=t.getRegisteredShare(c,n,{...r,scope:o,strategy:i},v)?.shared;return l?.[_]||l},S=(e,t,n,r)=>n.shareConfig?.singleton?Object.values(e||{}).some(e=>e?.shareConfig?.import!==!1):!!x(e,t,{...n,scope:[r]},`version-first`);for(let e of g)await Promise.all(e.map(async e=>{let t=p[e];if(!t||t.materialize===!1&&!t.lazy||t.treeShaking)return;let a=n(e,t.shareConfig?.singleton,t.version,t.scope);if(i(r.share,a)===void 0||h(e,t)||!t.shareConfig?.singleton&&c(r.share,a)!==`signalk_questdb`){if(t.shareConfig?.import===!1){let n=y(t),r=n=>!S(f.shareScopeMap?.[n]?.[e],e,t,n);if(n.some(r)){f.__mfKeepAdoptedProviders||(f.__mfKeepAdoptedProviders=!0,f.sharedHandler?.hooks?.lifecycle?.afterRegisterShare?.on?.(e=>{let{shared:t,previousShared:n,registeredShared:r}=e||{},i=f.shareScopeMap?.[e.scope]?.[e.pkgName];t&&i&&(t.shareConfig?.import===!1?r===t&&n&&n.shareConfig?.import!==!1&&i[t.version]===t&&(i[t.version]=n):r!==t&&r?.shareConfig?.import===!1&&!r.loaded&&i[t.version]===r&&(i[t.version]=t))}));for(let i of globalThis.__FEDERATION__?.__INSTANCES__||[])for(let a of n){let n=i?.shareScopeMap?.[a]?.[e];if(!S(n,e,t,a)||!r(a))continue;let o=(f.shareScopeMap[a]||={})[e]||={};for(let[e,t]of Object.entries(n))t?.shareConfig?.import!==!1&&(o[e]&&o[e].shareConfig?.import!==!1||(o[e]=t))}}if(n.every(r))return}await f.loadShare(e,{customShareInfo:{shareConfig:t.shareConfig}}).then(async e=>{if(e===!1)return;let t=typeof e==`function`?e():e,n=m(await Promise.resolve(t));d(r.share,a,n,`signalk_questdb`)})}}));for(let[e,t]of Object.entries(p)){if(!t.lib||t.treeShaking||t.shareConfig?.import===!1)continue;let i=n(e,t.shareConfig?.singleton,t.version,t.scope);if(c(r.share,i)===`signalk_questdb`)for(let n of Array.isArray(t.scope)?t.scope:[t.scope||`default`]){let r=f.shareScopeMap?.[n]?.[e],i=r?.[t.version];i&&i.get===t.get&&!i.lib&&(Object.values(r).some(e=>e!==i&&(e?.lib||e?.loaded))||(i.lib=t.lib,i.loaded=!0))}}return f})(),i}i=a();export{i as hostInitPromise,a as initHost};
1
+ import{t as e}from"./helpers-CvnX61Ju.js";import{t}from"./vite-preload-helper-CRzLMJPS.js";var n=`__mf_module_cache__`;globalThis[n]||={share:{},remote:{}},globalThis[n].share||={},globalThis[n].remote||={};var r=globalThis[n];for(let e of Object.keys(r.share))if(e.startsWith(`default:`)){let t=e.slice(8);r.share[t]===void 0&&(r.share[t]=r.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;r.share[t]===void 0&&(r.share[t]=r.share[e])}var i;async function a(){return i||=(async()=>{let n=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},i=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},a=Symbol.for(`module-federation.shared-cache-listeners`),o=Symbol.for(`module-federation.shared-cache-owners`),s=e=>{let t=e[o];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,o,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},c=(e,t)=>e[o]?.[t.canonical],l=e=>{let t=[e,e?.default];for(let e of t)if(e&&typeof e==`object`){for(let t of[`__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE`,`__TEST_INTERNALS`,`__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED`]){let n=e[t];if(n&&typeof n==`object`)return{internals:n}}if(typeof e.useState==`function`)return{hook:e.useState}}},u=(e,t)=>{if(e===t)return!0;let n=l(e),r=l(t);if(!n||!r)return!1;let i=n.internals,a=r.internals;return i!==void 0||a!==void 0?i!==void 0&&i===a:typeof n.hook==`function`&&n.hook===r.hook},d=(e,t,n,r)=>{let c=i(e,t);if(c!==void 0&&u(c,n))return n;e[t.canonical]=n;let l=t.aliases||[];for(let t of l)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let d=e[o];r===void 0?d&&delete d[t.canonical]:s(e)[t.canonical]=r;let f=e[a]?.[t.canonical];if(f)for(let e of f)e(n);return n},f=await(await t(()=>import(`../remoteEntry.js`),[],import.meta.url)).init(),{usedShared:p}=await t(async()=>{let{usedShared:e}=await import(`./_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BH9mY6vj.js`);return{usedShared:e}},[],import.meta.url),m=e=>{let t=e;for(let e=0;e<5;e++){let e=t?.default;if(!e||typeof e!=`object`||Object.keys(e).length===0)break;let n=Object.getPrototypeOf(e);if(n!==null&&n!==Object.prototype)break;let r=Object.keys(t).filter(e=>e!=="default").map(e=>t[e]);if(r.length>0&&r.some(e=>e!==void 0))break;t=e}return t},h=(e,t)=>y(t).some(n=>Object.keys(f.shareScopeMap?.[n]?.[e]||{}).some(e=>e!==t.version)),g=[[`react`]];{let e=new Set(g.flat()),t=Object.keys(p).filter(t=>!e.has(t));t.length&&g.push(t)}let _=Symbol(`mf.originalSharedProvider`),v={emit:e=>e},y=e=>Array.isArray(e.scope)?e.scope:[e.scope||`default`],b=(e,t)=>{if(t!==`version-first`)return e;let n={};for(let[t,r]of Object.entries(e))n[t]=Object.assign({},r,{[_]:r});return n},x=(t,n,r,i)=>{if(!t||!r)return;let a=Object.fromEntries(Object.entries(t).filter(([,e])=>e?.shareConfig?.import!==!1));if(Object.keys(a).length===0)return;let o=y(r),s=b(a,i),c={};for(let e of o)c[e||`default`]={[n]:s};let l=e.getRegisteredShare(c,n,{...r,scope:o,strategy:i},v)?.shared;return l?.[_]||l},S=(e,t,n,r)=>n.shareConfig?.singleton?Object.values(e||{}).some(e=>e?.shareConfig?.import!==!1):!!x(e,t,{...n,scope:[r]},`version-first`);for(let e of g)await Promise.all(e.map(async e=>{let t=p[e];if(!t||t.materialize===!1&&!t.lazy||t.treeShaking)return;let a=n(e,t.shareConfig?.singleton,t.version,t.scope);if(i(r.share,a)===void 0||h(e,t)||!t.shareConfig?.singleton&&c(r.share,a)!==`signalk_questdb`){if(t.shareConfig?.import===!1){let n=y(t),r=n=>!S(f.shareScopeMap?.[n]?.[e],e,t,n);if(n.some(r)){f.__mfKeepAdoptedProviders||(f.__mfKeepAdoptedProviders=!0,f.sharedHandler?.hooks?.lifecycle?.afterRegisterShare?.on?.(e=>{let{shared:t,previousShared:n,registeredShared:r}=e||{},i=f.shareScopeMap?.[e.scope]?.[e.pkgName];t&&i&&(t.shareConfig?.import===!1?r===t&&n&&n.shareConfig?.import!==!1&&i[t.version]===t&&(i[t.version]=n):r!==t&&r?.shareConfig?.import===!1&&!r.loaded&&i[t.version]===r&&(i[t.version]=t))}));for(let i of globalThis.__FEDERATION__?.__INSTANCES__||[])for(let a of n){let n=i?.shareScopeMap?.[a]?.[e];if(!S(n,e,t,a)||!r(a))continue;let o=(f.shareScopeMap[a]||={})[e]||={};for(let[e,t]of Object.entries(n))t?.shareConfig?.import!==!1&&(o[e]&&o[e].shareConfig?.import!==!1||(o[e]=t))}}if(n.every(r))return}await f.loadShare(e,{customShareInfo:{shareConfig:t.shareConfig}}).then(async e=>{if(e===!1)return;let t=typeof e==`function`?e():e,n=m(await Promise.resolve(t));d(r.share,a,n,`signalk_questdb`)})}}));for(let[e,t]of Object.entries(p)){if(!t.lib||t.treeShaking||t.shareConfig?.import===!1)continue;let i=n(e,t.shareConfig?.singleton,t.version,t.scope);if(c(r.share,i)===`signalk_questdb`)for(let n of Array.isArray(t.scope)?t.scope:[t.scope||`default`]){let r=f.shareScopeMap?.[n]?.[e],i=r?.[t.version];i&&i.get===t.get&&!i.lib&&(Object.values(r).some(e=>e!==i&&(e?.lib||e?.loaded))||(i.lib=t.lib,i.loaded=!0))}}return f})(),i}i=a();export{i as hostInitPromise,a as initHost};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./helpers-oIxDNnZJ.js","./utils-v9GZlbdk.js","./pendingShares-PvyVL1Z8.js","./vite-preload-helper-CRzLMJPS.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./vite-preload-helper-CRzLMJPS.js";var t=`__mf_module_cache__`;globalThis[t]||={share:{},remote:{}},globalThis[t].share||={},globalThis[t].remote||={};var n=globalThis[t];for(let e of Object.keys(n.share))if(e.startsWith(`default:`)){let t=e.slice(8);n.share[t]===void 0&&(n.share[t]=n.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;n.share[t]===void 0&&(n.share[t]=n.share[e])}(async()=>{let t=await e(()=>import(`./hostInit-3qWTwrQQ.js`),__vite__mapDeps([0,1]),import.meta.url);await t.__tla;let{initHost:r}=t;await r();let i=await e(()=>import(`./pendingShares-PvyVL1Z8.js`),__vite__mapDeps([2,3]),import.meta.url).catch(()=>void 0);i&&typeof i.preloadPendingShares==`function`&&await i.preloadPendingShares(),n.pendingShareLoads&&await Promise.all(n.pendingShareLoads);let a=globalThis.__mf_module_cache_react_server__;a?.pendingShareLoads&&await Promise.all(a.pendingShareLoads)})().then(()=>e(()=>import(`./configpanel-BvRk9kiK.js`),[],import.meta.url));
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./helpers-CvnX61Ju.js","./utils-D62kKhzq.js","./pendingShares-DemvETkM.js","./vite-preload-helper-CRzLMJPS.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./vite-preload-helper-CRzLMJPS.js";var t=`__mf_module_cache__`;globalThis[t]||={share:{},remote:{}},globalThis[t].share||={},globalThis[t].remote||={};var n=globalThis[t];for(let e of Object.keys(n.share))if(e.startsWith(`default:`)){let t=e.slice(8);n.share[t]===void 0&&(n.share[t]=n.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;n.share[t]===void 0&&(n.share[t]=n.share[e])}(async()=>{let t=await e(()=>import(`./hostInit-Ds8KD_fS.js`),__vite__mapDeps([0,1]),import.meta.url);await t.__tla;let{initHost:r}=t;await r();let i=await e(()=>import(`./pendingShares-DemvETkM.js`),__vite__mapDeps([2,3]),import.meta.url).catch(()=>void 0);i&&typeof i.preloadPendingShares==`function`&&await i.preloadPendingShares(),n.pendingShareLoads&&await Promise.all(n.pendingShareLoads);let a=globalThis.__mf_module_cache_react_server__;a?.pendingShareLoads&&await Promise.all(a.pendingShareLoads)})().then(()=>e(()=>import(`./configpanel-BvRk9kiK.js`),[],import.meta.url));
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./utils-v9GZlbdk.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./vite-preload-helper-CRzLMJPS.js";var t=`__mf_module_cache__`;globalThis[t]||={share:{},remote:{}},globalThis[t].share||={},globalThis[t].remote||={};var n=globalThis[t];for(let e of Object.keys(n.share))if(e.startsWith(`default:`)){let t=e.slice(8);n.share[t]===void 0&&(n.share[t]=n.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;n.share[t]===void 0&&(n.share[t]=n.share[e])}var r=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},i=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},a=[[`react`,()=>e(()=>import(`./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__196689844091135__loadShare__shared-BRI06Lxu.js`).then(e=>e.o),[],import.meta.url)]];async function o(){if(a.length===0)return;let t=`react-dom/client`,{usedShared:o}=await e(async()=>{let{usedShared:e}=await import(`./_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BUtmcsA-.js`);return{usedShared:e}},__vite__mapDeps([0]),import.meta.url);await Promise.all(a.map(async([e,a])=>{let s=o[e],c=s??(e===t?o[`react-dom`]:void 0);if(!c||c.treeShaking||c.shareConfig?.import===!1||s&&s.materialize===!1&&e!==t)return;let l=r(e,c.shareConfig?.singleton,c.version,c.scope);i(n.share,l)===void 0&&await a().catch(t=>console.warn(`[module-federation] shared preload failed:`,e,t))}))}export{o as preloadPendingShares};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./utils-D62kKhzq.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./vite-preload-helper-CRzLMJPS.js";var t=`__mf_module_cache__`;globalThis[t]||={share:{},remote:{}},globalThis[t].share||={},globalThis[t].remote||={};var n=globalThis[t];for(let e of Object.keys(n.share))if(e.startsWith(`default:`)){let t=e.slice(8);n.share[t]===void 0&&(n.share[t]=n.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;n.share[t]===void 0&&(n.share[t]=n.share[e])}var r=(e,t,n,r)=>{let i=(Array.isArray(r)?r[0]:r)||`default`,a=t||!n?e:e+`@`+n,o={canonical:i+`:`+a};return i==="default"&&(o.aliases=[a]),o},i=(e,t)=>{let n=e[t.canonical];if(n!==void 0)return n;let r=t.aliases||[];for(let n of r){if(!Object.prototype.hasOwnProperty.call(e,n))continue;let r=e[n];if(r!==void 0)return e[t.canonical]=r,r}},a=[[`react`,()=>e(()=>import(`./_virtual_mf___mfe_internal__signalk_questdb__mf_owner__97224418320974__loadShare__shared-H1lSL0nN.js`).then(e=>e.o),[],import.meta.url)]];async function o(){if(a.length===0)return;let t=`react-dom/client`,{usedShared:o}=await e(async()=>{let{usedShared:e}=await import(`./_virtual_mf-localSharedImportMap___mfe_internal__signalk_questdb__mf_owner__1-BH9mY6vj.js`);return{usedShared:e}},__vite__mapDeps([0]),import.meta.url);await Promise.all(a.map(async([e,a])=>{let s=o[e],c=s??(e===t?o[`react-dom`]:void 0);if(!c||c.treeShaking||c.shareConfig?.import===!1||s&&s.materialize===!1&&e!==t)return;let l=r(e,c.shareConfig?.singleton,c.version,c.scope);i(n.share,l)===void 0&&await a().catch(t=>console.warn(`[module-federation] shared preload failed:`,e,t))}))}export{o as preloadPendingShares};
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,o)=>(o=n==null?{}:e(i(n)),c(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));export{s as n,l as r,o as t};