signalk-container 1.32.0 → 1.32.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +14 -9
- package/dist/runtime.d.ts +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +41 -7
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
- package/public/configpanel-entry.js +1 -1
- package/public/remoteEntry.js +1 -1
package/AGENTS.md
CHANGED
|
@@ -138,19 +138,24 @@ See `src/client.ts`, `src/containers.ts`, `src/log-stream-broker.ts`, and the te
|
|
|
138
138
|
|
|
139
139
|
`qualifyImage("foo/bar:tag", podmanRuntime)` prefixes `docker.io/` when needed (podman requires fully qualified names unless `unqualified-search-registries` is set; this holds over the API too). Docker passes through. Use this everywhere we feed an image string to a dockerode call.
|
|
140
140
|
|
|
141
|
-
### The compat endpoint
|
|
141
|
+
### The compat endpoint drops what the CLI honours — per version
|
|
142
142
|
|
|
143
|
-
Everything except `/libpod/info` goes through Podman's **Docker-compat** API via dockerode. That endpoint accepts several fields the CLI supports, returns 201, and then ignores them
|
|
143
|
+
Everything except `/libpod/info` goes through Podman's **Docker-compat** API via dockerode. That endpoint accepts several fields the CLI supports, returns 201, and then ignores them — but _which_ ones depends on the podman version, so a claim measured once is not a claim about podman generally:
|
|
144
144
|
|
|
145
|
-
| Field |
|
|
146
|
-
| -------------------------------- |
|
|
147
|
-
| `HostConfig.Ulimits` (nofile) |
|
|
148
|
-
| `
|
|
149
|
-
| `
|
|
145
|
+
| Field | podman 5.4.2 | podman 6.1.0 |
|
|
146
|
+
| -------------------------------- | ----------------------------- | ---------------------------------------- |
|
|
147
|
+
| `HostConfig.Ulimits` (nofile) | dropped (fixed 5.5.0, #25881) | honoured — asked 4242, got 4242 |
|
|
148
|
+
| `Mounts[].VolumeOptions.Subpath` | accepted, ignored | honoured, echoed by inspect as `SubPath` |
|
|
149
|
+
| `HostConfig.UsernsMode` | stored as `private` | still stored as `private` |
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
Docker Engine honours the volume subpath on its own API (29.7.2 / API 1.55), so that one was never a Docker gap at all. All measurements are x86_64; arm64 is untested (the endpoint is architecture-independent Go, so it is expected to match).
|
|
152
152
|
|
|
153
|
-
|
|
153
|
+
Two rules follow:
|
|
154
|
+
|
|
155
|
+
- **A runtime's changelog or man page describes its CLI, not this endpoint.** Measure through dockerode against the socket before writing a capability claim into a comment, an error message, or the docs. `src/test/integration/` is where such a probe belongs.
|
|
156
|
+
- **A single version does not establish a property of podman.** Any capability that differs across the table above needs a version bound, not a blanket claim. `honoursVolumeSubpath` in `src/runtime.ts` carries this one, mirroring `supportsKeepIdSize`; both fail closed on an unparseable version.
|
|
157
|
+
|
|
158
|
+
An operator-facing error must also name the mechanism precisely. Telling someone "named volumes cannot be subpath-mounted" sends them to the podman docs, which say otherwise, and they conclude the plugin is broken.
|
|
154
159
|
|
|
155
160
|
### Inspect-format diff pattern
|
|
156
161
|
|
package/dist/runtime.d.ts
CHANGED
|
@@ -184,6 +184,7 @@ export declare function hostCpusFromInfo(info: DaemonInfo): number | null;
|
|
|
184
184
|
*/
|
|
185
185
|
export declare function probeCgroupControllers(runtime: RuntimeName, rootless: boolean | null, read?: (path: string) => Promise<string>, uid?: number | undefined): Promise<string[] | null>;
|
|
186
186
|
export declare function supportsKeepIdSize(version: string | null): boolean;
|
|
187
|
+
export declare function honoursVolumeSubpath(version: string | null): boolean;
|
|
187
188
|
export declare function detectRuntime(preference: RuntimePreference): Promise<ContainerRuntimeInfo | null>;
|
|
188
189
|
/**
|
|
189
190
|
* Buffered line splitter for stdout/stderr chunks. Returns a function
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAGpB;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQnE;AAWD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,CAAC,MAAM;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GACrD,IAAI,CAEN;AAkBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;GAIG;AACH,KAAK,iBAAiB,GACpB;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,iBAAiB,EACvB,WAAW,GAAE,MAAM;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAqB,GACtE,kBAAkB,CAkDpB;AA8BD;;;;;;GAMG;AACH,UAAU,UAAU;IAClB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAIhE;AAUD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,OAAO,GAAG,IAAI,EACxB,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAA8B,EACpE,GAAG,GAAE,MAAM,GAAG,SAA8B,GAC3C,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAmB1B;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAGpB;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQnE;AAWD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,EAAE,EAAE,CAAC,MAAM;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GACrD,IAAI,CAEN;AAkBD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAExD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;GAIG;AACH,KAAK,iBAAiB,GACpB;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,GAAG,SAAS,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,IAAI,EAAE,iBAAiB,EACvB,WAAW,GAAE,MAAM;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAqB,GACtE,kBAAkB,CAkDpB;AA8BD;;;;;;GAMG;AACH,UAAU,UAAU;IAClB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAIhE;AAUD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,OAAO,GAAG,IAAI,EACxB,IAAI,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAA8B,EACpE,GAAG,GAAE,MAAM,GAAG,SAA8B,GAC3C,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAmB1B;AAsDD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAElE;AAmBD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAEpE;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAsCtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG;IAC9D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAkBA;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,yEAAyE;IACzE,IAAI,IAAI,IAAI,CAAC;IACb;yEACqE;IACrE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB;;;qCAGiC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB"}
|
package/dist/runtime.js
CHANGED
|
@@ -303,16 +303,50 @@ export async function probeCgroupControllers(runtime, rootless, read = (p) => re
|
|
|
303
303
|
*/
|
|
304
304
|
/** First Podman release accepting `--userns=keep-id:size=` (#24387). */
|
|
305
305
|
const KEEP_ID_SIZE_MIN = { major: 5, minor: 4 };
|
|
306
|
-
|
|
306
|
+
/**
|
|
307
|
+
* `major.minor` of a runtime version string, or null when it is not one.
|
|
308
|
+
*
|
|
309
|
+
* Podman reports SemVer (`6.1.0`, `6.1.0-rc.1`, occasionally two components),
|
|
310
|
+
* so a prerelease or build suffix parses and trailing junk does not:
|
|
311
|
+
* `6.1.0garbage`, `6.1.0-` and `6.1.0+` are rejected rather than read as
|
|
312
|
+
* 6.1. Every caller treats null as "too old", so an unreadable version costs
|
|
313
|
+
* a capability rather than wrongly claiming one.
|
|
314
|
+
*/
|
|
315
|
+
function parseMajorMinor(version) {
|
|
307
316
|
if (!version)
|
|
308
|
-
return
|
|
309
|
-
const m = /^(\d+)\.(\d+)
|
|
317
|
+
return null;
|
|
318
|
+
const m = /^(\d+)\.(\d+)(?:\.\d+)?(?:[-+][0-9A-Za-z.-]+)?$/.exec(version.trim());
|
|
310
319
|
if (!m)
|
|
320
|
+
return null;
|
|
321
|
+
return { major: Number(m[1]), minor: Number(m[2]) };
|
|
322
|
+
}
|
|
323
|
+
function atLeast(version, min) {
|
|
324
|
+
const v = parseMajorMinor(version);
|
|
325
|
+
if (!v)
|
|
311
326
|
return false;
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
327
|
+
return v.major > min.major || (v.major === min.major && v.minor >= min.minor);
|
|
328
|
+
}
|
|
329
|
+
export function supportsKeepIdSize(version) {
|
|
330
|
+
return atLeast(version, KEEP_ID_SIZE_MIN);
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Podman's Docker-compat `/containers/create` accepts
|
|
334
|
+
* `Mounts[].VolumeOptions.Subpath` on every version, but only applies it on
|
|
335
|
+
* newer ones: measured ignored on 5.4.2 and honoured on 6.1.0, where inspect
|
|
336
|
+
* also echoes it back as `SubPath`.
|
|
337
|
+
*
|
|
338
|
+
* The exact release in between is unverified, so this is deliberately a
|
|
339
|
+
* "known to honour" bound rather than a precise one — it gates a test's
|
|
340
|
+
* expectation, not plugin behaviour. Both measurements are x86_64; arm64 is
|
|
341
|
+
* assumed to match (the endpoint is architecture-independent Go) but has not
|
|
342
|
+
* been measured, and the canary reports the truth wherever it runs. The plugin never sends a subpath on any
|
|
343
|
+
* version, so `assertVolumeIsNotBroaderThanRequested` stays correct either
|
|
344
|
+
* way; what changes is only whether narrowing *could* work.
|
|
345
|
+
*/
|
|
346
|
+
/** First Podman release measured to apply a compat-API volume subpath. */
|
|
347
|
+
const VOLUME_SUBPATH_MIN = { major: 6, minor: 1 };
|
|
348
|
+
export function honoursVolumeSubpath(version) {
|
|
349
|
+
return atLeast(version, VOLUME_SUBPATH_MIN);
|
|
316
350
|
}
|
|
317
351
|
export async function detectRuntime(preference) {
|
|
318
352
|
const resolved = await resolveClient(preference);
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,5 +6,5 @@ import"./chunks/virtualExposes-BKrYASZv.js";import"./remoteEntry.js";var e=globa
|
|
|
6
6
|
`)})]}),t.linger&&t.linger.advice.length>0&&L(F,{children:[I(`div`,{style:K.sectionLabel,children:`Linger advice`}),I(`pre`,{style:K.pre,children:t.linger.advice.join(`
|
|
7
7
|
`)})]}),t.networkDns&&t.networkDns.advice.length>0&&L(F,{children:[I(`div`,{style:K.sectionLabel,children:`Network DNS advice`}),I(`pre`,{style:K.pre,children:t.networkDns.advice.join(`
|
|
8
8
|
`)})]}),t.devicePassthrough&&t.devicePassthrough.advice.length>0&&L(F,{children:[I(`div`,{style:K.sectionLabel,children:`Device passthrough advice`}),I(`pre`,{style:K.pre,children:t.devicePassthrough.advice.join(`
|
|
9
|
-
`)})]}),I(`button`,{type:`button`,style:K.toggle,onClick:()=>c(e=>!e),children:s?`▾ Hide raw JSON`:`▸ Show raw JSON`}),s&&I(`pre`,{style:{...K.pre,marginTop:8},children:JSON.stringify(t,null,2)})]})]})]})})}function ve(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.max(0,Math.floor(e))}function ye(e){return String(ve(e))}function be(e){return e.trim()===``?1:ve(Number(e))}var xe={high:5120,normal:null,low:512,lowest:128},Y=[`high`,`normal`,`low`,`lowest`],Se=`normal`,Ce=`lowest`;function X(e,t){return typeof e==`string`&&Y.includes(e)?e:t}function we(e){if(e==null)return`normal`;for(let t of Y)if(xe[t]===e)return t;return null}var Z={root:{fontFamily:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,color:`#333`,padding:`16px 0`},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`},btnDanger:{background:`#ef4444`,color:`#fff`,padding:`6px 12px`,fontSize:12},btnWarning:{background:`#f59e0b`,color:`#fff`,padding:`6px 12px`,fontSize:12},btnSave:{background:`#3b82f6`,color:`#fff`},btnSuccess:{background:`#10b981`,color:`#fff`},btnSecondary:{background:`#fff`,color:`#374151`,border:`1px solid #d1d5db`},btnDisabled:{opacity:.5,cursor:`not-allowed`},status:{marginTop:8,fontSize:12,minHeight:18},runtimeCard:{display:`flex`,alignItems:`center`,gap:14,padding:`14px 18px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:12},runtimeIcon:{width:44,height:44,borderRadius:10,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:22,flexShrink:0},runtimeInfo:{flex:1},runtimeName:{fontSize:15,fontWeight:600,color:`#333`},runtimeVersion:{fontSize:12,color:`#888`},runtimeRemediation:{fontSize:12,color:`#666`,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,whiteSpace:`pre-wrap`,marginTop:6,lineHeight:1.45},containerItem:{display:`flex`,alignItems:`center`,gap:12,padding:`10px 14px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:8},stateIndicator:{width:10,height:10,borderRadius:`50%`,flexShrink:0},containerInfo:{flex:1,minWidth:0},containerName:{fontSize:14,fontWeight:600,color:`#333`},containerMeta:{fontSize:11,color:`#888`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},containerActions:{display:`flex`,gap:6,flexShrink:0},containerCard:{background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:8,overflow:`hidden`},containerItemFlat:{display:`flex`,alignItems:`center`,gap:12,padding:`10px 14px`},limitsRow:{display:`flex`,alignItems:`center`,gap:10,padding:`6px 14px 10px 34px`,fontSize:11,color:`#666`,flexWrap:`wrap`},updatesRow:{display:`flex`,alignItems:`center`,gap:10,padding:`0 14px 10px 34px`,fontSize:11,color:`#666`,flexWrap:`wrap`},limitBadge:{display:`inline-flex`,alignItems:`center`,padding:`2px 8px`,borderRadius:12,background:`#e5e7eb`,color:`#374151`,fontSize:11,fontWeight:500},overrideBadge:{display:`inline-flex`,alignItems:`center`,padding:`2px 8px`,borderRadius:12,background:`#fef3c7`,color:`#92400e`,fontSize:10,fontWeight:600},editLimitsBtn:{marginLeft:`auto`,padding:`3px 10px`,fontSize:11,background:`#fff`,color:`#3b82f6`,border:`1px solid #3b82f6`,borderRadius:6,cursor:`pointer`,fontWeight:500},limitsEditor:{borderTop:`1px solid #e0e0e0`,padding:`14px 14px 14px 34px`,background:`#fff`},limitsEditorGrid:{display:`grid`,gridTemplateColumns:`160px 1fr auto`,gap:`8px 12px`,alignItems:`center`,marginBottom:10},limitsEditorLabel:{fontSize:12,fontWeight:500,color:`#555`},limitsEditorInput:{padding:`5px 8px`,borderRadius:5,border:`1px solid #ccc`,fontSize:12,background:`#fff`,color:`#333`,fontFamily:`inherit`,width:`100%`,boxSizing:`border-box`},limitsEditorInputDisabled:{background:`#f3f4f6`,color:`#9ca3af`,fontStyle:`italic`},limitsEditorUnsetBtn:{width:24,height:24,borderRadius:4,border:`1px solid #d1d5db`,background:`#fff`,color:`#6b7280`,fontSize:14,lineHeight:1,cursor:`pointer`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`},limitsEditorUnsetBtnActive:{background:`#fee2e2`,color:`#991b1b`,border:`1px solid #fca5a5`},limitsEditorAdvancedToggle:{fontSize:11,color:`#3b82f6`,cursor:`pointer`,userSelect:`none`,marginTop:6,marginBottom:10,display:`inline-block`},limitsEditorActions:{display:`flex`,gap:8,justifyContent:`flex-end`,marginTop:10},limitsEditorResult:{marginTop:10,padding:`8px 10px`,borderRadius:6,fontSize:11,lineHeight:1.5},limitsEditorResultLive:{background:`#d1fae5`,color:`#065f46`},limitsEditorResultRecreated:{background:`#fef3c7`,color:`#92400e`},limitsEditorResultError:{background:`#fee2e2`,color:`#991b1b`},limitsEditorWarning:{marginTop:4,fontSize:10,opacity:.85,fontStyle:`italic`},empty:{textAlign:`center`,padding:`30px 16px`,color:`#999`,fontSize:13},fieldRow:{display:`flex`,alignItems:`center`,gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:`#555`,width:160,flexShrink:0},select:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`},hint:{fontSize:11,color:`#aaa`,marginLeft:8},pruneResult:{fontSize:12,color:`#10b981`,marginTop:6}},Te={running:`#10b981`,stopped:`#f59e0b`,missing:`#94a3b8`,"no-runtime":`#ef4444`},Ee={running:`Running`,stopped:`Stopped`,missing:`Not created`,"no-runtime":`No runtime`};function Q({label:e,value:t,options:n,onChange:r,hint:i}){return L(`div`,{style:Z.fieldRow,children:[I(`span`,{style:Z.label,children:e}),I(`select`,{style:Z.select,value:t,onChange:e=>r(e.target.value),children:n.map(e=>I(`option`,{value:e.value,children:e.label},e.value))}),i&&I(`span`,{style:Z.hint,children:i})]})}function De({label:e,value:t,onChange:n,hint:r}){return L(`div`,{style:Z.fieldRow,children:[I(`span`,{style:Z.label,children:e}),L(`label`,{style:{display:`inline-flex`,alignItems:`center`,cursor:`pointer`,gap:8},children:[I(`input`,{type:`checkbox`,checked:t,onChange:e=>n(e.target.checked),style:{width:16,height:16,cursor:`pointer`}}),I(`span`,{style:{fontSize:13,color:`#555`},children:t?`Enabled`:`Disabled`})]}),r&&I(`span`,{style:Z.hint,children:r})]})}var $=[{key:`cpus`,label:`CPU (cores)`,type:`number`,step:`0.1`,min:`0.1`,placeholder:`e.g. 1.5`,primary:!0},{key:`memory`,label:`Memory`,type:`text`,placeholder:`e.g. 512m, 2g`,primary:!0},{key:`memorySwap`,label:`Memory + swap`,type:`text`,placeholder:`= memory to disable swap`,primary:!0},{key:`pidsLimit`,label:`Max processes`,type:`number`,step:`1`,min:`1`,placeholder:`e.g. 200`,primary:!0},{key:`cpuShares`,label:`CPU priority`,type:`number`,step:`1`,min:`2`,max:`262144`,placeholder:`shares`,primary:!0,widget:`cpuPriority`},{key:`cpusetCpus`,label:`Pin to CPUs`,type:`text`,placeholder:`e.g. "0,1" or "1-3"`,primary:!1},{key:`memoryReservation`,label:`Memory reservation`,type:`text`,placeholder:`soft floor, e.g. 256m`,primary:!1},{key:`oomScoreAdj`,label:`OOM score adjust`,type:`number`,step:`1`,min:`-1000`,max:`1000`,placeholder:`-1000 to 1000`,primary:!1}];function Oe(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<5)return`just now`;if(n<60)return`${n}s ago`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}catch{return e}}function ke(e){if(!e)return`No update data`;let{runningTag:t,currentVersion:n,latestVersion:r,updateAvailable:i,reason:a,fromCache:o}=e;return a===`offline`?o?`\u{1F4E1} Offline — last cached result shows ${i?`update available`:`up to date`}`:`📡 Offline — no cached result yet`:a===`newer-version`?`\u2191 Update available: ${n} \u2192 ${r}`:a===`digest-drift`?`\u21BB Rebuild available for :${t}${r?` (latest stable: ${r})`:``}`:a===`up-to-date`?`\u2705 Up to date${n?` (`+n+`)`:``}`:a===`older-than-pinned`?`\u2139 Pinned to ${n}, latest stable is ${r}`:a===`error`?`\u26A0 Check error: ${e.error||`unknown`}`:`State: ${a||`unknown`}`}function Ae(e){if(!e||!e.reason)return null;let{reason:t,runningTag:n,currentVersion:r,latestVersion:i,fromCache:a}=e;return t===`newer-version`?{label:`\u2191 ${i||`update`} available`,bg:`#fef3c7`,fg:`#92400e`,title:`Update available: ${r} \u2192 ${i}`}:t===`digest-drift`?{label:`↻ rebuild available`,bg:`#fef3c7`,fg:`#92400e`,title:`Image rebuild available for :${n}${i?` (latest stable ${i})`:``}`}:t===`offline`?{label:a?`📡 offline (cached)`:`📡 offline`,bg:`#e5e7eb`,fg:`#4b5563`,title:a?`Network unreachable; showing last cached check result`:`Network unreachable; no cached result yet`}:t===`error`?{label:`⚠ check error`,bg:`#fee2e2`,fg:`#991b1b`,title:e.error||`Update check error`}:t===`up-to-date`?{label:`✅ up to date`,bg:`#dcfce7`,fg:`#166534`,title:`Up to date${r?` (`+r+`)`:``}`}:null}function je(e){let t={};for(let n of $){let r=n.key,i=e[n.key];if(i===null){t[r]=null;continue}if(i!==void 0&&i!==``){if(n.type===`number`){let e=Number(i);if(!Number.isFinite(e))continue;t[r]=e}else t[r]=i}}return t}function Me(e){let t=xe[e],n=e.charAt(0).toUpperCase()+e.slice(1);return t===null?`${n} (no request)`:`${n} (${t} shares)`}function Ne(e){for(let t of $){if(t.type!==`number`)continue;let n=e[t.key];if(n==null||n===``)continue;let r=Number(n);if(!Number.isFinite(r))return`${t.label}: "${n}" is not a number`;if(t.step===`1`&&!Number.isInteger(r))return`${t.label}: ${n} must be a whole number`;if(t.min!==void 0&&r<Number(t.min))return`${t.label}: ${n} is below the minimum ${t.min}`;if(t.max!==void 0&&r>Number(t.max))return`${t.label}: ${n} is above the maximum ${t.max}`}return null}function Pe(e,t){if(t==null||t===``)return null;switch(e){case`cpus`:return`${t} CPU`;case`memory`:return`${t}`;case`memorySwap`:return`swap: ${t}`;case`memoryReservation`:return`reserve: ${t}`;case`pidsLimit`:return`${t} PIDs`;case`cpuShares`:{let e=we(Number(t));return e?`priority: ${e}`:`shares: ${t}`}case`cpusetCpus`:return`cpus: ${t}`;case`oomScoreAdj`:return`oom: ${t}`;default:return`${e}: ${t}`}}function Fe({containerName:e,effective:n,initialOverride:r,onApply:i,onResetToDefault:a,onClose:o,cpuWeightAvailable:s}){let c=e=>{let t=e??n,r={};for(let e of $){let n=e.key,i=t?t[n]:void 0;i==null?r[e.key]=``:r[e.key]=String(i)}return r},[l,u]=M(()=>c(n)),[d,f]=M(()=>r?$.some(e=>!e.primary&&r[e.key]!==void 0):!1),[p,m]=M(!1),[h,g]=M(!1),[_,v]=M(null),y=(e,t)=>{u(n=>({...n,[e]:t}))},b=e=>{u(t=>({...t,[e]:t[e]===null?``:null}))},x=()=>{u(c(n)),v(null)},S=async()=>{let e=Ne(l);if(e){v({error:e});return}m(!0),v(null);try{let e=await i(je(l));v(e),e&&e.effective&&u(c(e.effective))}catch(e){v({error:e instanceof Error?e.message:String(e)})}m(!1)},C=async()=>{if(window.confirm(`Reset ${e} to the plugin's default resource limits? This will remove your override and may cause a brief container recreate (~5s of downtime) if memory limits or CPU shares need to be unset.`)){g(!0),v(null);try{let e=await a();v(e),e&&e.effective&&u(c(e.effective))}catch(e){v({error:e instanceof Error?e.message:String(e)})}g(!1)}},w=n=>{let r=l[n.key],i=r===null;if(n.widget===`cpuPriority`){let i=r===null||r===``?null:Number(r),a=i===null||!Number.isFinite(i)?`normal`:we(i);return L(t.Fragment,{children:[I(`label`,{style:Z.limitsEditorLabel,htmlFor:`lim-${e}-${n.key}`,children:n.label}),L(`div`,{style:{display:`flex`,gap:6,alignItems:`center`},children:[L(`select`,{id:`lim-${e}-${n.key}`,value:a??`custom`,onChange:e=>{let t=e.target.value;if(t===`custom`)return;let r=xe[t];y(n.key,r===null?null:String(r))},style:{...Z.limitsEditorInput,width:`auto`},children:[Y.map(e=>I(`option`,{value:e,children:Me(e)},e)),a===null&&L(`option`,{value:`custom`,children:[`Custom (`,i,` shares)`]})]}),I(`span`,{style:{fontSize:11,color:`#6b7280`},children:`or shares`}),I(`input`,{type:`number`,"aria-label":`Custom CPU shares`,value:r??``,step:n.step,min:n.min,max:n.max,placeholder:n.placeholder,onChange:e=>y(n.key,e.target.value===``?null:e.target.value),style:{...Z.limitsEditorInput,width:90}})]}),s?I(`span`,{}):I(`span`,{style:{fontSize:11,color:`#6b7280`},title:`The cpu cgroup controller is not delegated on this host — see the doctor; the value is stored but has no effect`,children:`⚠ no effect on this host`})]},n.key)}return L(t.Fragment,{children:[I(`label`,{style:Z.limitsEditorLabel,htmlFor:`lim-${e}-${n.key}`,children:n.label}),I(`input`,{id:`lim-${e}-${n.key}`,type:i?`text`:n.type,value:i?``:r,step:n.step,min:n.min,max:n.max,placeholder:i?`(unset — remove limit)`:n.placeholder,disabled:i,onChange:e=>y(n.key,e.target.value),style:{...Z.limitsEditorInput,...i?Z.limitsEditorInputDisabled:{}}}),I(`button`,{type:`button`,onClick:()=>b(n.key),title:i?`Click to set a value again`:`Click to explicitly unset (remove this limit)`,style:{...Z.limitsEditorUnsetBtn,...i?Z.limitsEditorUnsetBtnActive:{}},children:i?`↺`:`×`})]},n.key)},T=$.filter(e=>e.primary),E=$.filter(e=>!e.primary);return L(`div`,{style:Z.limitsEditor,children:[I(`div`,{style:Z.limitsEditorGrid,children:T.map(w)}),L(`span`,{onClick:()=>f(!d),style:Z.limitsEditorAdvancedToggle,children:[d?`▾`:`▸`,` Advanced (`,E.length,` more fields)`]}),d&&I(`div`,{style:Z.limitsEditorGrid,children:E.map(w)}),L(`div`,{style:Z.limitsEditorActions,children:[I(`button`,{type:`button`,onClick:o,disabled:p||h,style:{...Z.btn,padding:`6px 12px`,fontSize:12,background:`#fff`,color:`#6b7280`,border:`1px solid #d1d5db`,...p||h?Z.btnDisabled:{}},children:`Close`}),I(`button`,{type:`button`,onClick:C,disabled:p||h,title:`Clear override and restore plugin-default limits`,style:{...Z.btn,padding:`6px 12px`,fontSize:12,background:`#fff`,color:`#d97706`,border:`1px solid #f59e0b`,...p||h?Z.btnDisabled:{}},children:h?`Resetting...`:`Reset to default`}),I(`button`,{type:`button`,onClick:x,disabled:p||h,title:`Discard unsaved changes in this form (does not touch the server)`,style:{...Z.btn,padding:`6px 12px`,fontSize:12,background:`#fff`,color:`#6b7280`,border:`1px solid #d1d5db`,...p||h?Z.btnDisabled:{}},children:`Revert`}),I(`button`,{type:`button`,onClick:S,disabled:p||h,style:{...Z.btn,...Z.btnPrimary,padding:`6px 14px`,fontSize:12,...p||h?Z.btnDisabled:{}},children:p?`Applying...`:`Apply`})]}),_&&I(`div`,{style:{...Z.limitsEditorResult,..._.error?Z.limitsEditorResultError:_.method===`recreated`?Z.limitsEditorResultRecreated:Z.limitsEditorResultLive},children:_.error?L(F,{children:[I(`strong`,{children:`Error:`}),` `,_.error]}):L(F,{children:[I(`strong`,{children:_.method===`live`?`Applied live (no restart)`:`Container recreated`}),_.warnings&&_.warnings.length>0&&I(`div`,{style:Z.limitsEditorWarning,children:_.warnings.map((e,t)=>L(`div`,{children:[`⚠ `,e]},t))})]})})]})}function Ie(e){return e?H(e.status):`No container runtime found`}function Le({configuration:e,save:t}){let n=e||{},[r,i]=M(n.runtime||`auto`),[a,o]=M(n.pruneSchedule||`weekly`),[s,c]=M(ye(n.keepImageVersions)),[l,u]=M(n.updateCheckInterval||`24h`),[d,f]=M(n.backgroundUpdateChecks!==!1),[p,m]=M(X(n.containerCpuPriority,Se)),[h,g]=M(X(n.jobCpuPriority,Ce)),[_,v]=M(n.containerOverrides||{}),[y,b]=M(null),x=!y?.cgroupControllers||y.cgroupControllers.includes(`cpu`),[S,w]=M(null),[T,E]=M([]),[ee,O]=M({}),[te,k]=M({}),[ne,re]=M({}),[A,ie]=M({}),[j,ae]=M(new Set),[oe,se]=M(new Set),[N,P]=M(null),[ce,F]=M(!1),[R,le]=M(!0),[z,B]=M(``),[de,V]=M(!1),[fe,pe]=M(null),H=C(async()=>{try{let[e,t]=await Promise.all([fetch(`/plugins/signalk-container/api/runtime`),fetch(`/plugins/signalk-container/api/containers`)]),n=!1;if(e.ok){let t=await e.json();b(t),n=t!==null}else b(null);if(n)w(null);else try{let e=await fetch(`/plugins/signalk-container/api/doctor/deployment`);e.ok?w(await e.json()):w(null)}catch{w(null)}let r=[];if(t.ok?(r=await t.json(),E(r)):E([]),r.length>0){let e={},t={};await Promise.all(r.map(async n=>{let r=n.unprefixedName;try{let n=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(r)}/resources`);if(n.ok){let i=await n.json();e[r]=i.effective||{},t[r]=i.override??null}}catch{}})),O(e),k(t)}try{let e=await fetch(`/plugins/signalk-container/api/updates`);if(e.ok){let t=await e.json();if(Array.isArray(t)){let e={},n={};for(let r of t)r&&r.containerName&&(n[r.containerName]=r,r.pluginId&&(e[r.containerName]=r.pluginId));re(e=>{let t={...n};for(let r of Object.keys(n)){let i=n[r],a=e[r];i.reason===`unknown`&&a&&a.reason&&a.reason!==`unknown`&&(t[r]=a)}return t}),ie(e)}}}catch{}}catch{b(null),E([])}le(!1)},[]);D(()=>{H();let e=setInterval(H,5e3);return()=>clearInterval(e)},[H]);let U=e=>{se(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},W=async(e,t)=>{let n=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/resources`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));return n.ok?(r.effective&&O(t=>({...t,[e]:r.effective})),k(t=>({...t,[e]:r.override??null})),v(t=>{let n={...t};return r.override&&Object.keys(r.override).length>0?n[e]=r.override:delete n[e],n}),{method:r.method,warnings:r.warnings,effective:r.effective}):{error:r.error||`${n.status} ${n.statusText}`}},G=async e=>{let t=A[e];if(!t){B(`${e}: no update service registered. The consumer plugin hasn't migrated to signalk-container's update detection yet.`),V(!0);return}ae(t=>{let n=new Set(t);return n.add(e),n}),B(`Checking ${e} for updates...`),V(!1);try{let n=await fetch(`/plugins/signalk-container/api/updates/${encodeURIComponent(t)}/check`,{method:`POST`});if(n.ok){let t=await n.json();re(n=>({...n,[e]:t})),B(ke(t)),V(!1)}else{let e=await n.json().catch(()=>({error:n.statusText}));B(`Check failed: ${e.error}`),V(!0)}}catch(e){B(`Check error: ${e instanceof Error?e.message:String(e)}`),V(!0)}ae(t=>{let n=new Set(t);return n.delete(e),n})},me=async e=>{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/resources`,{method:`DELETE`}),n=await t.json().catch(()=>({}));return t.ok?(n.effective&&O(t=>({...t,[e]:n.effective})),k(t=>({...t,[e]:null})),v(t=>{let n={...t};return delete n[e],n}),{method:n.method,warnings:n.warnings,effective:n.effective}):{error:n.error||`${t.status} ${t.statusText}`}},he=()=>{let e={};for(let[t,n]of Object.entries(te))n&&Object.keys(n).length>0&&(e[t]=n);t({...n,runtime:r,pruneSchedule:a,keepImageVersions:be(s),maxConcurrentJobs:n.maxConcurrentJobs||2,updateCheckInterval:l,backgroundUpdateChecks:d,containerCpuPriority:X(p,Se),jobCpuPriority:X(h,Ce),containerOverrides:e}),B(`Saved! Plugin will restart.`),V(!1)},K=async e=>{B(`Starting ${e}...`),V(!1);try{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/start`,{method:`POST`});if(t.ok)B(`${e} started.`),H();else{let e=await t.json().catch(()=>({error:t.statusText}));B(`Failed: ${e.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}},ge=async e=>{B(`Stopping ${e}...`),V(!1);try{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/stop`,{method:`POST`});if(t.ok)B(`${e} stopped.`),H();else{let e=await t.json().catch(()=>({error:t.statusText}));B(`Failed: ${e.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}},q=async(e,t)=>{if(!(t===`running`&&!window.confirm(`${e} is running. Stop and remove it?`))){B(`Removing ${e}...`),V(!1);try{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/remove`,{method:`POST`});if(t.ok)B(`${e} removed.`),H();else{let e=await t.json().catch(()=>({error:t.statusText}));B(`Failed: ${e.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}}},J=async()=>{B(`Pruning dangling images...`),V(!1),pe(null);try{let e=await fetch(`/plugins/signalk-container/api/prune`,{method:`POST`});if(e.ok){let t=await e.json().catch(()=>({error:e.statusText}));pe(t),B(`Pruned ${t.imagesRemoved} image(s), reclaimed ${t.spaceReclaimed}.`)}else{let t=await e.json().catch(()=>({error:e.statusText}));B(`Prune failed: ${t.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}};return L(`div`,{style:Z.root,children:[I(`div`,{style:Z.sectionTitle,children:`Runtime`}),R?I(`div`,{style:Z.empty,children:`Detecting container runtime...`}):y?L(`div`,{style:Z.runtimeCard,children:[I(`div`,{style:{...Z.runtimeIcon,background:y.runtime===`podman`?`#892ca0`:`#2496ed`,color:`#fff`},children:y.runtime===`podman`?`P`:`D`}),L(`div`,{style:Z.runtimeInfo,children:[L(`div`,{style:Z.runtimeName,children:[y.runtime.charAt(0).toUpperCase()+y.runtime.slice(1),y.isPodmanDockerShim?` (via docker shim)`:``]}),L(`div`,{style:Z.runtimeVersion,children:[`Version `,y.version]})]}),I(`div`,{style:{...Z.stateIndicator,background:`#10b981`},title:`Runtime available`})]}):L(`div`,{style:Z.runtimeCard,children:[I(`div`,{style:{...Z.runtimeIcon,background:`#fef2f2`,color:`#ef4444`},children:`!`}),L(`div`,{style:Z.runtimeInfo,children:[I(`div`,{style:Z.runtimeName,children:Ie(S)}),S&&S.remediation.length>0&&I(`div`,{style:Z.runtimeRemediation,children:S.remediation.join(`
|
|
9
|
+
`)})]}),I(`button`,{type:`button`,style:K.toggle,onClick:()=>c(e=>!e),children:s?`▾ Hide raw JSON`:`▸ Show raw JSON`}),s&&I(`pre`,{style:{...K.pre,marginTop:8},children:JSON.stringify(t,null,2)})]})]})]})})}function ve(e){return typeof e!=`number`||!Number.isFinite(e)?1:Math.max(0,Math.floor(e))}function ye(e){return String(ve(e))}function be(e){return e.trim()===``?1:ve(Number(e))}var xe={high:5120,normal:null,low:512,lowest:128},Y=[`high`,`normal`,`low`,`lowest`],Se=`normal`,Ce=`lowest`;function X(e,t){return typeof e==`string`&&Y.includes(e)?e:t}function we(e){if(e==null)return`normal`;for(let t of Y)if(xe[t]===e)return t;return null}var Z={root:{fontFamily:`-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif`,color:`#333`,padding:`16px 0`},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`},btnDanger:{background:`#ef4444`,color:`#fff`,padding:`6px 12px`,fontSize:12},btnWarning:{background:`#f59e0b`,color:`#fff`,padding:`6px 12px`,fontSize:12},btnSave:{background:`#3b82f6`,color:`#fff`},btnSuccess:{background:`#10b981`,color:`#fff`},btnSecondary:{background:`#fff`,color:`#374151`,border:`1px solid #d1d5db`},btnDisabled:{opacity:.5,cursor:`not-allowed`},status:{marginTop:8,fontSize:12,minHeight:18},runtimeCard:{display:`flex`,alignItems:`center`,gap:14,padding:`14px 18px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:12},runtimeIcon:{width:44,height:44,borderRadius:10,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:22,flexShrink:0},runtimeInfo:{flex:1},runtimeName:{fontSize:15,fontWeight:600,color:`#333`},runtimeVersion:{fontSize:12,color:`#888`},runtimeRemediation:{fontSize:12,color:`#666`,fontFamily:`ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace`,whiteSpace:`pre-wrap`,marginTop:6,lineHeight:1.45},containerItem:{display:`flex`,alignItems:`center`,gap:12,padding:`10px 14px`,background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:8},stateIndicator:{width:10,height:10,borderRadius:`50%`,flexShrink:0},containerInfo:{flex:1,minWidth:0},containerName:{fontSize:14,fontWeight:600,color:`#333`},containerMeta:{fontSize:11,color:`#888`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},containerActions:{display:`flex`,gap:6,flexShrink:0},containerCard:{background:`#f8f9fa`,border:`1px solid #e0e0e0`,borderRadius:10,marginBottom:8,overflow:`hidden`},containerItemFlat:{display:`flex`,alignItems:`center`,gap:12,padding:`10px 14px`},limitsRow:{display:`flex`,alignItems:`center`,gap:10,padding:`6px 14px 10px 34px`,fontSize:11,color:`#666`,flexWrap:`wrap`},updatesRow:{display:`flex`,alignItems:`center`,gap:10,padding:`0 14px 10px 34px`,fontSize:11,color:`#666`,flexWrap:`wrap`},limitBadge:{display:`inline-flex`,alignItems:`center`,padding:`2px 8px`,borderRadius:12,background:`#e5e7eb`,color:`#374151`,fontSize:11,fontWeight:500},overrideBadge:{display:`inline-flex`,alignItems:`center`,padding:`2px 8px`,borderRadius:12,background:`#fef3c7`,color:`#92400e`,fontSize:10,fontWeight:600},editLimitsBtn:{marginLeft:`auto`,padding:`3px 10px`,fontSize:11,background:`#fff`,color:`#3b82f6`,border:`1px solid #3b82f6`,borderRadius:6,cursor:`pointer`,fontWeight:500},limitsEditor:{borderTop:`1px solid #e0e0e0`,padding:`14px 14px 14px 34px`,background:`#fff`},limitsEditorGrid:{display:`grid`,gridTemplateColumns:`160px 1fr auto`,gap:`8px 12px`,alignItems:`center`,marginBottom:10},limitsEditorLabel:{fontSize:12,fontWeight:500,color:`#555`},limitsEditorInput:{padding:`5px 8px`,borderRadius:5,border:`1px solid #ccc`,fontSize:12,background:`#fff`,color:`#333`,fontFamily:`inherit`,width:`100%`,boxSizing:`border-box`},limitsEditorInputDisabled:{background:`#f3f4f6`,color:`#9ca3af`,fontStyle:`italic`},limitsEditorUnsetBtn:{width:24,height:24,borderRadius:4,border:`1px solid #d1d5db`,background:`#fff`,color:`#6b7280`,fontSize:14,lineHeight:1,cursor:`pointer`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`},limitsEditorUnsetBtnActive:{background:`#fee2e2`,color:`#991b1b`,border:`1px solid #fca5a5`},limitsEditorAdvancedToggle:{fontSize:11,color:`#3b82f6`,cursor:`pointer`,userSelect:`none`,marginTop:6,marginBottom:10,display:`inline-block`},limitsEditorActions:{display:`flex`,gap:8,justifyContent:`flex-end`,marginTop:10},limitsEditorResult:{marginTop:10,padding:`8px 10px`,borderRadius:6,fontSize:11,lineHeight:1.5},limitsEditorResultLive:{background:`#d1fae5`,color:`#065f46`},limitsEditorResultRecreated:{background:`#fef3c7`,color:`#92400e`},limitsEditorResultError:{background:`#fee2e2`,color:`#991b1b`},limitsEditorWarning:{marginTop:4,fontSize:10,opacity:.85,fontStyle:`italic`},empty:{textAlign:`center`,padding:`30px 16px`,color:`#999`,fontSize:13},fieldRow:{display:`flex`,alignItems:`center`,gap:12,marginBottom:10},label:{fontSize:13,fontWeight:500,color:`#555`,width:160,flexShrink:0},select:{padding:`6px 10px`,borderRadius:6,border:`1px solid #ccc`,fontSize:13,background:`#fff`,color:`#333`},hint:{fontSize:11,color:`#aaa`,marginLeft:8},pruneResult:{fontSize:12,color:`#10b981`,marginTop:6}},Te={running:`#10b981`,stopped:`#f59e0b`,missing:`#94a3b8`,"no-runtime":`#ef4444`},Ee={running:`Running`,stopped:`Stopped`,missing:`Not created`,"no-runtime":`No runtime`};function Q({label:e,value:t,options:n,onChange:r,hint:i}){return L(`div`,{style:Z.fieldRow,children:[I(`span`,{style:Z.label,children:e}),I(`select`,{style:Z.select,value:t,onChange:e=>r(e.target.value),children:n.map(e=>I(`option`,{value:e.value,children:e.label},e.value))}),i&&I(`span`,{style:Z.hint,children:i})]})}function De({label:e,value:t,onChange:n,hint:r}){return L(`div`,{style:Z.fieldRow,children:[I(`span`,{style:Z.label,children:e}),L(`label`,{style:{display:`inline-flex`,alignItems:`center`,cursor:`pointer`,gap:8},children:[I(`input`,{type:`checkbox`,checked:t,onChange:e=>n(e.target.checked),style:{width:16,height:16,cursor:`pointer`}}),I(`span`,{style:{fontSize:13,color:`#555`},children:t?`Enabled`:`Disabled`})]}),r&&I(`span`,{style:Z.hint,children:r})]})}var $=[{key:`cpus`,label:`CPU (cores)`,type:`number`,step:`0.1`,min:`0.1`,placeholder:`e.g. 1.5`,primary:!0},{key:`memory`,label:`Memory`,type:`text`,placeholder:`e.g. 512m, 2g`,primary:!0},{key:`memorySwap`,label:`Memory + swap`,type:`text`,placeholder:`= memory to disable swap`,primary:!0},{key:`pidsLimit`,label:`Max processes`,type:`number`,step:`1`,min:`1`,placeholder:`e.g. 200`,primary:!0},{key:`cpuShares`,label:`CPU priority`,type:`number`,step:`1`,min:`2`,max:`262144`,placeholder:`shares`,primary:!0,widget:`cpuPriority`},{key:`cpusetCpus`,label:`Pin to CPUs`,type:`text`,placeholder:`e.g. "0,1" or "1-3"`,primary:!1},{key:`memoryReservation`,label:`Memory reservation`,type:`text`,placeholder:`soft floor, e.g. 256m`,primary:!1},{key:`oomScoreAdj`,label:`OOM score adjust`,type:`number`,step:`1`,min:`-1000`,max:`1000`,placeholder:`-1000 to 1000`,primary:!1}];function Oe(e){try{let t=new Date(e).getTime();if(!Number.isFinite(t))return e;let n=Math.max(0,Math.floor((Date.now()-t)/1e3));if(n<5)return`just now`;if(n<60)return`${n}s ago`;let r=Math.floor(n/60);if(r<60)return`${r}m ago`;let i=Math.floor(r/60);return i<24?`${i}h ago`:`${Math.floor(i/24)}d ago`}catch{return e}}function ke(e){if(!e)return`No update data`;let{runningTag:t,currentVersion:n,latestVersion:r,updateAvailable:i,reason:a,fromCache:o}=e;return a===`offline`?o?`\u{1F4E1} Offline — last cached result shows ${i?`update available`:`up to date`}`:`📡 Offline — no cached result yet`:a===`newer-version`?`\u2191 Update available: ${n} \u2192 ${r}`:a===`digest-drift`?`\u21BB Rebuild available for :${t}${r?` (latest stable: ${r})`:``}`:a===`up-to-date`?`\u2705 Up to date${n?` (`+n+`)`:``}`:a===`older-than-pinned`?`\u2139 Pinned to ${n}, latest stable is ${r}`:a===`error`?`\u26A0 Check error: ${e.error||`unknown`}`:`State: ${a||`unknown`}`}function Ae(e){if(!e||!e.reason)return null;let{reason:t,runningTag:n,currentVersion:r,latestVersion:i,fromCache:a}=e;return t===`newer-version`?{label:`\u2191 ${i||`update`} available`,bg:`#fef3c7`,fg:`#92400e`,title:`Update available: ${r} \u2192 ${i}`}:t===`digest-drift`?{label:`↻ rebuild available`,bg:`#fef3c7`,fg:`#92400e`,title:`Image rebuild available for :${n}${i?` (latest stable ${i})`:``}`}:t===`offline`?{label:a?`📡 offline (cached)`:`📡 offline`,bg:`#e5e7eb`,fg:`#4b5563`,title:a?`Network unreachable; showing last cached check result`:`Network unreachable; no cached result yet`}:t===`error`?{label:`⚠ check error`,bg:`#fee2e2`,fg:`#991b1b`,title:e.error||`Update check error`}:t===`up-to-date`?{label:`✅ up to date`,bg:`#dcfce7`,fg:`#166534`,title:`Up to date${r?` (`+r+`)`:``}`}:null}function je(e){let t={};for(let n of $){let r=n.key,i=e[n.key];if(i===null){t[r]=null;continue}if(i!==void 0&&i!==``){if(n.type===`number`){let e=Number(i);if(!Number.isFinite(e))continue;t[r]=e}else t[r]=i}}return t}function Me(e){let t=xe[e],n=e.charAt(0).toUpperCase()+e.slice(1);return t===null?`${n} (no request)`:`${n} (${t} shares)`}function Ne(e){for(let t of $){if(t.type!==`number`)continue;let n=e[t.key];if(n==null||n===``)continue;let r=Number(n);if(!Number.isFinite(r))return`${t.label}: "${n}" is not a number`;if(t.step===`1`&&!Number.isInteger(r))return`${t.label}: ${n} must be a whole number`;if(t.min!==void 0&&r<Number(t.min))return`${t.label}: ${n} is below the minimum ${t.min}`;if(t.max!==void 0&&r>Number(t.max))return`${t.label}: ${n} is above the maximum ${t.max}`}return null}function Pe(e,t){if(t==null||t===``)return null;switch(e){case`cpus`:return`${t} CPU`;case`memory`:return`${t}`;case`memorySwap`:return`swap: ${t}`;case`memoryReservation`:return`reserve: ${t}`;case`pidsLimit`:return`${t} PIDs`;case`cpuShares`:{let e=we(Number(t));return e?`priority: ${e}`:`shares: ${t}`}case`cpusetCpus`:return`cpus: ${t}`;case`oomScoreAdj`:return`oom: ${t}`;default:return`${e}: ${t}`}}function Fe({containerName:e,effective:n,initialOverride:r,onApply:i,onResetToDefault:a,onClose:o,cpuWeightAvailable:s}){let c=e=>{let t=e??n,r={};for(let e of $){let n=e.key,i=t?t[n]:void 0;i==null?r[e.key]=``:r[e.key]=String(i)}return r},[l,u]=M(()=>c(n)),[d,f]=M(()=>r?$.some(e=>!e.primary&&r[e.key]!==void 0):!1),[p,m]=M(!1),[h,g]=M(!1),[_,v]=M(null),y=(e,t)=>{u(n=>({...n,[e]:t}))},b=e=>{u(t=>({...t,[e]:t[e]===null?``:null}))},x=()=>{u(c(n)),v(null)},S=async()=>{let e=Ne(l);if(e){v({error:e});return}m(!0),v(null);try{let e=await i(je(l));v(e),e&&e.effective&&u(c(e.effective))}catch(e){v({error:e instanceof Error?e.message:String(e)})}m(!1)},C=async()=>{if(window.confirm(`Reset ${e} to the plugin's default resource limits? This will remove your override and may cause a brief container recreate (~5s of downtime) if memory limits or CPU shares need to be unset.`)){g(!0),v(null);try{let e=await a();v(e),e&&e.effective&&u(c(e.effective))}catch(e){v({error:e instanceof Error?e.message:String(e)})}g(!1)}},w=n=>{let r=l[n.key],i=r===null;if(n.widget===`cpuPriority`){let i=r===null||r===``?null:Number(r),a=i===null||!Number.isFinite(i)?`normal`:we(i);return L(t.Fragment,{children:[I(`label`,{style:Z.limitsEditorLabel,htmlFor:`lim-${e}-${n.key}`,children:n.label}),L(`div`,{style:{display:`flex`,gap:6,alignItems:`center`},children:[L(`select`,{id:`lim-${e}-${n.key}`,value:a??`custom`,onChange:e=>{let t=e.target.value;if(t===`custom`)return;let r=xe[t];y(n.key,r===null?null:String(r))},style:{...Z.limitsEditorInput,width:`auto`},children:[Y.map(e=>I(`option`,{value:e,children:Me(e)},e)),a===null&&L(`option`,{value:`custom`,children:[`Custom (`,i,` shares)`]})]}),I(`span`,{style:{fontSize:11,color:`#6b7280`},children:`or shares`}),I(`input`,{type:`number`,"aria-label":`Custom CPU shares`,value:r??``,step:n.step,min:n.min,max:n.max,placeholder:n.placeholder,onChange:e=>y(n.key,e.target.value===``?null:e.target.value),style:{...Z.limitsEditorInput,width:90}})]}),s?I(`span`,{}):I(`span`,{style:{fontSize:11,color:`#6b7280`},title:`The cpu cgroup controller is not delegated on this host — see the doctor; the value is stored but has no effect`,children:`⚠ no effect on this host`})]},n.key)}return L(t.Fragment,{children:[I(`label`,{style:Z.limitsEditorLabel,htmlFor:`lim-${e}-${n.key}`,children:n.label}),I(`input`,{id:`lim-${e}-${n.key}`,type:i?`text`:n.type,value:i?``:r,step:n.step,min:n.min,max:n.max,placeholder:i?`(unset — remove limit)`:n.placeholder,disabled:i,onChange:e=>y(n.key,e.target.value),style:{...Z.limitsEditorInput,...i?Z.limitsEditorInputDisabled:{}}}),I(`button`,{type:`button`,onClick:()=>b(n.key),title:i?`Click to set a value again`:`Click to explicitly unset (remove this limit)`,style:{...Z.limitsEditorUnsetBtn,...i?Z.limitsEditorUnsetBtnActive:{}},children:i?`↺`:`×`})]},n.key)},T=$.filter(e=>e.primary),E=$.filter(e=>!e.primary);return L(`div`,{style:Z.limitsEditor,children:[I(`div`,{style:Z.limitsEditorGrid,children:T.map(w)}),L(`span`,{onClick:()=>f(!d),style:Z.limitsEditorAdvancedToggle,children:[d?`▾`:`▸`,` Advanced (`,E.length,` more fields)`]}),d&&I(`div`,{style:Z.limitsEditorGrid,children:E.map(w)}),L(`div`,{style:Z.limitsEditorActions,children:[I(`button`,{type:`button`,onClick:o,disabled:p||h,style:{...Z.btn,padding:`6px 12px`,fontSize:12,background:`#fff`,color:`#6b7280`,border:`1px solid #d1d5db`,...p||h?Z.btnDisabled:{}},children:`Close`}),I(`button`,{type:`button`,onClick:C,disabled:p||h,title:`Clear override and restore plugin-default limits`,style:{...Z.btn,padding:`6px 12px`,fontSize:12,background:`#fff`,color:`#d97706`,border:`1px solid #f59e0b`,...p||h?Z.btnDisabled:{}},children:h?`Resetting...`:`Reset to default`}),I(`button`,{type:`button`,onClick:x,disabled:p||h,title:`Discard unsaved changes in this form (does not touch the server)`,style:{...Z.btn,padding:`6px 12px`,fontSize:12,background:`#fff`,color:`#6b7280`,border:`1px solid #d1d5db`,...p||h?Z.btnDisabled:{}},children:`Revert`}),I(`button`,{type:`button`,onClick:S,disabled:p||h,style:{...Z.btn,...Z.btnPrimary,padding:`6px 14px`,fontSize:12,...p||h?Z.btnDisabled:{}},children:p?`Applying...`:`Apply`})]}),_&&I(`div`,{style:{...Z.limitsEditorResult,..._.error?Z.limitsEditorResultError:_.method===`recreated`?Z.limitsEditorResultRecreated:Z.limitsEditorResultLive},children:_.error?L(F,{children:[I(`strong`,{children:`Error:`}),` `,_.error]}):L(F,{children:[I(`strong`,{children:_.method===`live`?`Applied live (no restart)`:`Container recreated`}),_.warnings&&_.warnings.length>0&&I(`div`,{style:Z.limitsEditorWarning,children:_.warnings.map((e,t)=>L(`div`,{children:[`⚠ `,e]},t))})]})})]})}function Ie(e){return e?H(e.status):`No container runtime found`}function Le({configuration:e,save:t}){let n=e||{},[r,i]=M(n.runtime||`auto`),[a,o]=M(n.pruneSchedule||`weekly`),[s,c]=M(ye(n.keepImageVersions)),[l,u]=M(n.updateCheckInterval||`24h`),[d,f]=M(n.backgroundUpdateChecks!==!1),[p,m]=M(X(n.containerCpuPriority,Se)),[h,g]=M(X(n.jobCpuPriority,Ce)),[_,v]=M(n.containerOverrides||{}),[y,b]=M(null),x=!y?.cgroupControllers||y.cgroupControllers.includes(`cpu`),[S,w]=M(null),[T,E]=M([]),[ee,O]=M({}),[te,k]=M({}),[ne,re]=M({}),[A,ie]=M({}),[j,ae]=M(new Set),[oe,se]=M(new Set),[N,P]=M(null),[ce,F]=M(!1),[R,le]=M(!0),[z,B]=M(``),[de,V]=M(!1),[fe,pe]=M(null),H=C(async()=>{try{let[e,t]=await Promise.all([fetch(`/plugins/signalk-container/api/runtime`),fetch(`/plugins/signalk-container/api/containers`)]),n=!1;if(e.ok){let t=await e.json();b(t),n=t!==null}else b(null);if(n)w(null);else try{let e=await fetch(`/plugins/signalk-container/api/doctor/deployment`);e.ok?w(await e.json()):w(null)}catch{w(null)}let r=[];if(t.ok?(r=await t.json(),E(r)):E([]),r.length>0){let e={},t={};await Promise.all(r.map(async n=>{let r=n.unprefixedName;try{let n=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(r)}/resources`);if(n.ok){let i=await n.json();e[r]=i.effective||{},t[r]=i.override??null}}catch{}})),O(e),k(t)}try{let e=await fetch(`/plugins/signalk-container/api/updates`);if(e.ok){let t=await e.json();if(Array.isArray(t)){let e={},n={};for(let r of t)r&&r.containerName&&(n[r.containerName]=r,r.pluginId&&(e[r.containerName]=r.pluginId));re(e=>{let t={...n};for(let r of Object.keys(n)){let i=n[r],a=e[r];i.reason===`unknown`&&a&&a.reason&&a.reason!==`unknown`&&(t[r]=a)}return t}),ie(e)}}}catch{}}catch{b(null),E([])}le(!1)},[]);D(()=>{H();let e=setInterval(H,5e3);return()=>clearInterval(e)},[H]);let U=e=>{se(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},W=async(e,t)=>{let n=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/resources`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(t)}),r=await n.json().catch(()=>({}));return n.ok?(r.effective&&O(t=>({...t,[e]:r.effective})),k(t=>({...t,[e]:r.override??null})),v(t=>{let n={...t};return r.override&&Object.keys(r.override).length>0?n[e]=r.override:delete n[e],n}),{method:r.method,warnings:r.warnings,effective:r.effective}):{error:r.error||`${n.status} ${n.statusText}`}},G=async e=>{let t=A[e];if(!t){B(`${e}: no update service registered. The consumer plugin hasn't migrated to signalk-container's update detection yet.`),V(!0);return}ae(t=>{let n=new Set(t);return n.add(e),n}),B(`Checking ${e} for updates...`),V(!1);try{let n=await fetch(`/plugins/signalk-container/api/updates/${encodeURIComponent(t)}/check`,{method:`POST`});if(n.ok){let t=await n.json();re(n=>({...n,[e]:t})),B(ke(t)),V(!1)}else{let e=await n.json().catch(()=>({error:n.statusText}));B(`Check failed: ${e.error}`),V(!0)}}catch(e){B(`Check error: ${e instanceof Error?e.message:String(e)}`),V(!0)}ae(t=>{let n=new Set(t);return n.delete(e),n})},me=async e=>{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/resources`,{method:`DELETE`}),n=await t.json().catch(()=>({}));return t.ok?(n.effective&&O(t=>({...t,[e]:n.effective})),k(t=>({...t,[e]:null})),v(t=>{let n={...t};return delete n[e],n}),{method:n.method,warnings:n.warnings,effective:n.effective}):{error:n.error||`${t.status} ${t.statusText}`}},he=()=>{let e={};for(let[t,n]of Object.entries(te))n&&Object.keys(n).length>0&&(e[t]=n);t({...n,runtime:r,pruneSchedule:a,keepImageVersions:be(s),maxConcurrentJobs:n.maxConcurrentJobs||2,updateCheckInterval:l,backgroundUpdateChecks:d,containerCpuPriority:X(p,Se),jobCpuPriority:X(h,Ce),containerOverrides:e}),B(`Saved! Plugin will restart.`),V(!1)},K=async e=>{B(`Starting ${e}...`),V(!1);try{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/start`,{method:`POST`});if(t.ok)B(`${e} started.`),H();else{let e=await t.json().catch(()=>({error:t.statusText}));B(`Failed: ${e.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}},ge=async e=>{B(`Stopping ${e}...`),V(!1);try{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/stop`,{method:`POST`});if(t.ok)B(`${e} stopped.`),H();else{let e=await t.json().catch(()=>({error:t.statusText}));B(`Failed: ${e.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}},q=async(e,t)=>{if(t!==`running`||window.confirm(`${e} is running. Stop and remove it?`)){B(`Removing ${e}...`),V(!1);try{let t=await fetch(`/plugins/signalk-container/api/containers/${encodeURIComponent(e)}/remove`,{method:`POST`});if(t.ok)B(`${e} removed.`),H();else{let e=await t.json().catch(()=>({error:t.statusText}));B(`Failed: ${e.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}}},J=async()=>{B(`Pruning dangling images...`),V(!1),pe(null);try{let e=await fetch(`/plugins/signalk-container/api/prune`,{method:`POST`});if(e.ok){let t=await e.json().catch(()=>({error:e.statusText}));pe(t),B(`Pruned ${t.imagesRemoved} image(s), reclaimed ${t.spaceReclaimed}.`)}else{let t=await e.json().catch(()=>({error:e.statusText}));B(`Prune failed: ${t.error}`),V(!0)}}catch(e){B(`Error: ${e instanceof Error?e.message:String(e)}`),V(!0)}};return L(`div`,{style:Z.root,children:[I(`div`,{style:Z.sectionTitle,children:`Runtime`}),R?I(`div`,{style:Z.empty,children:`Detecting container runtime...`}):y?L(`div`,{style:Z.runtimeCard,children:[I(`div`,{style:{...Z.runtimeIcon,background:y.runtime===`podman`?`#892ca0`:`#2496ed`,color:`#fff`},children:y.runtime===`podman`?`P`:`D`}),L(`div`,{style:Z.runtimeInfo,children:[L(`div`,{style:Z.runtimeName,children:[y.runtime.charAt(0).toUpperCase()+y.runtime.slice(1),y.isPodmanDockerShim?` (via docker shim)`:``]}),L(`div`,{style:Z.runtimeVersion,children:[`Version `,y.version]})]}),I(`div`,{style:{...Z.stateIndicator,background:`#10b981`},title:`Runtime available`})]}):L(`div`,{style:Z.runtimeCard,children:[I(`div`,{style:{...Z.runtimeIcon,background:`#fef2f2`,color:`#ef4444`},children:`!`}),L(`div`,{style:Z.runtimeInfo,children:[I(`div`,{style:Z.runtimeName,children:Ie(S)}),S&&S.remediation.length>0&&I(`div`,{style:Z.runtimeRemediation,children:S.remediation.join(`
|
|
10
10
|
`)}),I(`button`,{style:{...Z.btn,...Z.btnSecondary,marginTop:8},onClick:()=>F(!0),children:`Run Doctor`})]})]}),I(`div`,{style:Z.sectionTitle,children:`Settings`}),I(Q,{label:`Preferred runtime`,value:r,onChange:i,options:[{value:`auto`,label:`Auto-detect (Podman preferred)`},{value:`podman`,label:`Podman`},{value:`docker`,label:`Docker`}]}),I(Q,{label:`Auto-prune images`,value:a,onChange:o,options:[{value:`off`,label:`Off`},{value:`weekly`,label:`Weekly`},{value:`monthly`,label:`Monthly`}]}),I(Q,{label:`Keep old image versions`,value:s,onChange:c,options:[{value:`0`,label:`Running only`},{value:`1`,label:`Keep 1 prior`},{value:`2`,label:`Keep 2 prior`},{value:`3`,label:`Keep 3 prior`},{value:`5`,label:`Keep 5 prior`}],hint:a===`off`?`Runs with auto-prune — currently Off`:`Old versions of managed-container images to keep besides the running one`}),I(Q,{label:`Update check interval`,value:l,onChange:u,options:[{value:`1h`,label:`Every hour`},{value:`6h`,label:`Every 6 hours`},{value:`12h`,label:`Every 12 hours`},{value:`24h`,label:`Daily (recommended)`},{value:`48h`,label:`Every 2 days`},{value:`168h`,label:`Weekly`}],hint:`How often to check for new container images`}),I(De,{label:`Background update checks`,value:d,onChange:f,hint:`Disable on metered connections; manual check still works`}),I(Q,{label:`CPU priority: containers`,value:p,onChange:m,options:Y.map(e=>({value:e,label:Me(e)})),hint:x?`Default weight for managed containers when they compete for CPU; a plugin's own cpuShares or a per-container override wins`:`No effect: the cpu cgroup controller is not delegated on this host (see doctor)`}),I(Q,{label:`CPU priority: jobs`,value:h,onChange:g,options:Y.map(e=>({value:e,label:Me(e)})),hint:x?`One-shot helpers (chart imports, GDAL, cleanup) yield to the services under contention; no slowdown on an idle host`:`No effect: the cpu cgroup controller is not delegated on this host (see doctor)`}),I(`div`,{style:Z.sectionTitle,children:`Managed Containers`}),T.length===0?I(`div`,{style:Z.empty,children:R?`Loading...`:`No managed containers. Other plugins will create them.`}):T.map(e=>{let t=e.unprefixedName,n=ee[t]||{},r=te[t],i=r&&Object.keys(r).length>0,a=oe.has(t),o=t.startsWith(`job-`),s=$.map(e=>Pe(e.key,n[e.key])).filter(Boolean),c=ne[t],l=Ae(c),u=!!A[t],d=j.has(t);return L(`div`,{style:Z.containerCard,children:[L(`div`,{style:Z.containerItemFlat,children:[I(`div`,{style:{...Z.stateIndicator,background:Te[e.state]||`#94a3b8`},title:Ee[e.state]||e.state}),L(`div`,{style:Z.containerInfo,children:[I(`div`,{style:Z.containerName,children:e.name}),L(`div`,{style:Z.containerMeta,children:[e.image,` · `,Ee[e.state]||e.state,e.ports&&e.ports.length>0&&e.ports[0]?` · ${e.ports.join(`, `)}`:``]})]}),L(`div`,{style:Z.containerActions,children:[e.state===`stopped`&&I(`button`,{style:{...Z.btn,...Z.btnPrimary,padding:`6px 12px`,fontSize:12},onClick:()=>K(e.name),children:`Start`}),e.state===`running`&&I(`button`,{style:{...Z.btn,...Z.btnWarning},onClick:()=>ge(e.name),children:`Stop`}),I(`button`,{style:{...Z.btn,background:`#fff`,color:`#374151`,border:`1px solid #d1d5db`},onClick:()=>P(e.name),title:`Stream the container's stdout+stderr log`,children:`Logs`}),I(`button`,{style:{...Z.btn,...Z.btnDanger},onClick:()=>q(e.name,e.state),children:`Remove`})]})]}),L(`div`,{style:Z.limitsRow,children:[s.length===0?I(`span`,{style:{color:`#9ca3af`,fontStyle:`italic`},children:`No resource limits set`}):s.map((e,t)=>I(`span`,{style:Z.limitBadge,children:e},t)),i&&I(`span`,{style:Z.overrideBadge,title:`You have a user override configured for this container`,children:`Override active`}),e.state===`running`&&!o&&I(`button`,{type:`button`,style:Z.editLimitsBtn,onClick:()=>U(e.unprefixedName),children:a?`Collapse ▾`:`Edit Limits ▸`})]}),u&&e.state===`running`&&L(`div`,{style:Z.updatesRow,children:[l?I(`span`,{style:{...Z.limitBadge,background:l.bg,color:l.fg},title:l.title,children:l.label}):I(`span`,{style:{color:`#9ca3af`,fontStyle:`italic`},children:`No update check yet`}),c?.lastSuccessfulCheckAt&&L(`span`,{style:{fontSize:10,color:`#9ca3af`},title:`Last successful check: ${c.lastSuccessfulCheckAt}`,children:[`checked`,` `,Oe(c.lastSuccessfulCheckAt)]}),I(`button`,{type:`button`,onClick:()=>G(t),disabled:d,title:`Force a fresh update check now`,style:{...Z.editLimitsBtn,marginLeft:`auto`,...d?Z.btnDisabled:{}},children:d?`Checking...`:`Check now ↻`})]}),a&&I(Fe,{containerName:t,effective:n,initialOverride:r,onApply:e=>W(t,e),onResetToDefault:()=>me(t),onClose:()=>U(e.unprefixedName),cpuWeightAvailable:x})]},e.name)}),I(`div`,{style:Z.sectionTitle,children:`Maintenance`}),L(`div`,{style:{display:`flex`,gap:8,flexWrap:`wrap`},children:[I(`button`,{style:{...Z.btn,...Z.btnSuccess},onClick:J,children:`Prune Dangling Images`}),I(`button`,{style:{...Z.btn,...Z.btnSecondary},onClick:()=>F(!0),children:`Doctor`})]}),z&&I(`div`,{style:{...Z.status,color:de?`#ef4444`:`#10b981`},children:z}),I(`div`,{style:{...Z.sectionTitle,marginTop:28},children:`\xA0`}),I(`button`,{style:{...Z.btn,...Z.btnSave},onClick:he,children:`Save Configuration`}),N&&I(ue,{name:N,onClose:()=>P(null)}),ce&&I(_e,{onClose:()=>F(!1)})]})}export{Le as default};
|
package/public/remoteEntry.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./chunks/vite-preload-helper-CxFQXtKk.js";import{t}from"./chunks/dist-S2EeZB5F.js";typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var n=`__mf_init__virtual:mf:__mfe_internal__signalk_container__mf_owner__1__mf_v__runtimeInit__mf_v__.js__`,r=globalThis[n];if(!r){let e,t,i=new Promise((n,r)=>{e=n,t=r});r=globalThis[n]={initPromise:i,initResolve:e,initReject:t}}var i=r.initResolve,a=`__mf_module_cache__`;globalThis[a]||={share:{},remote:{}},globalThis[a].share||={},globalThis[a].remote||={};var o=globalThis[a];for(let e of Object.keys(o.share))if(e.startsWith(`default:`)){let t=e.slice(8);o.share[t]===void 0&&(o.share[t]=o.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;o.share[t]===void 0&&(o.share[t]=o.share[e])}var s={},c=Array.isArray(`default`)?`default`:[`default`],l=`default`,u=`signalk_container`,d=[],f,p,m;async function h(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}async function g(){return f||=h(()=>e(()=>import(`./chunks/_virtual_mf-localSharedImportMap___mfe_internal__signalk_container__mf_owner__1-COEdWfIZ.js`),[])).catch(e=>{throw f=void 0,e}),f}async function _(){return p||=h(()=>e(()=>import(`./chunks/virtualExposes-BKrYASZv.js`),[])).then(e=>e.default??e).catch(e=>{throw p=void 0,e}),p}async function v(e={},n=[]){let 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},a=(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}},f=Symbol.for(`module-federation.shared-cache-listeners`),p=Symbol.for(`module-federation.shared-cache-owners`),_=e=>{let t=e[p];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,p,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},v=(e,t)=>e[p]?.[t.canonical],y=(e,t,n,r)=>{e[t.canonical]=n;let i=t.aliases||[];for(let t of i)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let a=e[p];r===void 0?a&&delete a[t.canonical]:_(e)[t.canonical]=r;let o=e[f]?.[t.canonical];if(o)for(let e of o)e(n);return n},b=Symbol.for(`module-federation.tree-shaking-shared-cache`),x=e=>{let t=e[b];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,b,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},S=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=x(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},C=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),w=e=>{let t=e[C];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,C,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},T=(e,t,n)=>{let r=a(e,t);return r===void 0?e[C]?.[t.canonical]?.[n]:r},E=(e,t,n,r)=>{let i=w(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},D=globalThis.__FEDERATION__?.__INSTANCES__||[],O=n.find(e=>e?.from)?.from,k=D.find(t=>t?.options?.name===O&&t?.shareScopeMap?.default===e)||D.find(t=>t?.options?.name!==u&&t?.shareScopeMap?.default===e),A=Object.create(null),j=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},M=(e,t)=>{let n=!k&&Object.values(t||{}).some(e=>Object.values(e||{}).some(I)),r=n?j(t):t;return A[e]={host:t,runtime:r,isWebpackScope:n},r},N=()=>{let e=Object.values(A).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},P=Object.create(null);for(let[t,n]of Object.entries(e)){let e=P[t]=Object.create(null);for(let[t,r]of Object.entries(n))e[t]=Object.assign({},r)}let{usedShared:F,usedRemotes:ee}=await g();function I(e){if(typeof e?.get!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let te=Object.values(P).some(e=>Object.values(e||{}).some(I)),ne=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},L=(t,n,r)=>{if(typeof __mfSelectExternalSharedProvider!=`function`)return;let i=ne(t),a=i===t?[[t,n]]:[[t,n],[i,F[i]]];for(let[n,i]of a){if(!i)continue;let a=r?n===t?r:P[n]:e[n],o=__mfSelectExternalSharedProvider(a,n,i,`version-first`);if(o&&I(o)&&!o.lib&&!o.loaded)return o}};var R=s[l];if(R||=s[l]={from:u},n.indexOf(R)>=0)return;n.push(R);let z=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.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},re=[],ie=globalThis.window===void 0?await Promise.all([]):[],B=`__mf_vite_runtime_share_load_id__`,ae=0,V=new Map,H=new Map,U=t({name:u,remotes:ee,shared:F,plugins:[oe(),se(),...re,...ie],shareStrategy:`version-first`});U.initShareScopeMap(`default`,M(`default`,e));function oe(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){let t=e.shareInfo?.[B],n=t===void 0?void 0:H.get(t);if(!n)return e;let r=e.resolver;return e.resolver=(...e)=>(n.pinned.reapply(),r(...e)),n.pinned.reveal(),e}}}function se(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let ce=U.sharedHandler.hooks.lifecycle.resolveShare,W=new WeakMap;ce.on(e=>{let t=e.shareInfo?.[B],n=e.resolver;return typeof n==`function`&&(e.resolver=(...e)=>{let r=n(...e),i=r?.shared;return i&&(typeof i==`object`||typeof i==`function`)&&!W.has(i)&&W.set(i,{from:i.from}),t!==void 0&&i&&V.set(t,i),r}),e});let le=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??n?.scope??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},ue=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),de=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},fe=async(e,t,n)=>{let r=++ae;H.set(r,{pinned:n});try{let n=await U.loadShare(e,{customShareInfo:{shareConfig:t,[B]:r}});return{factory:n===!1?void 0:n,selectedProvider:V.get(r)}}finally{V.delete(r),H.delete(r)}},G=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=le(n,r,i,a);if(!c)return;let l;try{l=await fe(e,t,c)}catch(e){throw c.release(!1),e}let u=l?.factory;if(u===void 0){c.release(!1);return}let d=ue(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=W.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:n?.[t]===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??de(d,u);if(!c.release(!0,h?.provider===c.provider)||!h)return;let g=W.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&n?.[h.version]!==h.provider))return{provider:h.provider,selection:h,resolved:v}},K=new Set,q=new Map,pe=async(t,n,i)=>{let s=!!n.shareConfig?.singleton;if(!s&&n.canLiveRebind!==!1)try{let c=__mfSelectExternalSharedProvider(i,t,n,`version-first`),l=__mfFindSharedProviderEntry(i,c);if(!l)return;let{version:u}=l;if(!s&&u!==n.version||!c.lib&&!c.loading&&!(c.loaded&&typeof c.get==`function`))return;let d=r(t,s,n.version,n.scope);if(a(o.share,d)!==void 0)return;let f=e[t],p=f?.[u];if(l.registered&&!__mfMatchesSharedProvider(p,c))return;let m,h=c.lib;if(!h&&I(c)||(!h&&c.loading&&(h=await c.loading),!h&&c.loaded&&typeof c.get==`function`&&(h=await c.get()),!h))return;let g=typeof h==`function`?h():h,_=await Promise.resolve(g),v=l.registered?p:c;m={provider:v,selection:{provider:v,version:u,from:c.from,registered:l.registered},resolved:_};let b=m?.provider,x=m?.selection;if(!x)return;let S=m?.resolved;if(S===void 0||a(o.share,d)!==void 0||x.registered&&f?.[x.version]!==b)return;y(o.share,d,z(S),x.from),K.add(b)}catch(e){console.error(`[Module Federation] Failed to bridge materialized shared module "`+t+`"`,e)}},J=async(t,n,i,s,c)=>{try{let l=r(t,n.shareConfig?.singleton,n.version,n.scope),d=a(o.share,l),f=v(o.share,l),p=__mfSelectExternalSharedProvider(i,t,n,`version-first`),m=p||__mfSelectSharedProvider(i,t,n,`version-first`)||n,h=__mfFindSharedProviderEntry(i,m);if(!h)return;let g=__mfMatchesSharedProvider(m,n),{version:_}=h;if(!n.shareConfig?.singleton&&_!==n.version)return;let b=s?.[_],x=__mfResolveExternalSharedProvider(D,k,e,`default`,t,h,p,b,`version-first`);if(!x&&!g)return;let{provider:S,scopeRootProvider:C}=x||{provider:m,scopeRootProvider:void 0};if(n.canLiveRebind===!1||d!==void 0&&f!==u)return;let w=e[t],T=w?.[_];if(h.registered&&!C&&!__mfMatchesSharedProvider(T,S))return;let E=await G(t,n.shareConfig,w,_,T,S,h.registered&&!g),O=E?.provider,A=E?.selection;if(!A||__mfMatchesSharedProvider(O,n)||c&&(c.version!==A.version||!__mfMatchesSharedProvider({from:A.from},c.provider))||K.has(O))return;let j=E?.resolved;if(j===void 0)return;let M=a(o.share,l),N=v(o.share,l);if(M!==void 0&&N!==u||A.registered&&w?.[A.version]!==O)return;c||q.set(t,{version:A.version,provider:{from:A.from}}),K.add(O);let P=z(j);y(o.share,l,P,A.from)}catch(e){console.error(`[Module Federation] Failed to bridge external shared module "`+t+`"`,e)}};for(let e of d)await Promise.all(e.map(async e=>{let t=F[e];!t||t.materialize===!1||t.treeShaking||await pe(e,t,P[e])}));for(let[e,t]of Object.entries(F)){if(t.treeShaking)continue;let n=r(e,t.shareConfig?.singleton,t.version,t.scope);if(a(o.share,n)!==void 0)continue;let i=r(e,!0,t.version,t.scope),s=a(o.share,i);s!==void 0&&y(o.share,n,s,v(o.share,i))}let me=[],he=[],Y=me.filter(e=>F[e]&&(F[e].materialize!==!1||F[e].shareConfig?.import===!1));o.providerInit||=new Map;let ge=(e,t)=>{let n=o.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return o.providerInit.set(e,r),r.catch(()=>o.providerInit.delete(e)),r};var X=async e=>{let t=new Set(e);for(let e of he)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{let t=F[e],n=r(e,t.shareConfig?.singleton,t.version,t.scope);if(t.shareConfig?.import===!1||t.treeShaking||a(o.share,n)!==void 0)return;let i=r(e,!0,t.version,t.scope),s=a(o.share,i);if(s!==void 0){y(o.share,n,s,v(o.share,i));return}let c=typeof L==`function`?L(e,t):void 0;if(c&&!c.lib&&!c.loaded)return;let l=n.canonical,d=await ge(l,async()=>{let e=await t.get(),n=typeof e==`function`?e():e;return Promise.resolve(n)}),f=(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.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})(d),p=f===d?{...d}:f;p.__esModule!==!0&&Object.defineProperty(p,"__esModule",{value:!0,enumerable:!1}),y(o.share,n,p,u)}))};let Z=e=>{let t=F[e];if(!t.treeShaking&&t.shareConfig?.import!==!1)return!1;let n=r(e,t.shareConfig?.singleton,t.version,t.scope);return t.treeShaking?T(o.share,n,u)===void 0&&a(o.share,n)===void 0:a(o.share,n)===void 0},Q=Y.findIndex(e=>{let t=F[e],n=r(e,t.shareConfig?.singleton,t.version,t.scope);return(t.treeShaking?T(o.share,n,u)??a(o.share,n):a(o.share,n))===void 0?t.treeShaking||t.shareConfig?.import===!1?!0:typeof __mfSelectExternalSharedProvider==`function`&&!!__mfSelectExternalSharedProvider(P[e],e,t,`version-first`):!1}),_e=Q===-1?Y:Y.slice(0,Q);var ve=Q===-1?[]:Y.slice(Q);await X(_e);try{await h(async()=>{await Promise.all(await U.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}N();let $=async()=>{for(let t of d)await Promise.all(t.map(async t=>{let n=F[t];!n||n.materialize===!1||n.treeShaking||await J(t,n,e[t],P[t],void 0)}))};await $(),te&&(m=$);try{let e=globalThis.__FEDERATION__?.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of c){let r=n?.[e];if(r)for(let[e,n]of Object.entries(r)){let r=F?.[e],i=P[e],a=q.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!__mfMatchesSharedProvider(t,a.provider))continue;let n=i[e];(t===n||n?.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let e of d)await Promise.all(e.map(async e=>{let n=t[e];n&&await J(e,F[e],n,P[e],q.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let ye=async()=>{},be=async(t,n)=>{let i=r(t,n.shareConfig?.singleton,n.version,n.scope),s=n.treeShaking?T(o.share,i,u):a(o.share,i);if(n.shareConfig?.import!==!1||s!==void 0||L(t,n,P[t]))return;let c=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.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},l=e?.[t],d=__mfSelectSharedProvider(l,t,n,`version-first`)||n,f=__mfFindSharedProviderEntry(l,d);if(!f)return;let{version:p}=f,m=l?.[p],h=await G(t,n.shareConfig,l,p,m,d,f.registered&&!__mfMatchesSharedProvider(d,n)),g=h?.selection,_=h?.provider,v=h?.resolved;if(!g||__mfMatchesSharedProvider(_,n)||v===void 0||(n.treeShaking?T(o.share,i,u):a(o.share,i))!==void 0||g.registered&&l?.[g.version]!==_)return;let b=c(v);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];S(o.share,i,e,b),E(o.share,i,u,b)}else y(o.share,i,b,g.from)},xe=[];for(let e of ve){let t=F[e];if(Z(e))try{t.treeShaking?await ye(e,t):t.shareConfig?.import===!1&&await be(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t);break}if(Z(e))break;xe.push(e)}return await X(xe),i(U),U}async function y(e){let t=await _();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return m&&await m(),o.pendingShareLoads&&await Promise.all(o.pendingShareLoads),t[e]().then(e=>()=>e)}export{y as get,v as init};
|
|
1
|
+
import{t as e}from"./chunks/vite-preload-helper-CxFQXtKk.js";import{t}from"./chunks/dist-S2EeZB5F.js";typeof __VUE_HMR_RUNTIME__>`u`&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});var n=`__mf_init__virtual:mf:__mfe_internal__signalk_container__mf_owner__1__mf_v__runtimeInit__mf_v__.js__`,r=globalThis[n];if(!r){let e,t,i=new Promise((n,r)=>{e=n,t=r});r=globalThis[n]={initPromise:i,initResolve:e,initReject:t}}var i=r.initResolve,a=`__mf_module_cache__`;globalThis[a]||={share:{},remote:{}},globalThis[a].share||={},globalThis[a].remote||={};var o=globalThis[a];for(let e of Object.keys(o.share))if(e.startsWith(`default:`)){let t=e.slice(8);o.share[t]===void 0&&(o.share[t]=o.share[e])}else if(!e.includes(`:`)){let t=`default:`+e;o.share[t]===void 0&&(o.share[t]=o.share[e])}var s={},c=Array.isArray(`default`)?`default`:[`default`],l=`default`,u=`signalk_container`,d=[],f,p,m;async function h(e){for(let t=0;;t++)try{return await e()}catch(e){throw e}}async function g(){return f||=h(()=>e(()=>import(`./chunks/_virtual_mf-localSharedImportMap___mfe_internal__signalk_container__mf_owner__1-COEdWfIZ.js`),[])).catch(e=>{throw f=void 0,e}),f}async function _(){return p||=h(()=>e(()=>import(`./chunks/virtualExposes-BKrYASZv.js`),[])).then(e=>e.default??e).catch(e=>{throw p=void 0,e}),p}async function v(e={},n=[]){let 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},a=(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}},f=Symbol.for(`module-federation.shared-cache-listeners`),p=Symbol.for(`module-federation.shared-cache-owners`),_=e=>{let t=e[p];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,p,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},v=(e,t)=>e[p]?.[t.canonical],y=(e,t,n,r)=>{e[t.canonical]=n;let i=t.aliases||[];for(let t of i)Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0});let a=e[p];r===void 0?a&&delete a[t.canonical]:_(e)[t.canonical]=r;let o=e[f]?.[t.canonical];if(o)for(let e of o)e(n);return n},b=Symbol.for(`module-federation.tree-shaking-shared-cache`),x=e=>{let t=e[b];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,b,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},S=(e,t,n,r)=>{if(!Array.isArray(n))return r;let i=[...new Set(n)].sort(),a=x(e),o=a[t.canonical]||=[],s=o.find(e=>e.providedExports.length===i.length&&e.providedExports.every((e,t)=>e===i[t]));return s?s.value=r:o.push({providedExports:i,value:r}),r},C=Symbol.for(`module-federation.tree-shaking-shared-selection-cache`),w=e=>{let t=e[C];return t===void 0&&(t=Object.create(null),Object.defineProperty(e,C,{value:t,enumerable:!1,configurable:!1,writable:!1})),t},T=(e,t,n)=>{let r=a(e,t);return r===void 0?e[C]?.[t.canonical]?.[n]:r},E=(e,t,n,r)=>{let i=w(e),a=i[t.canonical]||=Object.create(null);return a[n]=r,r},D=globalThis.__FEDERATION__?.__INSTANCES__||[],O=n.find(e=>e?.from)?.from,k=D.find(t=>t?.options?.name===O&&t?.shareScopeMap?.default===e)||D.find(t=>t?.options?.name!==u&&t?.shareScopeMap?.default===e),A=Object.create(null),j=e=>{let t=Object.create(null);for(let[n,r]of Object.entries(e||{}))t[n]=Object.assign(Object.create(null),r);return t},M=(e,t)=>{let n=!k&&Object.values(t||{}).some(e=>Object.values(e||{}).some(I)),r=n?j(t):t;return A[e]={host:t,runtime:r,isWebpackScope:n},r},N=()=>{let e=Object.values(A).filter(({isWebpackScope:e})=>e);if(e.length!==0)for(let{host:t,runtime:n}of e)for(let[e,r]of Object.entries(t||{})){let t=n[e]||=Object.create(null);for(let[e,n]of Object.entries(r||{}))t[e]=n}},P=Object.create(null);for(let[t,n]of Object.entries(e)){let e=P[t]=Object.create(null);for(let[t,r]of Object.entries(n))e[t]=Object.assign({},r)}let{usedShared:F,usedRemotes:ee}=await g();function I(e){if(typeof e?.get!=`function`)return!1;let t=Function.prototype.toString.call(e.get);return t.includes(`__webpack_require__`)||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(t)}let te=Object.values(P).some(e=>Object.values(e||{}).some(I)),ne=e=>{let t=e.split(`/`);return e.startsWith(`@`)?t.slice(0,2).join(`/`):t[0]},L=(t,n,r)=>{if(typeof __mfSelectExternalSharedProvider!=`function`)return;let i=ne(t),a=i===t?[[t,n]]:[[t,n],[i,F[i]]];for(let[n,i]of a){if(!i)continue;let a=r?n===t?r:P[n]:e[n],o=__mfSelectExternalSharedProvider(a,n,i,`version-first`);if(o&&I(o)&&!o.lib&&!o.loaded)return o}};var R=s[l];if(R||=s[l]={from:u},n.indexOf(R)>=0)return;n.push(R);let z=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.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},re=[],ie=globalThis.window===void 0?await Promise.all([]):[],B=`__mf_vite_runtime_share_load_id__`,ae=0,V=new Map,H=new Map,U=t({name:u,remotes:ee,shared:F,plugins:[oe(),se(),...re,...ie],shareStrategy:`version-first`});U.initShareScopeMap(`default`,M(`default`,e));function oe(){return{name:`vite-share-pin-lifecycle-plugin`,resolveShare(e){let t=e.shareInfo?.[B],n=t===void 0?void 0:H.get(t);if(!n)return e;let r=e.resolver;return e.resolver=(...e)=>(n.pinned.reapply(),r(...e)),n.pinned.reveal(),e}}}function se(){return{name:`vite-real-name-snapshot-plugin`,afterLoadSnapshot(e){let t=e&&e.remoteSnapshot,n=t&&t.globalName,r=t&&t.version;if(!n||!r||!t.remoteEntry)return e;let i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,a=n+`:`+r;return i&&!i[a]&&(i[a]=t),e}}}let ce=U.sharedHandler.hooks.lifecycle.resolveShare,W=new WeakMap;ce.on(e=>{let t=e.shareInfo?.[B],n=e.resolver;return typeof n==`function`&&(e.resolver=(...e)=>{let r=n(...e),i=r?.shared;return i&&(typeof i==`object`||typeof i==`function`)&&!W.has(i)&&W.set(i,{from:i.from}),t!==void 0&&i&&V.set(t,i),r}),e});let le=(e,t,n,r)=>{if(!e||e[t]!==n)return;let i=Object.assign({},r,{version:r.version??t,scope:r.scope??n?.scope??[`default`],strategy:`loaded-first`}),a=r.from;e[t]=i;let o=()=>n===void 0?e[t]===void 0:e[t]===n;return{provider:i,reveal(){return e[t]===i&&(n===void 0?delete e[t]:e[t]=n,!0)},reapply(){return o()?(e[t]=i,!0):!1},release(s,c=!0){return r.from=a,e[t]===i?c?s?(i.from=a,s&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete e[t]:e[t]=n,!1):(n===void 0?delete e[t]:e[t]=n,!0):!c&&o()}}},ue=e=>Object.entries(e||{}).map(([e,t])=>({provider:t,version:e,from:t.from,registered:!0})),de=(e,t)=>{if(t===void 0)return;let n;for(let r of e){let e=r.provider,i=e.treeShaking||e;if(r.loadedFactory===t||e.lib===t||i.lib===t){if(n)return;n=r}}return n},fe=async(e,t,n)=>{let r=++ae;H.set(r,{pinned:n});try{let n=await U.loadShare(e,{customShareInfo:{shareConfig:t,[B]:r}});return{factory:n===!1?void 0:n,selectedProvider:V.get(r)}}finally{V.delete(r),H.delete(r)}},G=async(e,t,n,r,i,a,o=!0)=>{let s=a.from,c=le(n,r,i,a);if(!c)return;let l;try{l=await fe(e,t,c)}catch(e){throw c.release(!1),e}let u=l?.factory;if(u===void 0){c.release(!1);return}let d=ue(n),f=c.provider.treeShaking||c.provider,p=c.provider.lib===u||f.lib===u;if(!o&&p){let e=d.findIndex(e=>e.provider===c.provider);e!==-1&&d.splice(e,1)}!o&&!d.some(e=>e.provider===a)&&d.push({provider:a,version:r,from:s,registered:!1,loadedFactory:p?u:void 0});let m=!o&&l.selectedProvider===c.provider&&p?a:l.selectedProvider;if(m&&!d.some(e=>e.provider===m)){let e=W.get(m),t=typeof m.version==`string`&&m.version?m.version:r;d.push({provider:m,version:t,from:e?e.from:m.from,registered:n?.[t]===m,loadedFactory:u})}let h=d.find(e=>e.provider===m)??de(d,u);if(!c.release(!0,h?.provider===c.provider)||!h)return;let g=W.get(h.provider);h.from=h.provider===a?s:g?g.from:h.provider.from,g&&(h.provider.from=g.from);let _=typeof u==`function`?u():u,v=await Promise.resolve(_);if(!(h.registered&&n?.[h.version]!==h.provider))return{provider:h.provider,selection:h,resolved:v}},K=new Set,q=new Map,pe=async(t,n,i)=>{let s=!!n.shareConfig?.singleton;if(!s&&n.canLiveRebind!==!1)try{let c=__mfSelectExternalSharedProvider(i,t,n,`version-first`),l=__mfFindSharedProviderEntry(i,c);if(!l)return;let{version:u}=l;if(!s&&u!==n.version||!c.lib&&!c.loading&&!(c.loaded&&typeof c.get==`function`))return;let d=r(t,s,n.version,n.scope);if(a(o.share,d)!==void 0)return;let f=e[t],p=f?.[u];if(l.registered&&!__mfMatchesSharedProvider(p,c))return;let m,h=c.lib;if(!h&&I(c)||(!h&&c.loading&&(h=await c.loading),!h&&c.loaded&&typeof c.get==`function`&&(h=await c.get()),!h))return;let g=typeof h==`function`?h():h,_=await Promise.resolve(g),v=l.registered?p:c;m={provider:v,selection:{provider:v,version:u,from:c.from,registered:l.registered},resolved:_};let b=m?.provider,x=m?.selection;if(!x)return;let S=m?.resolved;if(S===void 0||a(o.share,d)!==void 0||x.registered&&f?.[x.version]!==b)return;y(o.share,d,z(S),x.from),K.add(b)}catch(e){console.error(`[Module Federation] Failed to bridge materialized shared module "`+t+`"`,e)}},J=async(t,n,i,s,c)=>{try{let l=r(t,n.shareConfig?.singleton,n.version,n.scope),d=a(o.share,l),f=v(o.share,l),p=__mfSelectExternalSharedProvider(i,t,n,`version-first`),m=p||__mfSelectSharedProvider(i,t,n,`version-first`)||n,h=__mfFindSharedProviderEntry(i,m);if(!h)return;let g=__mfMatchesSharedProvider(m,n),{version:_}=h;if(!n.shareConfig?.singleton&&_!==n.version)return;let b=s?.[_],x=__mfResolveExternalSharedProvider(D,k,e,`default`,t,h,p,b,`version-first`);if(!x&&!g)return;let{provider:S,scopeRootProvider:C}=x||{provider:m,scopeRootProvider:void 0};if(n.canLiveRebind===!1||d!==void 0&&f!==u)return;let w=e[t],T=w?.[_];if(h.registered&&!C&&!__mfMatchesSharedProvider(T,S))return;let E=await G(t,n.shareConfig,w,_,T,S,h.registered&&!g),O=E?.provider,A=E?.selection;if(!A||__mfMatchesSharedProvider(O,n)||c&&(c.version!==A.version||!__mfMatchesSharedProvider({from:A.from},c.provider))||K.has(O))return;let j=E?.resolved;if(j===void 0)return;let M=a(o.share,l),N=v(o.share,l);if(M!==void 0&&N!==u||A.registered&&w?.[A.version]!==O)return;c||q.set(t,{version:A.version,provider:{from:A.from}}),K.add(O);let P=z(j);y(o.share,l,P,A.from)}catch(e){console.error(`[Module Federation] Failed to bridge external shared module "`+t+`"`,e)}};for(let e of d)await Promise.all(e.map(async e=>{let t=F[e];t&&t.materialize!==!1&&!t.treeShaking&&await pe(e,t,P[e])}));for(let[e,t]of Object.entries(F)){if(t.treeShaking)continue;let n=r(e,t.shareConfig?.singleton,t.version,t.scope);if(a(o.share,n)!==void 0)continue;let i=r(e,!0,t.version,t.scope),s=a(o.share,i);s!==void 0&&y(o.share,n,s,v(o.share,i))}let me=[],he=[],Y=me.filter(e=>F[e]&&(F[e].materialize!==!1||F[e].shareConfig?.import===!1));o.providerInit||=new Map;let ge=(e,t)=>{let n=o.providerInit.get(e);if(n)return n;let r=Promise.resolve().then(t);return o.providerInit.set(e,r),r.catch(()=>o.providerInit.delete(e)),r};var X=async e=>{let t=new Set(e);for(let e of he)await Promise.all(e.filter(e=>t.has(e)).map(async e=>{let t=F[e],n=r(e,t.shareConfig?.singleton,t.version,t.scope);if(t.shareConfig?.import===!1||t.treeShaking||a(o.share,n)!==void 0)return;let i=r(e,!0,t.version,t.scope),s=a(o.share,i);if(s!==void 0){y(o.share,n,s,v(o.share,i));return}let c=typeof L==`function`?L(e,t):void 0;if(c&&!c.lib&&!c.loaded)return;let l=n.canonical,d=await ge(l,async()=>{let e=await t.get(),n=typeof e==`function`?e():e;return Promise.resolve(n)}),f=(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.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})(d),p=f===d?{...d}:f;p.__esModule!==!0&&Object.defineProperty(p,"__esModule",{value:!0,enumerable:!1}),y(o.share,n,p,u)}))};let Z=e=>{let t=F[e];if(!t.treeShaking&&t.shareConfig?.import!==!1)return!1;let n=r(e,t.shareConfig?.singleton,t.version,t.scope);return t.treeShaking?T(o.share,n,u)===void 0&&a(o.share,n)===void 0:a(o.share,n)===void 0},Q=Y.findIndex(e=>{let t=F[e],n=r(e,t.shareConfig?.singleton,t.version,t.scope);return(t.treeShaking?T(o.share,n,u)??a(o.share,n):a(o.share,n))===void 0?t.treeShaking||t.shareConfig?.import===!1?!0:typeof __mfSelectExternalSharedProvider==`function`&&!!__mfSelectExternalSharedProvider(P[e],e,t,`version-first`):!1}),_e=Q===-1?Y:Y.slice(0,Q);var ve=Q===-1?[]:Y.slice(Q);await X(_e);try{await h(async()=>{await Promise.all(await U.initializeSharing(`default`,{strategy:`version-first`,from:`build`,initScope:n}))})}catch(e){console.error(`[Module Federation]`,e)}N();let $=async()=>{for(let t of d)await Promise.all(t.map(async t=>{let n=F[t];n&&n.materialize!==!1&&!n.treeShaking&&await J(t,n,e[t],P[t],void 0)}))};await $(),te&&(m=$);try{let e=globalThis.__FEDERATION__?.__SHARE__,t=Object.create(null);if(e)for(let[,n]of Object.entries(e))for(let e of c){let r=n?.[e];if(r)for(let[e,n]of Object.entries(r)){let r=F?.[e],i=P[e],a=q.get(e);if(!r||!i||!a||r.treeShaking)continue;let o=t[e]||(t[e]=Object.create(null));for(let[e,t]of Object.entries(n)){if(!t.lib||a.version!==e||!__mfMatchesSharedProvider(t,a.provider))continue;let n=i[e];(t===n||n?.from&&t.from===n.from)&&(t===r||r.from&&t.from===r.from||o[e]===void 0&&(o[e]=t))}}}for(let e of d)await Promise.all(e.map(async e=>{let n=t[e];n&&await J(e,F[e],n,P[e],q.get(e))}))}catch(e){console.error(`[Module Federation] Failed to bridge external shared modules`,e)}let ye=async()=>{},be=async(t,n)=>{let i=r(t,n.shareConfig?.singleton,n.version,n.scope),s=n.treeShaking?T(o.share,i,u):a(o.share,i);if(n.shareConfig?.import!==!1||s!==void 0||L(t,n,P[t]))return;let c=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.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},l=e?.[t],d=__mfSelectSharedProvider(l,t,n,`version-first`)||n,f=__mfFindSharedProviderEntry(l,d);if(!f)return;let{version:p}=f,m=l?.[p],h=await G(t,n.shareConfig,l,p,m,d,f.registered&&!__mfMatchesSharedProvider(d,n)),g=h?.selection,_=h?.provider,v=h?.resolved;if(!g||__mfMatchesSharedProvider(_,n)||v===void 0||(n.treeShaking?T(o.share,i,u):a(o.share,i))!==void 0||g.registered&&l?.[g.version]!==_)return;let b=c(v);if(n.treeShaking){let e=n.treeShaking.providedExports??n.treeShaking.usedExports??[];S(o.share,i,e,b),E(o.share,i,u,b)}else y(o.share,i,b,g.from)},xe=[];for(let e of ve){let t=F[e];if(Z(e))try{t.treeShaking?await ye(e,t):t.shareConfig?.import===!1&&await be(e,t)}catch(t){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${e}"`,t);break}if(Z(e))break;xe.push(e)}return await X(xe),i(U),U}async function y(e){let t=await _();if(!(e in t))throw Error(`[Module Federation] Module ${e} does not exist in container.`);return m&&await m(),o.pendingShareLoads&&await Promise.all(o.pendingShareLoads),t[e]().then(e=>()=>e)}export{y as get,v as init};
|