Files
oikos/web/node_modules/@surdeddd/wmkit/dist/persist.cjs.map
dtoro d4d99a7473
Some checks failed
ci / build-test (push) Has been cancelled
ci / docker-build (push) Has been cancelled
feat: Phase 1 — extract the client (web SPA + desktop) to dtoro/oikos-web
Problem: the hexagonal refactor churns the backend tree for nine more
phases; the UI delivery stack (web/ SPA, cmd/desktop Wails wrapper,
compose/web image) must move to its own repo first so doc/layout
rewrites land once on a backend-only tree.

Change:
- New repo git.hubris.network/dtoro/oikos-web (v0.33.0): web/, desktop/
  (updateURL repointed to oikos-web releases), compose/, own CI (web +
  desktop jobs), own deploy script (CI-green gate, TOCTOU guard,
  version-tagged images, prune-to-3), own webhook receiver on :9798 +
  launchd unit, own compose project publishing the same 8091:80.
- Cutover executed on mac-mini in order: oikos stack's web service
  stopped+removed, oikos-web project brought up on 8091; outer Caddy
  untouched (targets the published port) — serving + Authentik flow +
  /wails 404 quirk verified post-cutover.
- Stripped from oikos: web/, cmd/desktop/, compose/web/, desktop CI
  workflow, ci.yml web job, Makefile ui/desktop/desktop-package/install
  targets, the compose web service, oikos-web from deploy.sh's fallback
  prune list; wails + go-keyring dropped from go.mod, vendor synced.
- README / CONTRIBUTING / AGENTS.md / .agents dev+operations docs now
  point at the new repo; mbse + mascot design docs carry a path note.

Risk: production SPA serving depends on the new pipeline now; rollback
is versioned-image re-up of the old web service from a pre-split
checkout (port 8091). Desktop builds installed before the split still
check dtoro/oikos releases — one manual reinstall, noted in the
oikos-web release notes.

Verification: go vet, make test (race), make generate-check, golangci
(no new findings; baseline down 400→365); post-cutover curls —
localhost:8091 200, /wails/runtime.js 404, outer Caddy 302 Authentik.
2026-08-15 22:27:52 +02:00

1 line
4.0 KiB
Plaintext

{"version":3,"sources":["../src/plugins/persist.ts"],"names":[],"mappings":";;;AAsBA,SAAS,cAAA,GAAwC;AAC/C,EAAA,IAAI;AACF,IAAA,MAAM,UAAU,UAAA,CAAW,YAAA;AAC3B,IAAA,MAAM,KAAA,GAAQ,iBAAA;AACd,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAO,GAAG,CAAA;AAC1B,IAAA,OAAA,CAAQ,WAAW,KAAK,CAAA;AACxB,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEO,SAAS,OAAA,CAAQ,EAAA,EAAmB,OAAA,GAA0B,EAAC,EAAsB;AAC1F,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,IAAO,OAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,OAAA,IAAW,cAAA,EAAe;AAClD,EAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,IAAY,GAAA;AACrC,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,SAAS,IAAA,GAAa;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,QAAQ,GAAA,EAAK,IAAA,CAAK,UAAU,EAAA,CAAG,SAAA,EAAW,CAAC,CAAA;AAAA,IACrD,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX;AAEA,EAAA,SAAS,OAAA,GAAmB;AAC1B,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,IAAA,IAAI,GAAA,GAAqB,IAAA;AACzB,IAAA,IAAI;AACF,MAAA,GAAA,GAAM,OAAA,CAAQ,QAAQ,GAAG,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,KAAK,OAAO,KAAA;AACjB,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AACF,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,IACvB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,KAAA;AAAA,IACT;AACA,IAAA,SAAA,GAAY,IAAA;AACZ,IAAA,MAAM,QAAA,GAAW,EAAA,CAAG,OAAA,CAAQ,IAAI,CAAA;AAChC,IAAA,SAAA,GAAY,KAAA;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,SAAS,KAAA,GAAc;AACrB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,WAAW,GAAG,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX;AAEA,EAAA,MAAM,WAAA,GAAc,EAAA,CAAG,SAAA,CAAU,MAAM;AACrC,IAAA,IAAI,SAAA,IAAa,CAAC,OAAA,EAAS;AAC3B,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,KAAK,CAAA;AAC3C,IAAA,KAAA,GAAQ,UAAA,CAAW,MAAM,QAAQ,CAAA;AAAA,EACnC,CAAC,CAAA;AAED,EAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,KAAA,EAAO,OAAA,EAAQ;AAE3C,EAAA,OAAO;AAAA,IACL,OAAA;AAAA,IACA,IAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,WAAA,EAAY;AACZ,MAAA,IAAI,KAAA,KAAU,MAAA,EAAW,YAAA,CAAa,KAAK,CAAA;AAAA,IAC7C;AAAA,GACF;AACF","file":"persist.cjs","sourcesContent":["import type { SerializedState, WindowManager } from '../core/types'\n\nexport interface PersistStorage {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n removeItem(key: string): void\n}\n\nexport interface PersistOptions {\n key?: string\n storage?: PersistStorage\n debounce?: number\n autoRestore?: boolean\n}\n\nexport interface PersistController {\n restore(): boolean\n save(): void\n clear(): void\n destroy(): void\n}\n\nfunction defaultStorage(): PersistStorage | null {\n try {\n const storage = globalThis.localStorage\n const probe = '__wmkit_probe__'\n storage.setItem(probe, '1')\n storage.removeItem(probe)\n return storage\n } catch {\n return null\n }\n}\n\nexport function persist(wm: WindowManager, options: PersistOptions = {}): PersistController {\n const key = options.key ?? 'wmkit'\n const storage = options.storage ?? defaultStorage()\n const debounce = options.debounce ?? 150\n let timer: ReturnType<typeof setTimeout> | undefined\n let suspended = false\n\n function save(): void {\n if (!storage) return\n try {\n storage.setItem(key, JSON.stringify(wm.serialize()))\n } catch {}\n }\n\n function restore(): boolean {\n if (!storage) return false\n let raw: string | null = null\n try {\n raw = storage.getItem(key)\n } catch {\n return false\n }\n if (!raw) return false\n let data: SerializedState\n try {\n data = JSON.parse(raw) as SerializedState\n } catch {\n return false\n }\n suspended = true\n const restored = wm.hydrate(data)\n suspended = false\n return restored\n }\n\n function clear(): void {\n if (!storage) return\n try {\n storage.removeItem(key)\n } catch {}\n }\n\n const unsubscribe = wm.subscribe(() => {\n if (suspended || !storage) return\n if (timer !== undefined) clearTimeout(timer)\n timer = setTimeout(save, debounce)\n })\n\n if (options.autoRestore !== false) restore()\n\n return {\n restore,\n save,\n clear,\n destroy() {\n unsubscribe()\n if (timer !== undefined) clearTimeout(timer)\n },\n }\n}\n"]}