@pinia/colada-devtools 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/index.js +64 -63
  2. package/dist/index.js.map +1 -1
  3. package/dist-panel/{_queryId_-13o6pDV6.js → _queryId_-Belc_zp1.js} +211 -218
  4. package/dist-panel/_queryId_-Belc_zp1.js.map +1 -0
  5. package/dist-panel/{index-DcKBZRe1.js → index-8zera7xN.js} +4 -4
  6. package/dist-panel/{index-DcKBZRe1.js.map → index-8zera7xN.js.map} +1 -1
  7. package/dist-panel/index-LWD0-6oX.js +6561 -0
  8. package/dist-panel/index-LWD0-6oX.js.map +1 -0
  9. package/dist-panel/{index-DgZ0YYsh.js → index-ahP8xsZT.js} +2 -2
  10. package/dist-panel/{index-DgZ0YYsh.js.map → index-ahP8xsZT.js.map} +1 -1
  11. package/dist-panel/index.js +1 -1
  12. package/dist-panel/{loader-Dx4_68Bp.js → loader-D4fVpj_e.js} +6 -6
  13. package/dist-panel/loader-D4fVpj_e.js.map +1 -0
  14. package/dist-panel/{mouse-pointer-click-BeSJo9Pm.js → mouse-pointer-click-Ckyof3Oo.js} +4 -4
  15. package/dist-panel/mouse-pointer-click-Ckyof3Oo.js.map +1 -0
  16. package/dist-panel/mutations-D5gH6B6q.js +13 -0
  17. package/dist-panel/mutations-D5gH6B6q.js.map +1 -0
  18. package/dist-panel/{queries-BWAwqUDO.js → queries-55qwqD5F.js} +219 -219
  19. package/dist-panel/queries-55qwqD5F.js.map +1 -0
  20. package/dist-panel/{settings-CAkjqhkP.js → settings-C6gLVIkW.js} +2 -2
  21. package/dist-panel/{settings-CAkjqhkP.js.map → settings-C6gLVIkW.js.map} +1 -1
  22. package/dist-shared/index.js +1 -1
  23. package/dist-shared/index.js.map +1 -1
  24. package/package.json +9 -9
  25. package/dist-panel/_queryId_-13o6pDV6.js.map +0 -1
  26. package/dist-panel/index-BgTq8RHl.js +0 -6497
  27. package/dist-panel/index-BgTq8RHl.js.map +0 -1
  28. package/dist-panel/loader-Dx4_68Bp.js.map +0 -1
  29. package/dist-panel/mouse-pointer-click-BeSJo9Pm.js.map +0 -1
  30. package/dist-panel/mutations-4_Hc86Rz.js +0 -13
  31. package/dist-panel/mutations-4_Hc86Rz.js.map +0 -1
  32. package/dist-panel/queries-BWAwqUDO.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries-55qwqD5F.js","sources":["../src/panel/components/UCircleProgress.ce.vue","../src/panel/utils/query-state.ts","../src/panel/composables/performance-now.ts","../src/panel/components/ListQueryEntry.vue","../src/panel/components/UInput.ce.vue","../../node_modules/.pnpm/@posva+splitpanes@4.0.6_vue@3.5.22_typescript@5.9.2_/node_modules/@posva/splitpanes/dist/splitpanes.js","../src/panel/composables/use-container-media-query.ts","../src/panel/pages/queries.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst {\n value,\n min = 0,\n max = 100,\n strokeWidth = 2,\n} = defineProps<{\n value: number\n min?: number\n max?: number\n strokeWidth?: number\n}>()\n\nconst valuePercentage = computed(() => Math.round(((value - min) / (max - min)) * 100))\n</script>\n\n<template>\n <div class=\"progress-bar\" aria-hidden>\n <svg>\n <circle class=\"bg\" />\n <circle class=\"fg\" />\n </svg>\n </div>\n</template>\n\n<style scoped>\n.progress-bar > svg {\n --progress-value: v-bind(valuePercentage);\n --size: 1em;\n --half-size: calc(var(--size) / 2);\n --stroke-width: calc(v-bind(strokeWidth) * var(--size) / 10);\n --radius: calc((var(--size) - var(--stroke-width)) / 2);\n --circumference: calc(var(--radius) * pi * 2);\n --dash: calc((var(--progress-value) * var(--circumference)) / 100);\n animation: progress-animation 100s linear 0s 1 forwards;\n\n width: var(--size);\n height: var(--size);\n}\n\n.progress-bar circle {\n cx: var(--half-size);\n cy: var(--half-size);\n r: var(--radius);\n stroke-width: var(--stroke-width);\n fill: none;\n stroke-linecap: butt;\n}\n\n.progress-bar circle.bg {\n stroke: color-mix(in hsl, currentColor 25%, var(--ui-bg));\n}\n\n.progress-bar circle.fg {\n transform: rotate(-90deg);\n transform-origin: var(--half-size) var(--half-size);\n stroke-dasharray: var(--dash) calc(var(--circumference) - var(--dash));\n transition: stroke-dasharray 0.3s linear 0s;\n stroke: currentColor;\n}\n</style>\n","import type { UseQueryEntryPayload } from '@pinia/colada-devtools/shared'\n\nexport type UseQueryEntryPayloadStatus =\n | 'loading'\n | 'fresh'\n | 'error'\n | 'stale'\n | 'pending'\n | 'unknown'\n\nexport function getQueryStatus(entry: UseQueryEntryPayload): UseQueryEntryPayloadStatus {\n if (entry.asyncStatus === 'loading') {\n return 'loading'\n }\n if (entry.state.status === 'error') {\n return 'error'\n }\n if (entry.state.status === 'pending') {\n return 'pending'\n }\n if (entry.stale) {\n return 'stale'\n }\n if (entry.state.status === 'success') {\n return 'fresh'\n }\n\n return 'unknown'\n}\n\nexport const STATUS_COLOR_CLASSES: Record<\n UseQueryEntryPayloadStatus | 'inactive',\n {\n base: string\n clear: string\n text: string\n }\n> = {\n loading: {\n base: 'bg-purple-400',\n clear: 'bg-purple-200',\n text: 'text-purple-100',\n },\n fresh: {\n base: 'bg-success-500',\n clear: 'bg-success-200',\n text: 'text-success-100',\n },\n error: {\n base: 'bg-error-500',\n clear: 'bg-error-200',\n text: 'text-error-100',\n },\n stale: {\n base: 'bg-info-500',\n clear: 'bg-info-200',\n text: 'text-info-100',\n },\n pending: {\n base: 'bg-warning-500',\n clear: 'bg-warning-200',\n text: 'text-warning-100',\n },\n inactive: {\n base: 'bg-neutral-400',\n clear: 'bg-neutral-200',\n text: 'text-neutral-100',\n },\n unknown: {\n base: 'bg-gray-400',\n clear: 'bg-gray-200',\n text: 'text-gray-100',\n },\n}\n","import { onScopeDispose, shallowRef } from 'vue'\n\n// share this variable among all instances\nconst now = shallowRef(performance.timeOrigin + performance.now())\nlet intervalId: ReturnType<typeof setInterval> | undefined\nlet useCount = 0\n\n/**\n * Reactive and shared `performance.now()` that updates on the specified interval.\n */\nexport function usePerformanceNow() {\n if (!intervalId) {\n intervalId = setInterval(() => {\n now.value = performance.timeOrigin + performance.now()\n }, 50)\n }\n\n useCount++\n onScopeDispose(() => {\n if (--useCount <= 0) {\n clearInterval(intervalId)\n intervalId = undefined\n }\n })\n\n return now\n}\n","<script setup lang=\"ts\">\nimport { miniJsonParse } from '@pinia/colada-devtools/shared'\nimport type { UseQueryEntryPayload } from '@pinia/colada-devtools/shared'\nimport { computed } from 'vue'\nimport { getQueryStatus, STATUS_COLOR_CLASSES } from '../utils/query-state'\nimport { useRouter } from 'vue-router'\nimport { usePerformanceNow } from '../composables/performance-now'\n\nconst { entry } = defineProps<{\n entry: UseQueryEntryPayload\n}>()\nconst router = useRouter()\n\nconst now = usePerformanceNow()\n// const now = useNow({ interval: Math.max(100, (entry.options?.gcTime || 0) / 30) })\n\nfunction unselect(event: MouseEvent) {\n event.preventDefault()\n event.stopPropagation()\n router.push('/queries')\n}\n\n// TODO: colorize the output based on the type of value\nconst formattedKey = computed(() => {\n return entry.key.map((rawValue) => {\n let value: unknown = rawValue\n try {\n value = typeof rawValue === 'string' ? JSON.parse(rawValue) : rawValue\n } catch {\n // If parsing fails, keep the original value\n }\n return value && typeof value === 'object' ? miniJsonParse(value) : String(value)\n })\n})\n\nconst status = computed(() => getQueryStatus(entry))\n</script>\n\n<template>\n <RouterLink\n v-slot=\"{ isActive, navigate, href }\"\n :to=\"{ name: '/queries/[queryId]', params: { queryId: entry.keyHash } }\"\n custom\n >\n <div\n class=\"grid grid-cols-[minmax(0,auto)_1fr] grid-flow-col items-center gap-x-2 p-1 relative text-sm @container\"\n :class=\"[\n isActive ? 'bg-neutral-200 dark:bg-neutral-700' : 'hover:bg-(--ui-bg-elevated)',\n entry.active ? '' : 'text-(--ui-text)/50',\n ]\"\n >\n <div class=\"h-full w-6 relative\">\n <div\n class=\"absolute -inset-1 right-0 flex items-center justify-center\"\n :class=\"STATUS_COLOR_CLASSES[status].base\"\n :title=\"status\"\n >\n <i-lucide-loader v-if=\"status === 'loading'\" title=\"Loading\" aria-label=\"Loading icon\" />\n <i-lucide-check-check\n v-else-if=\"status === 'fresh'\"\n title=\"Fresh successful data\"\n aria-label=\"Fresh successful data icon\"\n />\n <i-lucide-x-octagon\n v-else-if=\"status === 'error'\"\n title=\"Error\"\n aria-label=\"Error icon\"\n />\n <i-lucide-check v-else-if=\"status === 'stale'\" title=\"Stale\" aria-label=\"Stale icon\" />\n <i-lucide-pause\n v-else-if=\"status === 'pending'\"\n title=\"Pending\"\n aria-label=\"Pending icon\"\n />\n </div>\n </div>\n\n <a\n :href\n class=\"hover:cursor-pointer block overflow-hidden\"\n :title=\"entry.active ? 'Active query' : 'Inactive query'\"\n @click=\"isActive ? unselect($event) : navigate($event)\"\n >\n <ol class=\"flex font-mono flex-grow gap-0.5 overflow-auto items-center\">\n <template v-for=\"(key, i) in formattedKey\" :key=\"key\">\n <li class=\"text-wrap break-words rounded bg-(--ui-text)/5 px-0.5\">{{ key }}</li>\n <li v-if=\"i < formattedKey.length - 1\" aria-hidden=\"true\">/</li>\n </template>\n </ol>\n </a>\n\n <div v-if=\"entry.options?.enabled === false\" title=\"This query is disabled\">\n <span class=\"rounded bg-theme/70 theme-neutral p-0.5 text-xs flex gap-x-0.5 items-center\">\n <i-lucide-circle-slash aria-hidden />\n <span class=\"@max-md:hidden\">disabled</span>\n </span>\n </div>\n <div\n v-else-if=\"\n !entry.active &&\n entry.gcTimeout &&\n entry.devtools.inactiveAt &&\n typeof entry.options?.gcTime === 'number' &&\n Number.isFinite(entry.options.gcTime) &&\n entry.options.gcTime <= 30_000\n \"\n title=\"This query will be garbage collected\"\n >\n <UCircleProgress\n class=\"size-[1em] dark:text-neutral-500 text-neutral-400\"\n :max=\"entry.options.gcTime\"\n :value=\"entry.devtools.inactiveAt + entry.options.gcTime - now\"\n />\n </div>\n </div>\n </RouterLink>\n</template>\n","<script setup lang=\"ts\">\nconst modelValue = defineModel<string | number>()\n</script>\n\n<template>\n <input\n v-model=\"modelValue\"\n class=\"py-1.5 pl-8 pr-2 rounded border border-(--ui-border) focus:ring-1 focus:ring-theme focus:outline-none transition-colors theme-primary\"\n placeholder=\"Search Queries\"\n />\n</template>\n","import { defineComponent as G, useSlots as fe, ref as k, computed as h, watch as A, onMounted as X, onBeforeUnmount as Y, provide as g, createElementBlock as W, openBlock as I, normalizeClass as pe, renderSlot as J, nextTick as T, inject as E, getCurrentInstance as me, normalizeStyle as de, unref as j } from \"vue\";\nconst he = /* @__PURE__ */ G({\n __name: \"splitpanes\",\n props: {\n horizontal: { type: Boolean, default: !1 },\n pushOtherPanes: { type: Boolean, default: !0 },\n maximizePanes: { type: Boolean, default: !0 },\n // Maximize pane on splitter double click/tap.\n rtl: { type: Boolean, default: !1 },\n // Right to left direction.\n firstSplitter: { type: Boolean, default: !1 }\n },\n emits: [\n \"ready\",\n \"resize\",\n \"resized\",\n \"pane-click\",\n \"pane-maximize\",\n \"pane-add\",\n \"pane-remove\",\n \"splitter-click\",\n \"splitter-dblclick\"\n ],\n setup(L, { emit: x }) {\n const y = x, c = L;\n fe();\n const l = k([]), w = h(\n () => l.value.reduce((e, n) => (e[~~n.id] = n) && e, {})\n ), z = h(() => l.value.length), f = k(null), S = k(!1), v = k({\n mouseDown: !1,\n dragging: !1,\n activeSplitter: null,\n cursorOffset: 0\n // Cursor offset within the splitter.\n }), d = k({\n // Used to detect double click on touch devices.\n splitter: null,\n timeoutId: null\n }), _ = h(() => ({\n [`splitpanes splitpanes--${c.horizontal ? \"horizontal\" : \"vertical\"}`]: !0,\n \"splitpanes--dragging\": v.value.dragging\n }));\n let P = () => {\n };\n function R(e) {\n e.addEventListener(\"mousemove\", M, { passive: !1 }), e.addEventListener(\"mouseup\", u), \"ontouchstart\" in window && (e.addEventListener(\"touchmove\", M, { passive: !1 }), e.addEventListener(\"touchend\", u)), P = () => {\n e.removeEventListener(\"mousemove\", M), e.removeEventListener(\"mouseup\", u), \"ontouchstart\" in window && (e.removeEventListener(\"touchmove\", M), e.removeEventListener(\"touchend\", u)), P = () => {\n };\n };\n }\n const N = (e, n) => {\n const t = e.target.closest(\".splitpanes__splitter\");\n if (t) {\n const { left: i, top: a } = t.getBoundingClientRect(), { clientX: o, clientY: s } = \"touches\" in e ? e.touches[0] : e;\n v.value.cursorOffset = c.horizontal ? s - a : o - i;\n }\n R(e.target.ownerDocument || document), v.value.mouseDown = !0, v.value.activeSplitter = n;\n }, M = (e) => {\n v.value.mouseDown && (e.preventDefault(), v.value.dragging = !0, requestAnimationFrame(() => {\n Z(Q(e)), m(\"resize\", { event: e }, !0);\n }));\n }, u = (e) => {\n v.value.dragging && m(\"resized\", { event: e }, !0), v.value.mouseDown = !1, v.value.activeSplitter = null, setTimeout(() => {\n v.value.dragging = !1, P();\n }, 100);\n }, C = (e, n) => {\n \"ontouchstart\" in window && (e.preventDefault(), d.value.splitter === n ? (clearTimeout(d.value.timeoutId), d.value.timeoutId = null, B(e, n), d.value.splitter = null) : (d.value.splitter = n, d.value.timeoutId = setTimeout(() => d.value.splitter = null, 500))), v.value.dragging || m(\"splitter-click\", { event: e, index: n }, !0);\n }, B = (e, n) => {\n if (m(\"splitter-dblclick\", { event: e, index: n }, !0), c.maximizePanes) {\n let t = 0;\n l.value = l.value.map((i, a) => (i.size = a === n ? i.max : i.min, a !== n && (t += i.min), i)), l.value[n].size -= t, m(\"pane-maximize\", {\n event: e,\n index: n,\n pane: l.value[n]\n }), m(\"resized\", { event: e, index: n }, !0);\n }\n }, K = (e, n) => {\n m(\"pane-click\", {\n event: e,\n index: w.value[n].index,\n pane: w.value[n]\n });\n }, Q = (e) => {\n var a;\n const n = (a = f.value) == null ? void 0 : a.getBoundingClientRect(), { clientX: t, clientY: i } = \"ontouchstart\" in window && e.touches ? e.touches[0] : e;\n return {\n x: t - (c.horizontal ? 0 : v.value.cursorOffset) - n.left,\n y: i - (c.horizontal ? v.value.cursorOffset : 0) - n.top\n };\n }, V = (e) => {\n e = e[c.horizontal ? \"y\" : \"x\"];\n const n = f.value[c.horizontal ? \"clientHeight\" : \"clientWidth\"];\n return c.rtl && !c.horizontal && (e = n - e), e * 100 / n;\n }, Z = (e) => {\n const n = v.value.activeSplitter;\n let t = {\n prevPanesSize: U(n),\n nextPanesSize: b(n),\n prevReachedMinPanes: 0,\n nextReachedMinPanes: 0\n };\n const i = 0 + (c.pushOtherPanes ? 0 : t.prevPanesSize), a = 100 - (c.pushOtherPanes ? 0 : t.nextPanesSize), o = Math.max(Math.min(V(e), a), i);\n let s = [n, n + 1], r = l.value[s[0]], p = l.value[s[1]];\n if (!r || !p) return;\n const F = r.max < 100 && o >= r.max + t.prevPanesSize, ve = p.max < 100 && o <= 100 - (p.max + b(n + 1));\n if (F || ve) {\n F ? (r.size = r.max, p.size = Math.max(100 - r.max - t.prevPanesSize - t.nextPanesSize, 0)) : (r.size = Math.max(\n 100 - p.max - t.prevPanesSize - b(n + 1),\n 0\n ), p.size = p.max);\n return;\n }\n if (c.pushOtherPanes) {\n const H = ee(t, o);\n if (!H) return;\n ({ sums: t, panesToResize: s } = H), r = l.value[s[0]], p = l.value[s[1]];\n }\n r && (r.size = Math.min(\n Math.max(o - t.prevPanesSize - t.prevReachedMinPanes, r.min),\n r.max\n )), p && (p.size = Math.min(\n Math.max(100 - o - t.nextPanesSize - t.nextReachedMinPanes, p.min),\n p.max\n ));\n }, ee = (e, n) => {\n const t = v.value.activeSplitter, i = [t, t + 1];\n let a = l.value[i[0]], o = l.value[i[1]];\n return a && n < e.prevPanesSize + a.min && (i[0] = ne(t).index, e.prevReachedMinPanes = 0, i[0] < t && l.value.forEach((s, r) => {\n r > i[0] && r <= t && (s.size = s.min, e.prevReachedMinPanes += s.min);\n }), e.prevPanesSize = U(i[0]), i[0] === void 0) ? (e.prevReachedMinPanes = 0, l.value[0].size = l.value[0].min, l.value.forEach((s, r) => {\n r > 0 && r <= t && (s.size = s.min, e.prevReachedMinPanes += s.min);\n }), o.size = 100 - e.prevReachedMinPanes - l.value[0].min - e.prevPanesSize - e.nextPanesSize, null) : n > 100 - e.nextPanesSize - l.value[i[1]].min && (i[1] = ie(t).index, e.nextReachedMinPanes = 0, i[1] > t + 1 && l.value.forEach((s, r) => {\n r > t && r < i[1] && (s.size = s.min, e.nextReachedMinPanes += s.min);\n }), e.nextPanesSize = b(i[1] - 1), i[1] === void 0) ? (e.nextReachedMinPanes = 0, l.value.forEach((s, r) => {\n r < z.value - 1 && r >= t + 1 && (s.size = s.min, e.nextReachedMinPanes += s.min);\n }), l.value[i[0]].size = 100 - e.prevPanesSize - b(i[0] - 1), null) : { sums: e, panesToResize: i };\n }, U = (e) => l.value.reduce((n, t, i) => n + (i < e ? t.size : 0), 0), b = (e) => l.value.reduce((n, t, i) => n + (i > e + 1 ? t.size : 0), 0), ne = (e) => [...l.value].reverse().find((t) => t.index < e && t.size > t.min) || {}, ie = (e) => l.value.find((t) => t.index > e + 1 && t.size > t.min) || {}, te = () => {\n var n;\n const e = Array.from(((n = f.value) == null ? void 0 : n.children) || []);\n for (const t of e) {\n const i = t.classList.contains(\"splitpanes__pane\"), a = t.classList.contains(\"splitpanes__splitter\");\n !i && !a && (t.remove(), console.warn(\n \"Splitpanes: Only <pane> elements are allowed at the root of <splitpanes>. One of your DOM nodes was removed.\"\n ));\n }\n }, $ = (e, n, t = !1) => {\n const i = e - 1, a = document.createElement(\"div\");\n a.classList.add(\"splitpanes__splitter\"), t || (a.onmousedown = (o) => N(o, i), typeof window < \"u\" && \"ontouchstart\" in window && (a.ontouchstart = (o) => N(o, i)), a.onclick = (o) => C(o, i + 1)), a.ondblclick = (o) => B(o, i + 1), n.parentNode.insertBefore(a, n);\n }, ae = (e) => {\n e.onmousedown = void 0, e.onclick = void 0, e.ondblclick = void 0, e.remove();\n }, O = () => {\n var t;\n const e = Array.from(((t = f.value) == null ? void 0 : t.children) || []);\n for (const i of e)\n i.className.includes(\"splitpanes__splitter\") && ae(i);\n let n = 0;\n for (const i of e)\n i.className.includes(\"splitpanes__pane\") && (!n && c.firstSplitter ? $(n, i, !0) : n && $(n, i), n++);\n }, se = ({ uid: e, ...n }) => {\n const t = w.value[e];\n for (const [i, a] of Object.entries(n)) t[i] = a;\n }, le = (e) => {\n var t;\n let n = -1;\n Array.from(((t = f.value) == null ? void 0 : t.children) || []).some((i) => (i.className.includes(\"splitpanes__pane\") && n++, i.isSameNode(e.el))), l.value.splice(n, 0, { ...e, index: n }), l.value.forEach((i, a) => i.index = a), S.value && T(() => {\n O(), q({ addedPane: l.value[n] }), m(\"pane-add\", { pane: l.value[n] });\n });\n }, oe = (e) => {\n const n = l.value.findIndex((i) => i.id === e);\n l.value[n].el = null;\n const t = l.value.splice(n, 1)[0];\n l.value.forEach((i, a) => i.index = a), T(() => {\n O(), m(\"pane-remove\", { pane: t }), q({ removedPane: { ...t } });\n });\n }, q = (e = {}) => {\n !e.addedPane && !e.removedPane ? ue() : l.value.some((n) => n.givenSize !== null || n.min || n.max < 100) ? ce(e) : re(), S.value && m(\"resized\");\n }, re = () => {\n const e = 100 / z.value;\n let n = 0;\n const t = [], i = [];\n for (const a of l.value)\n a.size = Math.max(Math.min(e, a.max), a.min), n -= a.size, a.size >= a.max && t.push(a.id), a.size <= a.min && i.push(a.id);\n n > 0.1 && D(n, t, i);\n }, ue = () => {\n let e = 100;\n const n = [], t = [];\n let i = 0;\n for (const o of l.value)\n e -= o.size, o.givenSize !== null && i++, o.size >= o.max && n.push(o.id), o.size <= o.min && t.push(o.id);\n let a = 100;\n if (e > 0.1) {\n for (const o of l.value)\n o.givenSize === null && (o.size = Math.max(\n Math.min(e / (z.value - i), o.max),\n o.min\n )), a -= o.size;\n a > 0.1 && D(a, n, t);\n }\n }, ce = ({ addedPane: e, removedPane: n } = {}) => {\n let t = 100 / z.value, i = 0;\n const a = [], o = [];\n ((e == null ? void 0 : e.givenSize) ?? null) !== null && (t = (100 - e.givenSize) / (z.value - 1));\n for (const s of l.value)\n i -= s.size, s.size >= s.max && a.push(s.id), s.size <= s.min && o.push(s.id);\n if (!(Math.abs(i) < 0.1)) {\n for (const s of l.value)\n (e == null ? void 0 : e.givenSize) !== null && (e == null ? void 0 : e.id) === s.id || (s.size = Math.max(Math.min(t, s.max), s.min)), i -= s.size, s.size >= s.max && a.push(s.id), s.size <= s.min && o.push(s.id);\n i > 0.1 && D(i, a, o);\n }\n }, D = (e, n, t) => {\n let i;\n e > 0 ? i = e / (z.value - n.length) : i = e / (z.value - t.length), l.value.forEach((a, o) => {\n if (e > 0 && !n.includes(a.id)) {\n const s = Math.max(Math.min(a.size + i, a.max), a.min), r = s - a.size;\n e -= r, a.size = s;\n } else if (!t.includes(a.id)) {\n const s = Math.max(Math.min(a.size + i, a.max), a.min), r = s - a.size;\n e -= r, a.size = s;\n }\n }), Math.abs(e) > 0.1 && T(() => {\n S.value && console.warn(\"Splitpanes: Could not resize panes correctly due to their constraints.\");\n });\n }, m = (e, n = void 0, t = !1) => {\n const i = (n == null ? void 0 : n.index) ?? v.value.activeSplitter ?? null;\n y(e, {\n ...n,\n ...i !== null && { index: i },\n ...t && i !== null && {\n prevPane: l.value[i - (c.firstSplitter ? 1 : 0)],\n nextPane: l.value[i + (c.firstSplitter ? 0 : 1)]\n },\n panes: l.value.map((a) => ({\n min: a.min,\n max: a.max,\n size: a.size\n }))\n });\n };\n return A(\n () => c.firstSplitter,\n () => O()\n ), X(() => {\n te(), O(), q(), m(\"ready\"), S.value = !0;\n }), Y(() => S.value = !1), g(\"panes\", l), g(\"indexedPanes\", w), g(\n \"horizontal\",\n h(() => c.horizontal)\n ), g(\"requestUpdate\", se), g(\"onPaneAdd\", le), g(\"onPaneRemove\", oe), g(\"onPaneClick\", K), (e, n) => (I(), W(\"div\", {\n class: pe(_.value),\n ref_key: \"containerEl\",\n ref: f\n }, [\n J(e.$slots, \"default\")\n ], 2));\n }\n}), xe = /* @__PURE__ */ G({\n __name: \"pane\",\n props: {\n size: { type: [Number, String] },\n minSize: { type: [Number, String], default: 0 },\n maxSize: { type: [Number, String], default: 100 }\n },\n setup(L) {\n var M;\n const x = L, y = E(\"requestUpdate\"), c = E(\"onPaneAdd\"), l = E(\"horizontal\"), w = E(\"onPaneRemove\"), z = E(\"onPaneClick\"), f = (M = me()) == null ? void 0 : M.uid, S = E(\"indexedPanes\"), v = h(() => S.value[f]), d = k(null), _ = h(() => {\n const u = isNaN(x.size) || x.size === void 0 ? 0 : parseFloat(x.size);\n return Math.max(Math.min(u, R.value), P.value);\n }), P = h(() => {\n const u = parseFloat(x.minSize);\n return isNaN(u) ? 0 : u;\n }), R = h(() => {\n const u = parseFloat(x.maxSize);\n return isNaN(u) ? 100 : u;\n }), N = h(() => {\n var u;\n return `${l.value ? \"height\" : \"width\"}: ${(u = v.value) == null ? void 0 : u.size}%`;\n });\n return A(\n () => _.value,\n (u) => y({ uid: f, size: u })\n ), A(\n () => P.value,\n (u) => y({ uid: f, min: u })\n ), A(\n () => R.value,\n (u) => y({ uid: f, max: u })\n ), X(() => {\n c({\n id: f,\n el: d.value,\n min: P.value,\n max: R.value,\n // The given size (useful to know the user intention).\n givenSize: x.size === void 0 ? null : _.value,\n size: _.value\n // The computed current size at any time.\n });\n }), Y(() => w(f)), (u, C) => (I(), W(\"div\", {\n ref_key: \"paneEl\",\n ref: d,\n class: \"splitpanes__pane\",\n onClick: C[0] || (C[0] = (B) => j(z)(B, j(f))),\n style: de(N.value)\n }, [\n J(u.$slots, \"default\")\n ], 4));\n }\n});\nexport {\n xe as Pane,\n he as Splitpanes\n};\n","import type { MaybeRefOrGetter } from 'vue'\nimport { computed, onScopeDispose, shallowRef, toValue, watchEffect } from 'vue'\nimport { useEventListener, useSupported } from '@vueuse/core'\n\n// copied from match-container and adapted to shadow DOM\n// import 'match-container'\n\nconst polyfill_key = 'bae45330cd3d4e0e96b60d26b57009b5'\nlet count = 0\n// To guard against the case that this polyfill might be included more than once\n// we must ensure that the ID generating function is a singleton\n// to guarantee that no duplicated IDs are generated - however slim the chance might be.\n// The IDs are unique in the current javascript runtime context.\n// The IDs are constructed from the following parts:\n// - a timestamp\n// - the current value of a counter, incremented after each created ID\n// - a static prefix\n// Even if two IDs are generated within the same milisecond the increased counter ensures\n// that they cannot clash.\n\nconst createID = () => `${polyfill_key}-${Date.now()}-${count++}`\n\nclass ContainerQueryListEvent extends Event {\n constructor(\n type: string,\n public container: string,\n public matches: boolean,\n ) {\n super(type)\n }\n}\n\nclass ContainerQueryList extends EventTarget {\n #observedElement: HTMLElement\n #abortController = new AbortController()\n container: string\n matches: boolean\n\n constructor(element: HTMLElement, containerQueryString: string) {\n super()\n this.container = containerQueryString\n const unique_name = `container-query-observer-${createID()}`\n const markerAttribute = `data-${unique_name}`\n element.setAttribute(markerAttribute, '')\n const sentinelProperty = `--${unique_name}`\n const propertyCss = `\n @property ${sentinelProperty} {\n syntax: '<custom-ident>';\n inherits: false;\n initial-value: --false;\n }\n`.trim()\n const containerCss = `\n @container ${containerQueryString} {\n [${markerAttribute}] {\n ${sentinelProperty}: --true;\n }\n }\n`.trim()\n\n const rootNode = element.getRootNode()\n if (!(rootNode instanceof ShadowRoot) && !(rootNode instanceof Document)) {\n console.error(`root node of element isn't a ShadowRoot or Document`, rootNode)\n throw new TypeError('Root node must be a ShadowRoot or Document')\n }\n\n const propertyCssSheet = new CSSStyleSheet()\n propertyCssSheet.replaceSync(propertyCss)\n const doc = document\n doc.adoptedStyleSheets.push(propertyCssSheet)\n\n // FIXME: adoptedStyleSheets cannot be shared\n // the behavior breaks when using the PiP\n if (rootNode.ownerDocument === document) {\n const containerQuerySheet = new CSSStyleSheet()\n containerQuerySheet.replaceSync(containerCss)\n rootNode.adoptedStyleSheets.push(containerQuerySheet)\n }\n\n const style = getComputedStyle(element)\n this.matches = style.getPropertyValue(sentinelProperty) === '--true'\n\n this.#observedElement = element\n this.#startObserving(sentinelProperty, containerQueryString, element)\n }\n\n #startObserving(\n sentinelProperty: string,\n containerQueryString: string,\n observedElement: HTMLElement,\n ) {\n const _previousValues: Record<string, string | undefined> = {}\n\n observedElement.style.setProperty('transition', `${sentinelProperty} 0.001ms step-start`)\n observedElement.style.setProperty('transition-behavior', 'allow-discrete')\n observedElement.addEventListener(\n 'transitionrun',\n (transitionEvent) => {\n if (observedElement === transitionEvent.target) {\n const computedStyle = getComputedStyle(observedElement)\n const changes: Record<string, string | undefined> = {}\n const currentValue = computedStyle.getPropertyValue(sentinelProperty)\n const previousValue = _previousValues[sentinelProperty]\n const hasChanged = currentValue !== previousValue\n\n if (hasChanged) {\n changes[sentinelProperty] = currentValue\n _previousValues[sentinelProperty] = currentValue\n if (sentinelProperty in changes) {\n const matches = changes[sentinelProperty] === '--true'\n this.matches = matches\n // raise 'change' event\n const event = new ContainerQueryListEvent('change', containerQueryString, matches)\n this.dispatchEvent(event)\n }\n }\n }\n },\n { signal: this.#abortController.signal },\n )\n\n // init _previousValues\n const computedStyle = getComputedStyle(observedElement)\n const currentValue = computedStyle.getPropertyValue(sentinelProperty)\n _previousValues[sentinelProperty] = currentValue\n }\n\n dispose() {\n this.#observedElement.style.removeProperty('transition')\n this.#observedElement.style.removeProperty('transition-behavior')\n // stop the event listener\n this.#abortController.abort()\n }\n}\n\nif (typeof window !== 'undefined') {\n if (!HTMLElement.prototype.matchContainer) {\n HTMLElement.prototype.matchContainer = function matchContainer(\n this: HTMLElement,\n containerQueryString: string,\n ) {\n return new ContainerQueryList(this, containerQueryString)\n }\n }\n}\n\n// For some reason, the types are not being picked up from the package\ndeclare global {\n interface HTMLElement {\n matchContainer: (containerQueryString: string) => ContainerQueryList\n }\n}\n\n/**\n * Reactive Container Media Query.\n *\n * @param query - The container query string to match against.\n * @param target - The target element to match the query against.\n */\nexport function useContainerMediaQuery(\n query: MaybeRefOrGetter<string>,\n target: MaybeRefOrGetter<HTMLElement | null | undefined>,\n) {\n const isSupported = useSupported(\n () => typeof document !== 'undefined' && typeof document.body.matchContainer === 'function',\n )\n const mediaQuery = shallowRef<ContainerQueryList>()\n const matches = shallowRef(false)\n\n watchEffect(() => {\n if (!isSupported.value) return\n\n mediaQuery.value?.dispose()\n\n mediaQuery.value = toValue(target)?.matchContainer(toValue(query))\n matches.value = !!mediaQuery.value?.matches\n })\n\n onScopeDispose(() => {\n mediaQuery.value?.dispose()\n })\n\n useEventListener(\n mediaQuery,\n 'change',\n (event: ContainerQueryListEvent) => {\n matches.value = event.matches\n },\n { passive: true },\n )\n\n return computed(() => matches.value)\n}\n","<script setup lang=\"ts\">\nimport { computed, ref, useTemplateRef } from 'vue'\nimport type { ComponentPublicInstance } from 'vue'\nimport { Pane, Splitpanes } from '@posva/splitpanes'\nimport { useQueryEntries } from '../composables/duplex-channel'\nimport { getQueryStatus, STATUS_COLOR_CLASSES } from '../utils/query-state'\nimport type { UseQueryEntryPayloadStatus } from '../utils/query-state'\nimport type { UseQueryEntryPayload } from '@pinia/colada-devtools/shared'\nimport { useContainerMediaQuery } from '../composables/use-container-media-query'\nimport { useLocalStorage } from '@vueuse/core'\n\nconst searchQuery = ref('')\n\nconst queries = useQueryEntries()\n\nconst filteredItems = computed(() => {\n let items = queries.value\n\n if (searchQuery.value) {\n const query = searchQuery.value.toLowerCase()\n items = items.filter((item) => {\n const searchable = item.key\n return searchable.some((v) => String(v).toLowerCase().includes(query))\n })\n }\n\n // sort by last updatedAt\n return items.sort((a, b) => {\n return b.devtools.updatedAt - a.devtools.updatedAt\n })\n})\n\nconst queriesGrouped = computed<\n Record<\n Exclude<UseQueryEntryPayloadStatus, 'unknown' | 'stale'> | 'inactive',\n UseQueryEntryPayload[]\n >\n>(() => {\n return {\n loading: [],\n fresh: [],\n error: [],\n pending: [],\n inactive: filteredItems.value.filter((item) => !item.active),\n ...Object.groupBy(filteredItems.value, (item) => getQueryStatus(item)),\n }\n})\n\nconst container = useTemplateRef('split-panes-container')\nconst isNarrow = useContainerMediaQuery('(width < 768px)', () => container.value?.$el)\n\nconst queryListPanelSize = useLocalStorage<number[]>('pc-devtools-query-list-panel-size', [30, 70])\n\nfunction updatePanesSize({ panes }: { panes: { size: number }[] }) {\n queryListPanelSize.value = panes.map((pane) => pane.size)\n}\n</script>\n\n<template>\n <section class=\"grid grid-rows-[auto_1fr] overflow-hidden @container\">\n <!-- Search & Actions Bar -->\n <div class=\"flex items-center p-2 border-b border-(--ui-border) gap-2\">\n <div class=\"relative flex-grow\">\n <i-lucide-search\n class=\"absolute left-2 top-1/2 -translate-y-1/2 text-ui-text-muted size-4\"\n />\n <UInput v-model=\"searchQuery\" type=\"search\" class=\"w-full\" placeholder=\"Search Queries\" />\n </div>\n\n <!-- TODO: sort source, asc/desc -->\n\n <div class=\"flex gap-x-1\">\n <div\n v-for=\"(queryGroup, status) in queriesGrouped\"\n :key=\"status\"\n class=\"theme-neutral bg-(--ui-bg-muted) rounded p-1 text-xs font-semibold flex items-center gap-x-1\"\n :class=\"(queryGroup?.length ?? 0) === 0 ? 'text-(--ui-text-muted)' : ''\"\n :title=\"`${queryGroup?.length ?? 0} ${status} queries (after filtering)`\"\n >\n <div class=\"rounded-full size-2\" :class=\"STATUS_COLOR_CLASSES[status].base\" />\n <span class=\"@max-[750px]:hidden\">{{ status }}</span>\n <div\n class=\"px-1.5 py-0.5 rounded min-w-[1.65em] flex justify-center\"\n :class=\"\n (queryGroup?.length ?? 0) === 0\n ? 'bg-(--ui-bg-accented)'\n : [STATUS_COLOR_CLASSES[status].base, STATUS_COLOR_CLASSES[status].text]\n \"\n >\n <span>{{ queryGroup?.length ?? 0 }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <Splitpanes\n ref=\"split-panes-container\"\n class=\"overflow-hidden\"\n :horizontal=\"isNarrow\"\n @resized=\"updatePanesSize\"\n >\n <!-- List Panel -->\n <Pane min-size=\"15\" :size=\"queryListPanelSize[0]\" class=\"flex flex-col\">\n <ol role=\"list\" class=\"divide-y divide-(--ui-border)\">\n <li v-for=\"entry of filteredItems\" :key=\"entry.keyHash\">\n <ListQueryEntry :entry />\n </li>\n </ol>\n </Pane>\n\n <!-- Details Panel -->\n <Pane min-size=\"30\" :size=\"queryListPanelSize[1]\" class=\"flex flex-col\">\n <RouterView />\n </Pane>\n </Splitpanes>\n </section>\n</template>\n"],"names":["valuePercentage","computed","__props","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","getQueryStatus","entry","STATUS_COLOR_CLASSES","now","shallowRef","intervalId","useCount","usePerformanceNow","onScopeDispose","router","useRouter","unselect","event","formattedKey","rawValue","value","miniJsonParse","status","_createBlock","_component_RouterLink","_withCtx","isActive","navigate","href","_unref","_component_i_lucide_loader","_component_i_lucide_check_check","_component_i_lucide_x_octagon","_component_i_lucide_check","_component_i_lucide_pause","$event","_hoisted_4","_Fragment","_renderList","key","i","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","_hoisted_8","_createVNode","_component_i_lucide_circle_slash","_hoisted_9","_component_UCircleProgress","modelValue","_useModel","he","G","L","x","y","c","fe","l","k","w","h","n","z","S","v","d","_","P","R","M","u","N","t","a","o","s","Z","Q","m","C","B","K","V","U","b","r","p","F","ve","H","ee","ne","ie","te","e","$","ae","O","se","le","T","q","oe","ue","ce","re","D","A","X","Y","g","I","W","pe","J","xe","E","f","me","j","de","polyfill_key","count","createID","ContainerQueryListEvent","type","container","matches","ContainerQueryList","#observedElement","#abortController","element","containerQueryString","unique_name","markerAttribute","sentinelProperty","propertyCss","containerCss","rootNode","propertyCssSheet","containerQuerySheet","style","#startObserving","observedElement","_previousValues","transitionEvent","computedStyle","changes","currentValue","previousValue","useContainerMediaQuery","query","target","isSupported","useSupported","mediaQuery","watchEffect","toValue","useEventListener","searchQuery","ref","queries","useQueryEntries","filteredItems","items","item","queriesGrouped","useTemplateRef","isNarrow","queryListPanelSize","useLocalStorage","updatePanesSize","panes","pane","_hoisted_2","_hoisted_3","_component_i_lucide_search","_component_UInput","queryGroup","_normalizeClass","Splitpanes","Pane","_component_ListQueryEntry","_component_RouterView"],"mappings":"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","x_google_ignoreList":[5]}
@@ -1,4 +1,4 @@
1
- import { _ as e, c as t, o as c } from "./index-BgTq8RHl.js";
1
+ import { _ as e, c as t, o as c } from "./index-LWD0-6oX.js";
2
2
  const n = {};
3
3
  function s(o, r) {
4
4
  return c(), t("h1", null, "Settings");
@@ -7,4 +7,4 @@ const a = /* @__PURE__ */ e(n, [["render", s]]);
7
7
  export {
8
8
  a as default
9
9
  };
10
- //# sourceMappingURL=settings-CAkjqhkP.js.map
10
+ //# sourceMappingURL=settings-C6gLVIkW.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-CAkjqhkP.js","sources":["../src/panel/pages/settings.vue"],"sourcesContent":["<script setup lang=\"ts\"></script>\n\n<template>\n <h1>Settings</h1>\n</template>\n"],"names":["_openBlock","_createElementBlock"],"mappings":";;;AAGE,SAAAA,EAAA,GAAAC,EAAiB,YAAb,UAAQ;;;"}
1
+ {"version":3,"file":"settings-C6gLVIkW.js","sources":["../src/panel/pages/settings.vue"],"sourcesContent":["<script setup lang=\"ts\"></script>\n\n<template>\n <h1>Settings</h1>\n</template>\n"],"names":["_openBlock","_createElementBlock"],"mappings":";;;AAGE,SAAAA,EAAA,GAAAC,EAAiB,YAAb,UAAQ;;;"}
@@ -295,7 +295,7 @@ function C() {
295
295
  const e = new _({}), t = new _({});
296
296
  e.emit("queries:all", []), e.on("queries:clear", () => {
297
297
  }), e.on("queries:clear", (r = {}) => {
298
- console.log(r.key);
298
+ console.error("not implemented yet", r.key);
299
299
  }), t.emit("queries:clear"), t.emit("queries:clear", { key: [""] });
300
300
  }
301
301
  function y(e) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/shared/query-serialized.ts","../src/shared/json.ts","../src/shared/rpc/custom-values.ts","../src/shared/rpc/index.ts","../src/shared/plugins/devtools-info.ts"],"sourcesContent":["import type { RefetchOnControl, UseQueryEntry, UseQueryOptionsWithDefaults } from '@pinia/colada'\nimport type { DEVTOOLS_INFO_KEY } from './plugins/devtools-info'\n\nexport interface UseQueryEntryPayload {\n keyHash: string\n\n key: UseQueryEntry['key']\n state: UseQueryEntry['state']['value']\n asyncStatus: UseQueryEntry['asyncStatus']['value']\n\n active: UseQueryEntry['active']\n stale: UseQueryEntry['stale']\n when: UseQueryEntry['when']\n options: UseQueryEntryPayloadOptions | null\n deps: UseQueryEntryPayloadDep[]\n gcTimeout: number | null\n\n devtools: UseQueryEntry[typeof DEVTOOLS_INFO_KEY]\n}\n\nexport interface UseQueryEntryPayloadDepComponent {\n type: 'component'\n uid: number\n name: string | undefined\n}\n\nexport interface UseQueryEntryPayloadDepEffect {\n type: 'effect'\n active: boolean\n detached: boolean\n}\n\nexport type UseQueryEntryPayloadDep =\n | UseQueryEntryPayloadDepComponent\n | UseQueryEntryPayloadDepEffect\n\nexport interface UseQueryEntryPayloadOptions\n extends Pick<UseQueryOptionsWithDefaults, 'gcTime' | 'staleTime'> {\n // manually overriden to extract only plain values\n enabled: boolean\n refetchOnMount: RefetchOnControl\n refetchOnReconnect: RefetchOnControl\n refetchOnWindowFocus: RefetchOnControl\n}\n\nexport function miniJsonParse(value: unknown): string {\n const isValidIdentifier = (key: string): boolean => /^[A-Z_$][\\w$]*$/i.test(key)\n\n const serialize = (val: unknown): string => {\n if (val === null) return 'null'\n if (typeof val === 'number') return val.toString()\n if (typeof val === 'string') return JSON.stringify(val)\n if (typeof val === 'boolean') return val ? 'true' : 'false'\n\n if (Array.isArray(val)) {\n return `[${val.map(serialize).join(',')}]`\n }\n\n if (typeof val === 'object') {\n const obj = val as Record<string, unknown>\n const entries = Object.keys(obj).map((key) => {\n const k = isValidIdentifier(key) ? key : JSON.stringify(key)\n const v = serialize(obj[key])\n return `${k}:${v}`\n })\n return `{${entries.join(',')}}`\n }\n\n return 'undefined' // or throw if you prefer to exclude unsupported values\n }\n\n return serialize(value)\n}\n","// NOTE: copied from pinia colada src/utils.ts\n\n/**\n * Valid primitives that can be stringified with `JSON.stringify`.\n *\n * @internal\n */\nexport type JSONPrimitive = string | number | boolean | null | undefined\n\n/**\n * Checks if a value is a valid JSON primitive.\n *\n * @param value - The value to check\n */\nexport function isJSONPrimitive(value: unknown): value is JSONPrimitive {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value == null // null or undefined\n )\n}\n\n/**\n * Utility type to represent a flat object that can be stringified with\n * `JSON.stringify` no matter the order of keys.\n *\n * @internal\n */\nexport interface ObjectFlat {\n [key: string]: JSONPrimitive | Array<JSONPrimitive>\n}\n\n/**\n * Valid values that can be stringified with `JSON.stringify`.\n *\n * @internal\n */\nexport type JSONValue = JSONPrimitive | JSONValue[] | { [key: string]: JSONValue }\n\nexport function isJSONValue(value: unknown): value is JSONValue {\n if (isJSONPrimitive(value)) return true\n if (Array.isArray(value)) {\n return value.every(isJSONValue)\n }\n if (isPlainObject(value)) {\n return Object.values(value).every(isJSONValue)\n }\n return false\n}\n\nfunction isCollection(\n value: unknown,\n): value is Iterable<unknown> & ({ length: number } | { size: number }) {\n return (\n value != null &&\n typeof value === 'object' &&\n ('length' in value || 'size' in value) &&\n Symbol.iterator in value\n )\n}\n\nfunction formatCollection(value: { length: number } | { size: number }) {\n const size = 'length' in value ? value.length : value.size\n return `${value.constructor.name}[${size}]`\n}\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object'\n\nexport function formatValue(value: unknown) {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n if (typeof value === 'string') return `\"${value}\"`\n if (typeof value === 'bigint') return `${value}n`\n if (typeof value === 'function') return `[Function ${value.name || 'anonymous'}]`\n if (isObject(value)) {\n if (value instanceof Date) return `Date(${value.toISOString()})`\n if (value instanceof RegExp) return value.toString()\n if (value instanceof Error) return `Error(${value.message})`\n if (isCollection(value)) return formatCollection(value)\n if (isPlainObject(value)) return `Object${Object.keys(value).length === 0 ? ' (empty)' : ''}`\n return `[${value.constructor.name}]`\n }\n return String(value)\n}\n\nexport function isPlainObject(value: unknown): value is { constructor?: typeof Object } {\n return isObject(value) && (value.constructor === Object || Object.getPrototypeOf(value) == null)\n}\n\nexport function getValueType(value: unknown) {\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Error) return 'error'\n return typeof value\n}\n\nconst VALUE_TYPE_CSS_CLASS = {\n string: 'text-(--devtools-syntax-green)',\n boolean: 'text-(--devtools-syntax-orange)',\n number: 'text-(--devtools-syntax-orange)',\n null: 'text-(--devtools-syntax-purple)',\n undefined: 'text-(--devtools-syntax-purple)',\n array: 'text-(--ui-text)',\n function: 'text-(--ui-text)',\n object: 'text-(--ui-text)',\n symbol: 'text-(--devtools-syntax-orange)',\n bigint: 'text-(--devtools-syntax-sapphire)',\n date: 'text-(--devtools-syntax-sapphire)',\n regexp: 'text-(--devtools-syntax-orange)',\n error: 'text-(--devtools-syntax-red)',\n} satisfies Partial<Record<ReturnType<typeof getValueType>, string>>\n\nexport function getValueTypeClass(value: unknown): string | undefined {\n return VALUE_TYPE_CSS_CLASS[getValueType(value)] || '--ui-text'\n}\n","import { isPlainObject } from '../json'\n\nexport interface NonSerializableValue_Base {\n __custom: '@@pc-non-serializable'\n __type: string\n value: unknown\n}\n\nexport interface NonSerializableValue_Function extends NonSerializableValue_Base {\n __type: 'function'\n value: string\n}\n\nexport interface NonSerializableValue_Symbol extends NonSerializableValue_Base {\n __type: 'symbol'\n value: string\n}\n\nexport interface NonSerializableValue_BigInt extends NonSerializableValue_Base {\n __type: 'bigint'\n value: string\n}\n\nexport interface NonSerializableValue_RegExp extends NonSerializableValue_Base {\n __type: 'regexp'\n value: { source: string, flags: string }\n}\n\nexport interface NonSerializableValue_Map extends NonSerializableValue_Base {\n __type: 'map'\n value: Array<[unknown, unknown]>\n}\n\nexport interface NonSerializableValue_Set extends NonSerializableValue_Base {\n __type: 'set'\n value: unknown[]\n}\n\nexport interface NonSerializableValue_WeakMap extends NonSerializableValue_Base {\n __type: 'weakmap'\n value: null\n}\n\nexport interface NonSerializableValue_WeakSet extends NonSerializableValue_Base {\n __type: 'weakset'\n value: null\n}\n\nexport interface NonSerializableValue_Date extends NonSerializableValue_Base {\n __type: 'date'\n value: string\n}\n\nexport interface NonSerializableValue_ArrayBuffer extends NonSerializableValue_Base {\n __type: 'arraybuffer'\n value: { byteLength: number }\n}\n\nexport interface NonSerializableValue_TypedArray extends NonSerializableValue_Base {\n __type: 'typedarray'\n value: { arrayType: string, byteLength: number }\n}\n\nexport interface NonSerializableValue_Promise extends NonSerializableValue_Base {\n __type: 'promise'\n value: null\n}\n\nexport interface NonSerializableValue_Error extends NonSerializableValue_Base {\n __type: 'error'\n value: { name: string, message: string, stack?: string }\n}\n\nexport interface NonSerializableValue_Object extends NonSerializableValue_Base {\n __type: 'object'\n value: { constructorName: string, properties: unknown }\n}\n\nexport type NonSerializableValue =\n | NonSerializableValue_Function\n | NonSerializableValue_Symbol\n | NonSerializableValue_BigInt\n | NonSerializableValue_RegExp\n | NonSerializableValue_Map\n | NonSerializableValue_Set\n | NonSerializableValue_WeakMap\n | NonSerializableValue_WeakSet\n | NonSerializableValue_Date\n | NonSerializableValue_ArrayBuffer\n | NonSerializableValue_TypedArray\n | NonSerializableValue_Promise\n | NonSerializableValue_Error\n | NonSerializableValue_Object\n\n// Helper function to recursively serialize values that might contain non-serializable data\nfunction safeSerializeRecursive(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => safeSerializeRecursive(item))\n }\n if (isPlainObject(value)) {\n // Try to serialize with safeSerialize first\n const serialized = safeSerialize(value)\n if (serialized !== value) {\n // It was a non-serializable value, return the serialized version\n return serialized\n }\n // It's a regular object, recursively serialize its properties\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(value)) {\n result[key] = safeSerializeRecursive(val)\n }\n return result\n }\n return value\n}\n\n// Custom error for serialization issues\nclass SerializationError extends Error {\n constructor(\n message: string,\n public originalError?: unknown,\n ) {\n super(message)\n this.name = 'SerializationError'\n }\n}\n\n// Custom placeholder class for binary data display\nclass BinaryDataPlaceholder {\n constructor(\n public readonly type: string,\n public readonly byteLength: number,\n public readonly arrayType?: string,\n ) {}\n\n toString() {\n if (this.arrayType) {\n return `[${this.arrayType} ${this.byteLength} bytes]`\n }\n return `[${this.type} ${this.byteLength} bytes]`\n }\n}\n\nexport function safeSerialize(value: (...args: unknown[]) => unknown): NonSerializableValue_Function\nexport function safeSerialize(value: symbol): NonSerializableValue_Symbol\nexport function safeSerialize(value: bigint): NonSerializableValue_BigInt\nexport function safeSerialize(value: RegExp): NonSerializableValue_RegExp\nexport function safeSerialize(value: Map<unknown, unknown>): NonSerializableValue_Map\nexport function safeSerialize(value: Set<unknown>): NonSerializableValue_Set\nexport function safeSerialize(value: WeakMap<object, unknown>): NonSerializableValue_WeakMap\nexport function safeSerialize(value: WeakSet<object>): NonSerializableValue_WeakSet\nexport function safeSerialize(value: Date): NonSerializableValue_Date\nexport function safeSerialize(value: ArrayBuffer): NonSerializableValue_ArrayBuffer\nexport function safeSerialize(value: ArrayBufferView): NonSerializableValue_TypedArray\nexport function safeSerialize(value: Promise<unknown>): NonSerializableValue_Promise\nexport function safeSerialize(value: Error): NonSerializableValue_Error\nexport function safeSerialize<T>(value: T): T\nexport function safeSerialize(value: unknown) {\n if (typeof value === 'function') {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'function',\n value: `[Function: ${value.name || 'anonymous'}]`,\n } satisfies NonSerializableValue_Function\n } else if (typeof value === 'symbol') {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'symbol',\n value: value.description || '',\n } satisfies NonSerializableValue_Symbol\n } else if (typeof value === 'bigint') {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'bigint',\n value: String(value),\n } satisfies NonSerializableValue_BigInt\n } else if (value instanceof RegExp) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'regexp',\n value: { source: value.source, flags: value.flags },\n } satisfies NonSerializableValue_RegExp\n } else if (value instanceof Map) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'map',\n value: Array.from(value.entries()).map(([k, v]) => [\n safeSerializeRecursive(k),\n safeSerializeRecursive(v),\n ]),\n } satisfies NonSerializableValue_Map\n } else if (value instanceof Set) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'set',\n value: Array.from(value.values()).map((v) => safeSerializeRecursive(v)),\n } satisfies NonSerializableValue_Set\n } else if (value instanceof WeakMap) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'weakmap',\n value: null,\n } satisfies NonSerializableValue_WeakMap\n } else if (value instanceof WeakSet) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'weakset',\n value: null,\n } satisfies NonSerializableValue_WeakSet\n } else if (value instanceof Date) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'date',\n value: value.toISOString(),\n } satisfies NonSerializableValue_Date\n } else if (value instanceof ArrayBuffer) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'arraybuffer',\n value: { byteLength: value.byteLength },\n } satisfies NonSerializableValue_ArrayBuffer\n } else if (ArrayBuffer.isView(value)) {\n // Handle TypedArrays and DataView\n const typeName = value.constructor.name\n return {\n __custom: '@@pc-non-serializable',\n __type: 'typedarray',\n value: { arrayType: typeName, byteLength: value.byteLength },\n } satisfies NonSerializableValue_TypedArray\n } else if (value instanceof Promise) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'promise',\n value: null,\n } satisfies NonSerializableValue_Promise\n } else if (value instanceof Error) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'error',\n value: {\n name: value.name,\n message: value.message,\n stack: value.stack,\n },\n } satisfies NonSerializableValue_Error\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor &&\n value.constructor !== Object &&\n value.constructor !== Array\n ) {\n // Handle custom class instances\n const constructorName = value.constructor.name\n // Recursively serialize enumerable properties\n const properties = safeSerializeRecursive({ ...value })\n return {\n __custom: '@@pc-non-serializable',\n __type: 'object',\n value: { constructorName, properties },\n } satisfies NonSerializableValue_Object\n }\n\n // value that cannot be serialized\n return value\n}\n\nfunction isNonSerializableValue(value: unknown): value is NonSerializableValue {\n return (\n !!value &&\n typeof value === 'object' &&\n '__custom' in value &&\n value.__custom === '@@pc-non-serializable' &&\n '__type' in value &&\n typeof value.__type === 'string' &&\n 'value' in value\n )\n}\n\nfunction restoreClonedValue(value: NonSerializableValue) {\n if (value.__type === 'function') {\n return () => {}\n } else if (value.__type === 'symbol') {\n return Symbol(value.value)\n } else if (value.__type === 'bigint') {\n // BigInt() throws an error if the value is not a valid bigint string\n try {\n return BigInt(value.value)\n } catch (err) {\n return new SerializationError(`Invalid bigint value: ${value.value}`, err)\n }\n } else if (value.__type === 'regexp') {\n try {\n const { source, flags } = value.value\n return new RegExp(source, flags)\n } catch (err) {\n return new SerializationError(`Invalid regexp value: ${JSON.stringify(value.value)}`, err)\n }\n } else if (value.__type === 'map') {\n const entries = value.value.map(\n ([k, v]) => [restoreClonedDeep(k), restoreClonedDeep(v)] as const,\n )\n return new Map(entries)\n } else if (value.__type === 'set') {\n const values = value.value.map((v) => restoreClonedDeep(v))\n return new Set(values)\n } else if (value.__type === 'weakmap') {\n return new WeakMap()\n } else if (value.__type === 'weakset') {\n return new WeakSet()\n } else if (value.__type === 'date') {\n try {\n return new Date(value.value)\n } catch (err) {\n return new SerializationError(`Invalid date value: ${value.value}`, err)\n }\n } else if (value.__type === 'arraybuffer') {\n return new BinaryDataPlaceholder('ArrayBuffer', value.value.byteLength)\n } else if (value.__type === 'typedarray') {\n return new BinaryDataPlaceholder('TypedArray', value.value.byteLength, value.value.arrayType)\n } else if (value.__type === 'promise') {\n return Promise.resolve()\n } else if (value.__type === 'error') {\n const error = new Error(value.value.message)\n error.name = value.value.name\n if (value.value.stack) {\n error.stack = value.value.stack\n }\n return error\n } else if (value.__type === 'object') {\n const properties = restoreClonedDeep(value.value.properties)\n return typeof properties === 'object' && properties !== null\n ? { ...properties, __constructorName: value.value.constructorName }\n : { __constructorName: value.value.constructorName }\n }\n // @ts-expect-error: type of value is never\n return new SerializationError(`Unknown non-serializable value type: ${value.__type}`)\n}\n\nexport function restoreClonedDeep<T>(val: T): T\nexport function restoreClonedDeep(val: unknown): unknown {\n if (Array.isArray(val)) {\n return val.map((item) => restoreClonedDeep(item))\n }\n if (isNonSerializableValue(val)) {\n return restoreClonedValue(val)\n }\n if (val && typeof val === 'object' && !isError(val)) {\n return Object.fromEntries(\n Object.entries(val).map(([key, value]) => [key, restoreClonedDeep(value)]),\n )\n }\n return val\n}\n\nexport function isError(err: unknown): err is Error {\n return 'isError' in Error && typeof Error.isError === 'function'\n ? Error.isError(err)\n : err instanceof Error\n}\n","import type { DataState, EntryKey, UseQueryEntryFilter } from '@pinia/colada'\nimport type { UseQueryEntryPayload } from '../query-serialized'\nimport { toRaw } from 'vue'\nimport {\n restoreClonedDeep,\n isError,\n safeSerialize,\n} from './custom-values'\nimport { isPlainObject } from '../json'\n\nexport class DuplexChannel<\n const Emits extends Record<EmitsKeys, any[]>,\n const Listens extends Record<ListensKeys, [...any[]]>,\n // TODO: this seems to be enough. Test it\n // const Emits extends Record<keyof Emits, [...any[]]>,\n // const Listens extends Record<keyof Listens, [...any[]]>,\n // NOTE: we need these two to avoid requiring the interface to have an index signature for string\n EmitsKeys extends keyof Emits = keyof Emits,\n ListensKeys extends keyof Listens = keyof Listens,\n> {\n protected listenersByEvent = new Map<keyof Listens, Set<(...args: any[]) => void>>()\n protected eventsController: null | AbortController = null\n\n constructor(protected port: MessagePort) {\n this.setPort(port)\n }\n\n setPort(port: MessagePort) {\n // remove the previous event listeners\n this.eventsController?.abort()\n const { signal } = (this.eventsController = new AbortController())\n this.port = port\n port.addEventListener('message', this.onMessage.bind(this), { signal })\n port.addEventListener('messageerror', this.onMessageError.bind(this), { signal })\n // needed when we call `addEventListener` instead of using `onmessage`\n port.start()\n }\n\n private onMessage(event: MessageEvent) {\n if (!event.data || typeof event.data !== 'object' || typeof event.data.id !== 'string') {\n console.error(`${this.constructor.name}: invalid message`, event.data)\n return\n }\n const listeners = this.listenersByEvent.get(event.data.id)\n if (!listeners) return\n\n const restoredData = restoreClonedDeep(event.data.data as Listens[keyof Listens])\n for (const listener of listeners.values()) {\n listener(...restoredData)\n }\n }\n\n private onMessageError(event: MessageEvent) {\n console.error(`${this.constructor.name}: message error`, event)\n }\n\n stop() {\n this.listenersByEvent.clear()\n this.eventsController?.abort()\n }\n\n emit<K extends keyof Emits>(event: K, ...args: NoInfer<Emits[K]>): void {\n const clonedData = args.map((arg) => toRawDeep(arg))\n this.port.postMessage({ id: event, data: clonedData })\n }\n\n on<K extends keyof Listens>(event: K, callback: (...args: Listens[K]) => void): () => void {\n let listeners = this.listenersByEvent.get(event)\n if (!listeners) {\n this.listenersByEvent.set(event, (listeners = new Set()))\n }\n listeners.add(callback)\n\n return () => {\n this.listenersByEvent.get(event)?.delete(callback)\n }\n }\n\n off<K extends keyof Listens>(event: K): void {\n this.listenersByEvent.delete(event)\n }\n}\n\nexport interface AppEmits {\n 'queries:all': [entries: UseQueryEntryPayload[]]\n 'queries:update': [entry: UseQueryEntryPayload]\n 'queries:delete': [entry: UseQueryEntryPayload]\n 'mutations:all': [entries: unknown[]]\n}\n\nexport interface DevtoolsEmits {\n 'queries:clear': [] | [filters: UseQueryEntryFilter]\n 'queries:refetch': [entryKey: EntryKey]\n 'queries:invalidate': [entryKey: EntryKey]\n 'queries:reset': [entryKey: EntryKey]\n\n 'queries:simulate:error': [entryKey: EntryKey]\n 'queries:simulate:error:stop': [entryKey: EntryKey]\n 'queries:simulate:loading': [entryKey: EntryKey]\n 'queries:simulate:loading:stop': [entryKey: EntryKey]\n\n 'queries:set:state': [entryKey: EntryKey, state: DataState<unknown, unknown, unknown>]\n}\n\nexport function _testTypes() {\n // the app\n const client = new DuplexChannel<AppEmits, DevtoolsEmits>({} as any)\n // the devtools\n const server = new DuplexChannel<DevtoolsEmits, AppEmits>({} as any)\n\n client.emit('queries:all', [])\n // client.emit('queries:all', [{ id: '', active: false, asyncStatus: 'idle', }])\n client.on('queries:clear', () => {})\n client.on('queries:clear', (filters = {}) => {\n console.log(filters.key)\n // ...\n })\n\n server.emit('queries:clear')\n server.emit('queries:clear', { key: [''] })\n}\n\nfunction toRawDeep<T>(val: T): T\nfunction toRawDeep(val: unknown): unknown {\n if (Array.isArray(val)) {\n return val.map((item) => toRawDeep(item))\n }\n // TODO: custom classes?\n if (isPlainObject(val)) {\n return Object.fromEntries(Object.entries(val).map(([key, value]) => [key, toRawDeep(value)]))\n }\n return safeSerialize(toRaw(val))\n}\n","/**\n * Pinia Colada plugin that counts how many times a query has been fetched, has resolved, rejected, etc.\n *\n */\nimport type { DataState, UseQueryEntry } from '@pinia/colada'\n\nexport const DEVTOOLS_INFO_KEY = Symbol('fetch-count-pinia-colada-plugin')\n\nexport interface UseQueryEntryHistoryEntry extends Pick<UseQueryEntry, 'key'> {\n id: number\n\n state: DataState<unknown, unknown, unknown>\n\n /**\n * When was the last time the entry was updated.\n */\n updatedAt: number\n\n /**\n * When was the entry created.\n */\n createdAt: number\n\n /**\n * The time it took to fetch the entry.\n */\n fetchTime: {\n start: number\n end: number | null\n } | null\n}\n\nexport interface UseQueryDevtoolsInfo {\n count: {\n succeed: number\n errored: number\n cancelled: number\n total: number\n }\n\n updatedAt: number\n\n /**\n * When was this entry last inactive. 0 if it has never been inactive.\n */\n inactiveAt: number\n\n simulate: 'error' | 'loading' | null\n\n /**\n * Only the last 10 entries are kept.\n */\n history: UseQueryEntryHistoryEntry[]\n}\n\ndeclare module '@pinia/colada' {\n // eslint-disable-next-line unused-imports/no-unused-vars\n interface UseQueryEntry<TData, TError, TDataInitial> {\n /**\n * Returns whether the query is currently delaying its `asyncStatus` from becoming `'loading'`. Requires the {@link PiniaColadaDelay} plugin.\n */\n [DEVTOOLS_INFO_KEY]: UseQueryDevtoolsInfo\n }\n}\n"],"names":["miniJsonParse","value","isValidIdentifier","key","serialize","val","obj","k","v","isJSONPrimitive","isJSONValue","isPlainObject","isCollection","formatCollection","size","isObject","formatValue","getValueType","VALUE_TYPE_CSS_CLASS","getValueTypeClass","safeSerializeRecursive","item","serialized","safeSerialize","result","SerializationError","message","originalError","BinaryDataPlaceholder","type","byteLength","arrayType","constructorName","properties","isNonSerializableValue","restoreClonedValue","err","source","flags","entries","restoreClonedDeep","values","error","isError","DuplexChannel","port","signal","event","listeners","restoredData","listener","args","clonedData","arg","toRawDeep","callback","_testTypes","client","server","filters","toRaw","DEVTOOLS_INFO_KEY"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/shared/query-serialized.ts","../src/shared/json.ts","../src/shared/rpc/custom-values.ts","../src/shared/rpc/index.ts","../src/shared/plugins/devtools-info.ts"],"sourcesContent":["import type { RefetchOnControl, UseQueryEntry, UseQueryOptionsWithDefaults } from '@pinia/colada'\nimport type { DEVTOOLS_INFO_KEY } from './plugins/devtools-info'\n\nexport interface UseQueryEntryPayload {\n keyHash: string\n\n key: UseQueryEntry['key']\n state: UseQueryEntry['state']['value']\n asyncStatus: UseQueryEntry['asyncStatus']['value']\n\n active: UseQueryEntry['active']\n stale: UseQueryEntry['stale']\n when: UseQueryEntry['when']\n options: UseQueryEntryPayloadOptions | null\n deps: UseQueryEntryPayloadDep[]\n gcTimeout: number | null\n\n devtools: UseQueryEntry[typeof DEVTOOLS_INFO_KEY]\n}\n\nexport interface UseQueryEntryPayloadDepComponent {\n type: 'component'\n uid: number\n name: string | undefined\n}\n\nexport interface UseQueryEntryPayloadDepEffect {\n type: 'effect'\n active: boolean\n detached: boolean\n}\n\nexport type UseQueryEntryPayloadDep =\n | UseQueryEntryPayloadDepComponent\n | UseQueryEntryPayloadDepEffect\n\nexport interface UseQueryEntryPayloadOptions\n extends Pick<UseQueryOptionsWithDefaults, 'gcTime' | 'staleTime'> {\n // manually overriden to extract only plain values\n enabled: boolean\n refetchOnMount: RefetchOnControl\n refetchOnReconnect: RefetchOnControl\n refetchOnWindowFocus: RefetchOnControl\n}\n\nexport function miniJsonParse(value: unknown): string {\n const isValidIdentifier = (key: string): boolean => /^[A-Z_$][\\w$]*$/i.test(key)\n\n const serialize = (val: unknown): string => {\n if (val === null) return 'null'\n if (typeof val === 'number') return val.toString()\n if (typeof val === 'string') return JSON.stringify(val)\n if (typeof val === 'boolean') return val ? 'true' : 'false'\n\n if (Array.isArray(val)) {\n return `[${val.map(serialize).join(',')}]`\n }\n\n if (typeof val === 'object') {\n const obj = val as Record<string, unknown>\n const entries = Object.keys(obj).map((key) => {\n const k = isValidIdentifier(key) ? key : JSON.stringify(key)\n const v = serialize(obj[key])\n return `${k}:${v}`\n })\n return `{${entries.join(',')}}`\n }\n\n return 'undefined' // or throw if you prefer to exclude unsupported values\n }\n\n return serialize(value)\n}\n","// NOTE: copied from pinia colada src/utils.ts\n\n/**\n * Valid primitives that can be stringified with `JSON.stringify`.\n *\n * @internal\n */\nexport type JSONPrimitive = string | number | boolean | null | undefined\n\n/**\n * Checks if a value is a valid JSON primitive.\n *\n * @param value - The value to check\n */\nexport function isJSONPrimitive(value: unknown): value is JSONPrimitive {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean' ||\n value == null // null or undefined\n )\n}\n\n/**\n * Utility type to represent a flat object that can be stringified with\n * `JSON.stringify` no matter the order of keys.\n *\n * @internal\n */\nexport interface ObjectFlat {\n [key: string]: JSONPrimitive | Array<JSONPrimitive>\n}\n\n/**\n * Valid values that can be stringified with `JSON.stringify`.\n *\n * @internal\n */\nexport type JSONValue = JSONPrimitive | JSONValue[] | { [key: string]: JSONValue }\n\nexport function isJSONValue(value: unknown): value is JSONValue {\n if (isJSONPrimitive(value)) return true\n if (Array.isArray(value)) {\n return value.every(isJSONValue)\n }\n if (isPlainObject(value)) {\n return Object.values(value).every(isJSONValue)\n }\n return false\n}\n\nfunction isCollection(\n value: unknown,\n): value is Iterable<unknown> & ({ length: number } | { size: number }) {\n return (\n value != null &&\n typeof value === 'object' &&\n ('length' in value || 'size' in value) &&\n Symbol.iterator in value\n )\n}\n\nfunction formatCollection(value: { length: number } | { size: number }) {\n const size = 'length' in value ? value.length : value.size\n return `${value.constructor.name}[${size}]`\n}\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object'\n\nexport function formatValue(value: unknown) {\n if (value === null) return 'null'\n if (value === undefined) return 'undefined'\n if (typeof value === 'string') return `\"${value}\"`\n if (typeof value === 'bigint') return `${value}n`\n if (typeof value === 'function') return `[Function ${value.name || 'anonymous'}]`\n if (isObject(value)) {\n if (value instanceof Date) return `Date(${value.toISOString()})`\n if (value instanceof RegExp) return value.toString()\n if (value instanceof Error) return `Error(${value.message})`\n if (isCollection(value)) return formatCollection(value)\n if (isPlainObject(value)) return `Object${Object.keys(value).length === 0 ? ' (empty)' : ''}`\n return `[${value.constructor.name}]`\n }\n return String(value)\n}\n\nexport function isPlainObject(value: unknown): value is { constructor?: typeof Object } {\n return isObject(value) && (value.constructor === Object || Object.getPrototypeOf(value) == null)\n}\n\nexport function getValueType(value: unknown) {\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Error) return 'error'\n return typeof value\n}\n\nconst VALUE_TYPE_CSS_CLASS = {\n string: 'text-(--devtools-syntax-green)',\n boolean: 'text-(--devtools-syntax-orange)',\n number: 'text-(--devtools-syntax-orange)',\n null: 'text-(--devtools-syntax-purple)',\n undefined: 'text-(--devtools-syntax-purple)',\n array: 'text-(--ui-text)',\n function: 'text-(--ui-text)',\n object: 'text-(--ui-text)',\n symbol: 'text-(--devtools-syntax-orange)',\n bigint: 'text-(--devtools-syntax-sapphire)',\n date: 'text-(--devtools-syntax-sapphire)',\n regexp: 'text-(--devtools-syntax-orange)',\n error: 'text-(--devtools-syntax-red)',\n} satisfies Partial<Record<ReturnType<typeof getValueType>, string>>\n\nexport function getValueTypeClass(value: unknown): string | undefined {\n return VALUE_TYPE_CSS_CLASS[getValueType(value)] || '--ui-text'\n}\n","import { isPlainObject } from '../json'\n\nexport interface NonSerializableValue_Base {\n __custom: '@@pc-non-serializable'\n __type: string\n value: unknown\n}\n\nexport interface NonSerializableValue_Function extends NonSerializableValue_Base {\n __type: 'function'\n value: string\n}\n\nexport interface NonSerializableValue_Symbol extends NonSerializableValue_Base {\n __type: 'symbol'\n value: string\n}\n\nexport interface NonSerializableValue_BigInt extends NonSerializableValue_Base {\n __type: 'bigint'\n value: string\n}\n\nexport interface NonSerializableValue_RegExp extends NonSerializableValue_Base {\n __type: 'regexp'\n value: { source: string; flags: string }\n}\n\nexport interface NonSerializableValue_Map extends NonSerializableValue_Base {\n __type: 'map'\n value: Array<[unknown, unknown]>\n}\n\nexport interface NonSerializableValue_Set extends NonSerializableValue_Base {\n __type: 'set'\n value: unknown[]\n}\n\nexport interface NonSerializableValue_WeakMap extends NonSerializableValue_Base {\n __type: 'weakmap'\n value: null\n}\n\nexport interface NonSerializableValue_WeakSet extends NonSerializableValue_Base {\n __type: 'weakset'\n value: null\n}\n\nexport interface NonSerializableValue_Date extends NonSerializableValue_Base {\n __type: 'date'\n value: string\n}\n\nexport interface NonSerializableValue_ArrayBuffer extends NonSerializableValue_Base {\n __type: 'arraybuffer'\n value: { byteLength: number }\n}\n\nexport interface NonSerializableValue_TypedArray extends NonSerializableValue_Base {\n __type: 'typedarray'\n value: { arrayType: string; byteLength: number }\n}\n\nexport interface NonSerializableValue_Promise extends NonSerializableValue_Base {\n __type: 'promise'\n value: null\n}\n\nexport interface NonSerializableValue_Error extends NonSerializableValue_Base {\n __type: 'error'\n value: { name: string; message: string; stack?: string }\n}\n\nexport interface NonSerializableValue_Object extends NonSerializableValue_Base {\n __type: 'object'\n value: { constructorName: string; properties: unknown }\n}\n\nexport type NonSerializableValue =\n | NonSerializableValue_Function\n | NonSerializableValue_Symbol\n | NonSerializableValue_BigInt\n | NonSerializableValue_RegExp\n | NonSerializableValue_Map\n | NonSerializableValue_Set\n | NonSerializableValue_WeakMap\n | NonSerializableValue_WeakSet\n | NonSerializableValue_Date\n | NonSerializableValue_ArrayBuffer\n | NonSerializableValue_TypedArray\n | NonSerializableValue_Promise\n | NonSerializableValue_Error\n | NonSerializableValue_Object\n\n// Helper function to recursively serialize values that might contain non-serializable data\nfunction safeSerializeRecursive(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => safeSerializeRecursive(item))\n }\n if (isPlainObject(value)) {\n // Try to serialize with safeSerialize first\n const serialized = safeSerialize(value)\n if (serialized !== value) {\n // It was a non-serializable value, return the serialized version\n return serialized\n }\n // It's a regular object, recursively serialize its properties\n const result: Record<string, unknown> = {}\n for (const [key, val] of Object.entries(value)) {\n result[key] = safeSerializeRecursive(val)\n }\n return result\n }\n return value\n}\n\n// Custom error for serialization issues\nclass SerializationError extends Error {\n constructor(\n message: string,\n public originalError?: unknown,\n ) {\n super(message)\n this.name = 'SerializationError'\n }\n}\n\n// Custom placeholder class for binary data display\nclass BinaryDataPlaceholder {\n constructor(\n public readonly type: string,\n public readonly byteLength: number,\n public readonly arrayType?: string,\n ) {}\n\n toString() {\n if (this.arrayType) {\n return `[${this.arrayType} ${this.byteLength} bytes]`\n }\n return `[${this.type} ${this.byteLength} bytes]`\n }\n}\n\nexport function safeSerialize(value: (...args: unknown[]) => unknown): NonSerializableValue_Function\nexport function safeSerialize(value: symbol): NonSerializableValue_Symbol\nexport function safeSerialize(value: bigint): NonSerializableValue_BigInt\nexport function safeSerialize(value: RegExp): NonSerializableValue_RegExp\nexport function safeSerialize(value: Map<unknown, unknown>): NonSerializableValue_Map\nexport function safeSerialize(value: Set<unknown>): NonSerializableValue_Set\nexport function safeSerialize(value: WeakMap<object, unknown>): NonSerializableValue_WeakMap\nexport function safeSerialize(value: WeakSet<object>): NonSerializableValue_WeakSet\nexport function safeSerialize(value: Date): NonSerializableValue_Date\nexport function safeSerialize(value: ArrayBuffer): NonSerializableValue_ArrayBuffer\nexport function safeSerialize(value: ArrayBufferView): NonSerializableValue_TypedArray\nexport function safeSerialize(value: Promise<unknown>): NonSerializableValue_Promise\nexport function safeSerialize(value: Error): NonSerializableValue_Error\nexport function safeSerialize<T>(value: T): T\nexport function safeSerialize(value: unknown) {\n if (typeof value === 'function') {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'function',\n value: `[Function: ${value.name || 'anonymous'}]`,\n } satisfies NonSerializableValue_Function\n } else if (typeof value === 'symbol') {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'symbol',\n value: value.description || '',\n } satisfies NonSerializableValue_Symbol\n } else if (typeof value === 'bigint') {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'bigint',\n value: String(value),\n } satisfies NonSerializableValue_BigInt\n } else if (value instanceof RegExp) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'regexp',\n value: { source: value.source, flags: value.flags },\n } satisfies NonSerializableValue_RegExp\n } else if (value instanceof Map) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'map',\n value: Array.from(value.entries()).map(([k, v]) => [\n safeSerializeRecursive(k),\n safeSerializeRecursive(v),\n ]),\n } satisfies NonSerializableValue_Map\n } else if (value instanceof Set) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'set',\n value: Array.from(value.values()).map((v) => safeSerializeRecursive(v)),\n } satisfies NonSerializableValue_Set\n } else if (value instanceof WeakMap) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'weakmap',\n value: null,\n } satisfies NonSerializableValue_WeakMap\n } else if (value instanceof WeakSet) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'weakset',\n value: null,\n } satisfies NonSerializableValue_WeakSet\n } else if (value instanceof Date) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'date',\n value: value.toISOString(),\n } satisfies NonSerializableValue_Date\n } else if (value instanceof ArrayBuffer) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'arraybuffer',\n value: { byteLength: value.byteLength },\n } satisfies NonSerializableValue_ArrayBuffer\n } else if (ArrayBuffer.isView(value)) {\n // Handle TypedArrays and DataView\n const typeName = value.constructor.name\n return {\n __custom: '@@pc-non-serializable',\n __type: 'typedarray',\n value: { arrayType: typeName, byteLength: value.byteLength },\n } satisfies NonSerializableValue_TypedArray\n } else if (value instanceof Promise) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'promise',\n value: null,\n } satisfies NonSerializableValue_Promise\n } else if (value instanceof Error) {\n return {\n __custom: '@@pc-non-serializable',\n __type: 'error',\n value: {\n name: value.name,\n message: value.message,\n stack: value.stack,\n },\n } satisfies NonSerializableValue_Error\n } else if (\n value &&\n typeof value === 'object' &&\n value.constructor &&\n value.constructor !== Object &&\n value.constructor !== Array\n ) {\n // Handle custom class instances\n const constructorName = value.constructor.name\n // Recursively serialize enumerable properties\n const properties = safeSerializeRecursive({ ...value })\n return {\n __custom: '@@pc-non-serializable',\n __type: 'object',\n value: { constructorName, properties },\n } satisfies NonSerializableValue_Object\n }\n\n // value that cannot be serialized\n return value\n}\n\nfunction isNonSerializableValue(value: unknown): value is NonSerializableValue {\n return (\n !!value &&\n typeof value === 'object' &&\n '__custom' in value &&\n value.__custom === '@@pc-non-serializable' &&\n '__type' in value &&\n typeof value.__type === 'string' &&\n 'value' in value\n )\n}\n\nfunction restoreClonedValue(value: NonSerializableValue) {\n if (value.__type === 'function') {\n return () => {}\n } else if (value.__type === 'symbol') {\n return Symbol(value.value)\n } else if (value.__type === 'bigint') {\n // BigInt() throws an error if the value is not a valid bigint string\n try {\n return BigInt(value.value)\n } catch (err) {\n return new SerializationError(`Invalid bigint value: ${value.value}`, err)\n }\n } else if (value.__type === 'regexp') {\n try {\n const { source, flags } = value.value\n return new RegExp(source, flags)\n } catch (err) {\n return new SerializationError(`Invalid regexp value: ${JSON.stringify(value.value)}`, err)\n }\n } else if (value.__type === 'map') {\n const entries = value.value.map(\n ([k, v]) => [restoreClonedDeep(k), restoreClonedDeep(v)] as const,\n )\n return new Map(entries)\n } else if (value.__type === 'set') {\n const values = value.value.map((v) => restoreClonedDeep(v))\n return new Set(values)\n } else if (value.__type === 'weakmap') {\n return new WeakMap()\n } else if (value.__type === 'weakset') {\n return new WeakSet()\n } else if (value.__type === 'date') {\n try {\n return new Date(value.value)\n } catch (err) {\n return new SerializationError(`Invalid date value: ${value.value}`, err)\n }\n } else if (value.__type === 'arraybuffer') {\n return new BinaryDataPlaceholder('ArrayBuffer', value.value.byteLength)\n } else if (value.__type === 'typedarray') {\n return new BinaryDataPlaceholder('TypedArray', value.value.byteLength, value.value.arrayType)\n } else if (value.__type === 'promise') {\n return Promise.resolve()\n } else if (value.__type === 'error') {\n const error = new Error(value.value.message)\n error.name = value.value.name\n if (value.value.stack) {\n error.stack = value.value.stack\n }\n return error\n } else if (value.__type === 'object') {\n const properties = restoreClonedDeep(value.value.properties)\n return typeof properties === 'object' && properties !== null\n ? { ...properties, __constructorName: value.value.constructorName }\n : { __constructorName: value.value.constructorName }\n }\n // @ts-expect-error: type of value is never\n return new SerializationError(`Unknown non-serializable value type: ${value.__type}`)\n}\n\nexport function restoreClonedDeep<T>(val: T): T\nexport function restoreClonedDeep(val: unknown): unknown {\n if (Array.isArray(val)) {\n return val.map((item) => restoreClonedDeep(item))\n }\n if (isNonSerializableValue(val)) {\n return restoreClonedValue(val)\n }\n if (val && typeof val === 'object' && !isError(val)) {\n return Object.fromEntries(\n Object.entries(val).map(([key, value]) => [key, restoreClonedDeep(value)]),\n )\n }\n return val\n}\n\nexport function isError(err: unknown): err is Error {\n return 'isError' in Error && typeof Error.isError === 'function'\n ? Error.isError(err)\n : err instanceof Error\n}\n","import type { DataState, EntryKey, UseQueryEntryFilter } from '@pinia/colada'\nimport type { UseQueryEntryPayload } from '../query-serialized'\nimport { toRaw } from 'vue'\nimport { restoreClonedDeep, safeSerialize } from './custom-values'\nimport { isPlainObject } from '../json'\n\nexport class DuplexChannel<\n const Emits extends Record<EmitsKeys, any[]>,\n const Listens extends Record<ListensKeys, [...any[]]>,\n // TODO: this seems to be enough. Test it\n // const Emits extends Record<keyof Emits, [...any[]]>,\n // const Listens extends Record<keyof Listens, [...any[]]>,\n // NOTE: we need these two to avoid requiring the interface to have an index signature for string\n EmitsKeys extends keyof Emits = keyof Emits,\n ListensKeys extends keyof Listens = keyof Listens,\n> {\n protected listenersByEvent = new Map<keyof Listens, Set<(...args: any[]) => void>>()\n protected eventsController: null | AbortController = null\n\n constructor(protected port: MessagePort) {\n this.setPort(port)\n }\n\n setPort(port: MessagePort) {\n // remove the previous event listeners\n this.eventsController?.abort()\n const { signal } = (this.eventsController = new AbortController())\n this.port = port\n port.addEventListener('message', this.onMessage.bind(this), { signal })\n port.addEventListener('messageerror', this.onMessageError.bind(this), { signal })\n // needed when we call `addEventListener` instead of using `onmessage`\n port.start()\n }\n\n private onMessage(event: MessageEvent) {\n if (!event.data || typeof event.data !== 'object' || typeof event.data.id !== 'string') {\n console.error(`${this.constructor.name}: invalid message`, event.data)\n return\n }\n const listeners = this.listenersByEvent.get(event.data.id)\n if (!listeners) return\n\n const restoredData = restoreClonedDeep(event.data.data as Listens[keyof Listens])\n for (const listener of listeners.values()) {\n listener(...restoredData)\n }\n }\n\n private onMessageError(event: MessageEvent) {\n console.error(`${this.constructor.name}: message error`, event)\n }\n\n stop() {\n this.listenersByEvent.clear()\n this.eventsController?.abort()\n }\n\n emit<K extends keyof Emits>(event: K, ...args: NoInfer<Emits[K]>): void {\n const clonedData = args.map((arg) => toRawDeep(arg))\n this.port.postMessage({ id: event, data: clonedData })\n }\n\n on<K extends keyof Listens>(event: K, callback: (...args: Listens[K]) => void): () => void {\n let listeners = this.listenersByEvent.get(event)\n if (!listeners) {\n this.listenersByEvent.set(event, (listeners = new Set()))\n }\n listeners.add(callback)\n\n return () => {\n this.listenersByEvent.get(event)?.delete(callback)\n }\n }\n\n off<K extends keyof Listens>(event: K): void {\n this.listenersByEvent.delete(event)\n }\n}\n\nexport interface AppEmits {\n 'queries:all': [entries: UseQueryEntryPayload[]]\n 'queries:update': [entry: UseQueryEntryPayload]\n 'queries:delete': [entry: UseQueryEntryPayload]\n 'mutations:all': [entries: unknown[]]\n}\n\nexport interface DevtoolsEmits {\n 'queries:clear': [] | [filters: UseQueryEntryFilter]\n 'queries:refetch': [entryKey: EntryKey]\n 'queries:invalidate': [entryKey: EntryKey]\n 'queries:reset': [entryKey: EntryKey]\n\n 'queries:simulate:error': [entryKey: EntryKey]\n 'queries:simulate:error:stop': [entryKey: EntryKey]\n 'queries:simulate:loading': [entryKey: EntryKey]\n 'queries:simulate:loading:stop': [entryKey: EntryKey]\n\n 'queries:set:state': [entryKey: EntryKey, state: DataState<unknown, unknown, unknown>]\n}\n\nexport function _testTypes() {\n // the app\n const client = new DuplexChannel<AppEmits, DevtoolsEmits>({} as any)\n // the devtools\n const server = new DuplexChannel<DevtoolsEmits, AppEmits>({} as any)\n\n client.emit('queries:all', [])\n // client.emit('queries:all', [{ id: '', active: false, asyncStatus: 'idle', }])\n client.on('queries:clear', () => {})\n client.on('queries:clear', (filters = {}) => {\n console.error('not implemented yet', filters.key)\n // ...\n })\n\n server.emit('queries:clear')\n server.emit('queries:clear', { key: [''] })\n}\n\nfunction toRawDeep<T>(val: T): T\nfunction toRawDeep(val: unknown): unknown {\n if (Array.isArray(val)) {\n return val.map((item) => toRawDeep(item))\n }\n // TODO: custom classes?\n if (isPlainObject(val)) {\n return Object.fromEntries(Object.entries(val).map(([key, value]) => [key, toRawDeep(value)]))\n }\n return safeSerialize(toRaw(val))\n}\n","/**\n * Pinia Colada plugin that counts how many times a query has been fetched, has resolved, rejected, etc.\n *\n */\nimport type { DataState, UseQueryEntry } from '@pinia/colada'\n\nexport const DEVTOOLS_INFO_KEY = Symbol('fetch-count-pinia-colada-plugin')\n\nexport interface UseQueryEntryHistoryEntry extends Pick<UseQueryEntry, 'key'> {\n id: number\n\n state: DataState<unknown, unknown, unknown>\n\n /**\n * When was the last time the entry was updated.\n */\n updatedAt: number\n\n /**\n * When was the entry created.\n */\n createdAt: number\n\n /**\n * The time it took to fetch the entry.\n */\n fetchTime: {\n start: number\n end: number | null\n } | null\n}\n\nexport interface UseQueryDevtoolsInfo {\n count: {\n succeed: number\n errored: number\n cancelled: number\n total: number\n }\n\n updatedAt: number\n\n /**\n * When was this entry last inactive. 0 if it has never been inactive.\n */\n inactiveAt: number\n\n simulate: 'error' | 'loading' | null\n\n /**\n * Only the last 10 entries are kept.\n */\n history: UseQueryEntryHistoryEntry[]\n}\n\ndeclare module '@pinia/colada' {\n // eslint-disable-next-line unused-imports/no-unused-vars\n interface UseQueryEntry<TData, TError, TDataInitial> {\n /**\n * Returns whether the query is currently delaying its `asyncStatus` from becoming `'loading'`. Requires the {@link PiniaColadaDelay} plugin.\n */\n [DEVTOOLS_INFO_KEY]: UseQueryDevtoolsInfo\n }\n}\n"],"names":["miniJsonParse","value","isValidIdentifier","key","serialize","val","obj","k","v","isJSONPrimitive","isJSONValue","isPlainObject","isCollection","formatCollection","size","isObject","formatValue","getValueType","VALUE_TYPE_CSS_CLASS","getValueTypeClass","safeSerializeRecursive","item","serialized","safeSerialize","result","SerializationError","message","originalError","BinaryDataPlaceholder","type","byteLength","arrayType","constructorName","properties","isNonSerializableValue","restoreClonedValue","err","source","flags","entries","restoreClonedDeep","values","error","isError","DuplexChannel","port","signal","event","listeners","restoredData","listener","args","clonedData","arg","toRawDeep","callback","_testTypes","client","server","filters","toRaw","DEVTOOLS_INFO_KEY"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pinia/colada-devtools",
3
3
  "type": "module",
4
- "version": "0.1.6",
4
+ "version": "0.1.7",
5
5
  "description": "Devtools for Pinia Colada",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -46,20 +46,20 @@
46
46
  "dist-shared"
47
47
  ],
48
48
  "devDependencies": {
49
- "@iconify-json/lucide": "^1.2.57",
49
+ "@iconify-json/lucide": "^1.2.68",
50
50
  "@posva/splitpanes": "^4.0.6",
51
- "@tailwindcss/vite": "^4.1.11",
52
- "@vueuse/core": "^13.5.0",
51
+ "@tailwindcss/vite": "^4.1.13",
52
+ "@vueuse/core": "^13.9.0",
53
53
  "mande": "^2.0.9",
54
54
  "match-container": "^0.1.0",
55
55
  "pinia": "^3.0.3",
56
- "tailwindcss": "^4.1.11",
57
- "unplugin-icons": "^22.1.0",
58
- "unplugin-vue-components": "^29.0.0",
59
- "unplugin-vue-router": "^0.14.0",
56
+ "tailwindcss": "^4.1.13",
57
+ "unplugin-icons": "^22.3.0",
58
+ "unplugin-vue-components": "^29.1.0",
59
+ "unplugin-vue-router": "^0.15.0",
60
60
  "vite-plugin-dts": "^4.5.4",
61
61
  "vue-router": "^4.5.1",
62
- "@pinia/colada": "0.17.2"
62
+ "@pinia/colada": "0.17.6"
63
63
  },
64
64
  "scripts": {
65
65
  "dev:app": "vite",
@@ -1 +0,0 @@
1
- {"version":3,"file":"_queryId_-13o6pDV6.js","sources":["../src/panel/components/editable-json/JsonItem.vue","../src/panel/components/editable-json/JsonViewer.vue","../src/panel/components/UCollapse.ce.vue","../src/panel/utils/time.ts","../src/panel/pages/queries/[queryId].vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from 'vue'\nimport type { JSONValue } from '@pinia/colada-devtools/shared'\nimport { formatValue, getValueTypeClass, isPlainObject } from '@pinia/colada-devtools/shared'\n\nconst props = defineProps<{\n itemKey: string\n value: JSONValue | Map<PropertyKey, any> | Set<unknown>\n depth: number\n}>()\n\nconst isExpanded = ref(false)\n\nconst isExpandable = computed(() => {\n const { value } = props\n return (\n (Array.isArray(value) && value.length > 0) ||\n (isPlainObject(value) && Object.keys(value).length > 0) ||\n (value instanceof Map && value.size > 0) ||\n (value instanceof Set && value.size > 0)\n )\n})\n\nconst keyValuePairs = computed<Iterable<[PropertyKey, any]>>(() => {\n const { value } = props\n if (Array.isArray(value)) {\n return value.map((v, i) => [i, v] as const)\n } else if (isPlainObject(value)) {\n return Object.entries(value)\n } else if (value instanceof Map) {\n return value.entries()\n } else if (value instanceof Set) {\n return Array.from(value).map((v, i) => [i, v] as const)\n }\n return []\n})\n\nfunction toggleExpansion() {\n if (!isExpandable.value) return\n isExpanded.value = !isExpanded.value\n}\n\n// TODO: rework the indentation of nested items, it's currently bugged: it increases too much and is too small at the beginning\n</script>\n\n<template>\n <div\n :style=\"{ paddingLeft: `${depth * 0.35}em` }\"\n class=\"ring-(--ui-bg-muted)\"\n :class=\"{\n 'hover:ring': isExpandable,\n 'rounded-tl': depth > 0,\n }\"\n >\n <div\n class=\"flex items-center gap-2 py-0.5 bg-transparent hover:bg-(--ui-bg-muted) duration-200 transition-colors\"\n :class=\"depth > 0 && 'rounded-l'\"\n >\n <ILucideChevronRight\n v-if=\"isExpandable\"\n class=\"size-3 text-(--ui-text-dimmed) transition-transform duration-200 cursor-pointer\"\n :class=\"{ 'rotate-90': isExpanded }\"\n @click=\"toggleExpansion\"\n />\n\n <!-- Maintain alignment by adding left margin when chevron is absent -->\n <span class=\"text-(--devtools-syntax-gray)\" :class=\"!isExpandable && 'ml-5'\">\n {{ itemKey }}:\n </span>\n\n <!-- Value or Collection Label -->\n <span\n :class=\"[getValueTypeClass(value), isExpandable && 'cursor-pointer']\"\n :title=\"isExpandable ? 'Click to expand' : undefined\"\n @click=\"toggleExpansion\"\n >\n {{ formatValue(value) }}\n </span>\n\n <!-- Edit button -->\n <!-- <UButton v-if=\"isHovered && !isExpandable\" size=\"xs\"> -->\n <!-- Edit -->\n <!-- </UButton> -->\n </div>\n\n <!-- Expanded children -->\n <template v-if=\"isExpandable && isExpanded\">\n <JsonItem\n v-for=\"[childKey, childValue] of keyValuePairs\"\n :key=\"childKey\"\n :item-key=\"String(childKey)\"\n :value=\"childValue\"\n :depth=\"depth + 1\"\n />\n </template>\n </div>\n</template>\n","<script lang=\"ts\">\nfunction isExpandable(value: unknown): value is unknown[] | Record<string, unknown> | Map<unknown, unknown> | Set<unknown> {\n return !!value && (Array.isArray(value) || isPlainObject(value) || value instanceof Map || value instanceof Set)\n}\n</script>\n\n<script setup lang=\"ts\">\nimport { formatValue, getValueTypeClass, isPlainObject } from '@pinia/colada-devtools/shared'\nimport JsonItem from './JsonItem.vue'\n\ndefineProps<{\n data: unknown\n}>()\n</script>\n\n<template>\n <!-- Handle expandable items -->\n <template v-if=\"isExpandable(data)\">\n <JsonItem\n v-for=\"[key, value] in Object.entries(data)\"\n :key=\"key\"\n :item-key=\"key\"\n :value=\"value\"\n :depth=\"0\"\n />\n </template>\n <!-- Handle primitive root values -->\n <template v-else>\n <span :class=\"getValueTypeClass(data)\">{{ formatValue(data) }}</span>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { Component } from 'vue'\n\ndefineProps<{\n title?: string\n icon?: Component\n noPadding?: boolean\n}>()\n\nconst open = defineModel<boolean>('open', {\n default: true,\n})\n\nfunction scrollIfNeeded(event: TransitionEvent) {\n if (event.target instanceof HTMLElement) {\n const scrollOptions: ScrollIntoViewOptions = {\n block: 'nearest',\n inline: 'nearest',\n behavior: 'smooth',\n }\n event.target.scrollIntoView(scrollOptions)\n }\n}\n</script>\n\n<template>\n <div class=\"collapse collapse-arrow\">\n <input v-model=\"open\" type=\"checkbox\">\n <div class=\"collapse-title px-2 py-0.5 bg-neutral-200 dark:bg-neutral-800 theme-neutral\">\n <slot name=\"title\" :open :title>\n <h3 class=\"font-semibold text-sm flex gap-x-1 items-center\">\n <slot name=\"icon\">\n <component :is=\"icon\" v-if=\"icon\" class=\"size-4\" />\n </slot>\n {{ title ?? 'Group' }}\n </h3>\n </slot>\n </div>\n <div\n :class=\"!noPadding && 'px-2'\"\n class=\"collapse-content text-sm overflow-hidden\"\n @transitionend=\"scrollIfNeeded\"\n >\n <slot :open />\n </div>\n </div>\n</template>\n\n<style scoped>\n.collapse:not(td, tr, colgroup) {\n visibility: visible;\n}\n\n.collapse {\n position: relative;\n display: grid;\n overflow: hidden;\n width: 100%;\n grid-template-rows: max-content 0fr;\n transition: grid-template-rows 0.2s;\n isolation: isolate;\n\n > input:is([type='checkbox'], [type='radio']) {\n grid-column-start: 1;\n grid-row-start: 1;\n appearance: none;\n opacity: 0;\n }\n\n &:is([open], :focus),\n &:has(> input:is([type='checkbox'], [type='radio']):checked) {\n grid-template-rows: max-content 1fr;\n }\n\n &:is([open], :focus) > .collapse-content,\n &:not(.collapse-close)\n > :where(input:is([type='checkbox'], [type='radio']):checked ~ .collapse-content) {\n visibility: visible;\n min-height: fit-content;\n }\n &:focus-visible,\n &:has(> input:is([type='checkbox'], [type='radio']):focus-visible) {\n outline-color: var(--ui-text);\n outline-style: solid;\n outline-width: 2px;\n outline-offset: 2px;\n }\n\n &:not(.collapse-close) {\n > input[type='checkbox'],\n > input[type='radio']:not(:checked),\n > .collapse-title {\n cursor: pointer;\n }\n }\n\n &:focus:not(.collapse-close, .collapse[open]) > .collapse-title {\n cursor: unset;\n }\n\n &:is([open]) {\n &.collapse-arrow {\n > .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n }\n\n &.collapse-arrow:focus {\n > .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n\n &.collapse-arrow {\n > input:is([type='checkbox'], [type='radio']):checked ~ .collapse-title:after {\n transform: translateY(-50%) rotate(225deg);\n }\n }\n\n > input:is([type='checkbox'], [type='radio']) {\n z-index: 1;\n width: 100%;\n }\n}\n\n.collapse-title,\n.collapse-content {\n grid-column-start: 1;\n grid-row-start: 1;\n}\n\n.collapse-content {\n visibility: hidden;\n grid-column-start: 1;\n grid-row-start: 2;\n min-height: 0;\n cursor: unset;\n transition: visibility 0.2s;\n}\n\n.collapse-arrow {\n > .collapse-title:after {\n position: absolute;\n display: block;\n height: 0.5rem;\n width: 0.5rem;\n transform: translateY(-100%) rotate(45deg);\n transition-property: all;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 0.2s;\n top: 50%;\n right: 0.8em;\n inset-inline-end: 0.75rem;\n content: '';\n transform-origin: 75% 75%;\n box-shadow: 2px 2px;\n pointer-events: none;\n }\n}\n\n.collapse-title {\n position: relative;\n width: 100%;\n transition: background-color 0.2s ease-out;\n}\n</style>\n","export function formatDuration(timeInMs: number): string {\n if (timeInMs < 1000) {\n return `${Math.round(timeInMs)} ms`\n }\n\n const seconds = timeInMs / 1000\n if (timeInMs < 10_000) {\n return `${seconds.toFixed(3)} seconds`\n }\n\n if (timeInMs < 60_000) {\n return `${Math.floor(seconds)} seconds`\n }\n\n const minutes = Math.floor(seconds / 60)\n\n if (timeInMs < 3_600_000) {\n return `${minutes} minute${minutes > 1 ? 's' : ''}`\n }\n\n const hours = Math.floor(minutes / 60)\n\n return `${hours}h${minutes % 60}m${seconds % 60}s`\n}\n","<script setup lang=\"ts\">\nimport type { UseQueryEntryPayload } from '@pinia/colada-devtools/shared'\nimport { computed, watch } from 'vue'\nimport { useDuplexChannel, useQueryEntries } from '../../composables/duplex-channel'\nimport { formatDuration } from '../../utils/time'\nimport { useRoute } from 'vue-router'\nimport type { DataStateStatus } from '@pinia/colada'\n\nimport IWrench from '~icons/lucide/wrench'\nimport IInfoCircle from '~icons/lucide/info'\nimport IFileText from '~icons/lucide/file-text'\nimport ICircleX from '~icons/lucide/circle-x'\nimport IBraces from '~icons/lucide/braces'\nimport IHistory from '~icons/lucide/history'\nimport ISigmaSquare from '~icons/lucide/sigma-square'\nimport { useTimeAgo, formatTimeAgo, useLocalStorage } from '@vueuse/core'\nimport type { FormatTimeAgoOptions } from '@vueuse/core'\n\nconst route = useRoute('/queries/[queryId]')\nconst queries = useQueryEntries()\n\nconst selectedQuery = computed<UseQueryEntryPayload | null>(() => {\n return queries.value.find((entry) => entry.keyHash === route.params.queryId) ?? null\n})\n\nconst serializedHistoryEntries = computed(() => {\n return (\n selectedQuery.value?.devtools.history.map((entry) => {\n let value: string\n try {\n value = JSON.stringify(entry, null, 2)\n } catch (error) {\n value = `Error serializing entry: ${String(error)}`\n }\n return {\n ...entry,\n data: value,\n }\n }) ?? []\n )\n})\n\nconst TIME_AGO_OPTIONS: FormatTimeAgoOptions = {\n showSecond: true,\n rounding: 'floor',\n max: 1000 * 60 * 5, // 5 minutes\n}\n\nconst lastUpdate = useTimeAgo(() => selectedQuery.value?.devtools.updatedAt ?? 0, {\n ...TIME_AGO_OPTIONS,\n updateInterval: 3_000,\n})\n\n// TODO: we should be able to highlight components using this query\n// const el = useTemplateRef('me')\n// TODO: add ref=\"me\" to the div\n// watch(\n// // also trigger if the selectedQuery changes\n// () => [el.value, selectedQuery.value?.id] as const,\n// ([el]) => {\n// if (!el || !selectedQuery.value) return\n//\n// const observingComponents = findVueComponents(\n// el,\n// selectedQuery.value.deps.filter((c) => c.type === 'component').map((c) => c.uid) ?? [],\n// )\n//\n// console.log('elements', observingComponents)\n// },\n// )\n\nconst channel = useDuplexChannel()\n\nconst isDataOpen = useLocalStorage<boolean>('pc:query:details:data:open', false, {})\nlet wasDataOpen = isDataOpen.value\nlet lastStatus: DataStateStatus | null = null\nconst isErrorOpen = useLocalStorage<boolean>('pc:query:details:error:open', false, {})\nwatch(\n () => selectedQuery.value?.state,\n (state) => {\n if (!state || lastStatus === state.status) return\n lastStatus = state.status\n if (state.status === 'error') {\n isErrorOpen.value = true\n // preserve it for later\n wasDataOpen = isDataOpen.value\n isDataOpen.value = false\n } else if (state.status === 'success') {\n isDataOpen.value = wasDataOpen\n isErrorOpen.value = false\n }\n },\n)\n</script>\n\n<template>\n <div class=\"flex flex-col divide-y dark:divide-(--ui-border) divide-(--ui-border-accented)\">\n <template v-if=\"selectedQuery\">\n <UCollapse title=\"Details\" :icon=\"IInfoCircle\">\n <div class=\"py-1 text-sm\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>key:</span>\n <span>\n <code class=\"rounded bg-neutral-500/20 p-0.5\">{{ selectedQuery.key }}</code>\n </span>\n </p>\n\n <p\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When was the query entry last updated\"\n >\n <span>Last update:</span>\n <span class=\"font-bold\">{{ lastUpdate }}</span>\n </p>\n\n <p\n v-if=\"selectedQuery.devtools.history.at(0)?.fetchTime\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When was the last time the query was fetched\"\n >\n <span>Last fetch:</span>\n <span class=\"font-bold\">{{\n formatTimeAgo(new Date(selectedQuery.devtools.history.at(0)!.fetchTime!.start), {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n })\n }}</span>\n </p>\n\n <p\n v-if=\"selectedQuery.devtools.history.at(0)?.fetchTime?.end\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"How long did the last query take to fetch\"\n >\n <span>Fetch duration:</span>\n <span class=\"font-bold\">{{\n formatDuration(\n selectedQuery.devtools.history.at(0)!.fetchTime!.end!\n - selectedQuery.devtools.history.at(0)!.fetchTime!.start,\n )\n }}</span>\n </p>\n\n <p\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"How many components and effects are using this query\"\n >\n <span>Observers: <span class=\"font-bold\">{{ selectedQuery.deps.length }}</span></span>\n </p>\n\n <p\n v-if=\"!selectedQuery.active && selectedQuery.options\"\n class=\"grid grid-cols-[auto_1fr] gap-x-2\"\n title=\"When is this query entry garbace collected\"\n >\n <template\n v-if=\"\n typeof selectedQuery.options.gcTime === 'number'\n && Number.isFinite(selectedQuery.options.gcTime)\n \"\n >\n <span>Will be <i>gced</i></span>\n <span class=\"font-bold\">{{\n formatTimeAgo(\n new Date(selectedQuery.devtools.inactiveAt + selectedQuery.options.gcTime),\n {\n ...TIME_AGO_OPTIONS,\n max: undefined,\n },\n )\n }}</span>\n </template>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Actions\" :icon=\"IWrench\">\n <div class=\"py-2 gap-2 flex flex-wrap items-center justify-items-start\">\n <UButton\n class=\"theme-info\"\n size=\"sm\"\n title=\"Refetch this query\"\n :disabled=\"selectedQuery.options?.enabled === false\"\n @click=\"channel.emit('queries:refetch', selectedQuery.key)\"\n >\n <i-lucide-refresh-cw class=\"size-3.5\" /> Refetch\n </UButton>\n\n <UButton\n class=\"theme-neutral\"\n size=\"sm\"\n title=\"Invalidate this query\"\n @click=\"channel.emit('queries:invalidate', selectedQuery.key)\"\n >\n <i-lucide-timer-reset /> Invalidate\n </UButton>\n\n <UButton\n v-if=\"selectedQuery.devtools.simulate !== 'loading'\"\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('queries:simulate:loading', selectedQuery.key)\"\n >\n <i-lucide-loader />\n Simulate loading\n </UButton>\n <UButton\n v-else\n class=\"theme-purple\"\n size=\"sm\"\n title=\"Simulate a loading state\"\n @click=\"channel.emit('queries:simulate:loading:stop', selectedQuery.key)\"\n >\n <i-lucide-loader class=\"animate-spin\" />\n Stop loading\n </UButton>\n\n <UButton\n v-if=\"selectedQuery.devtools.simulate !== 'error'\"\n class=\"theme-error\"\n size=\"sm\"\n title=\"Simulate an Error state\"\n @click=\"channel.emit('queries:simulate:error', selectedQuery.key)\"\n >\n <i-lucide-x-octagon /> Simulate error\n </UButton>\n <UButton\n v-else\n class=\"theme-error\"\n size=\"sm\"\n title=\"Restore the previous state\"\n @click=\"channel.emit('queries:simulate:error:stop', selectedQuery.key)\"\n >\n <i-lucide-rotate-ccw /> Remove error\n </UButton>\n\n <UButton\n class=\"theme-warning\"\n size=\"sm\"\n title=\"Reset this query to its initial (pending) state\"\n @click=\"channel.emit('queries:reset', selectedQuery.key)\"\n >\n <i-lucide-trash /> Reset\n </UButton>\n </div>\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isDataOpen\"\n title=\"Data\"\n :icon=\"IFileText\"\n class=\"font-mono\"\n no-padding\n >\n <JsonViewer :data=\"selectedQuery.state.data\" />\n </UCollapse>\n\n <UCollapse\n v-model:open=\"isErrorOpen\"\n :title=\"`Error${selectedQuery.state.status === 'error' ? ' (!)' : ''}`\"\n :icon=\"ICircleX\"\n >\n <div class=\"py-1\">\n <pre v-if=\"selectedQuery.state.error\" class=\"rounded p-1 overflow-auto max-h-[1200px]\">{{\n selectedQuery.state.error\n }}</pre>\n <p v-else class=\"text-neutral-500/50\">\n No error\n </p>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Call count\" :icon=\"ISigmaSquare\" :open=\"false\">\n <div class=\"py-1\">\n <p class=\"grid grid-cols-[auto_1fr] gap-1\">\n <span>Calls:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.total }}</code>\n </span>\n <span>Success:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.succeed }}</code>\n </span>\n <span>Errors:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.errored }}</code>\n </span>\n <span>Cancelled:</span>\n <span>\n <code class=\"font-bold\">{{ selectedQuery.devtools.count.cancelled }}</code>\n </span>\n </p>\n </div>\n </UCollapse>\n\n <UCollapse\n :title=\"`History (${selectedQuery.devtools.history.length})`\"\n :icon=\"IHistory\"\n :open=\"false\"\n >\n <div class=\"py-1\">\n <UCollapse\n v-for=\"entry of serializedHistoryEntries\"\n :key=\"entry.updatedAt\"\n :title=\"`Entry nº${entry.id} (${formatTimeAgo(new Date(entry.updatedAt), TIME_AGO_OPTIONS)})`\"\n :open=\"false\"\n >\n <pre class=\"rounded p-1 overflow-auto max-h-[1200px]\">{{ entry.data }}</pre>\n </UCollapse>\n </div>\n </UCollapse>\n\n <UCollapse title=\"Options\" :open=\"false\" :icon=\"IBraces\">\n <div class=\"py-1\">\n <pre\n v-if=\"selectedQuery.options\"\n class=\"rounded bg-neutral-500/20 p-1 overflow-auto max-h-[1200px]\"\n >{{ selectedQuery.options }}</pre>\n <p v-else>\n This Query entry has no options. It might have been created from the server or manually\n set with\n <code>queryCache.setQueryData()</code> for prefetching.\n </p>\n </div>\n </UCollapse>\n </template>\n\n <template v-else>\n <div class=\"py-6 mx-auto\">\n <p class=\"flex flex-col text-center items-center gap-2 text-lg px-2\">\n Select a Query to inspect\n <i-lucide-mouse-pointer-click />\n </p>\n </div>\n </template>\n </div>\n</template>\n"],"names":["props","__props","isExpanded","ref","isExpandable","computed","value","isPlainObject","keyValuePairs","v","i","toggleExpansion","_createElementBlock","depth","_createElementVNode","_normalizeClass","_createBlock","_component_ILucideChevronRight","itemKey","_unref","getValueTypeClass","_toDisplayString","formatValue","_hoisted_1","_openBlock","_Fragment","_renderList","childKey","childValue","_component_JsonItem","data","key","JsonItem","open","_useModel","scrollIfNeeded","event","scrollOptions","$event","_hoisted_2","_renderSlot","_ctx","title","_hoisted_3","icon","_resolveDynamicComponent","_createTextVNode","noPadding","formatDuration","timeInMs","seconds","minutes","route","useRoute","queries","useQueryEntries","selectedQuery","entry","serializedHistoryEntries","error","TIME_AGO_OPTIONS","lastUpdate","useTimeAgo","channel","useDuplexChannel","isDataOpen","useLocalStorage","wasDataOpen","lastStatus","isErrorOpen","watch","state","_createVNode","_component_UCollapse","IInfoCircle","_cache","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","formatTimeAgo","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","IWrench","_hoisted_15","_component_UButton","_component_i_lucide_refresh_cw","_component_i_lucide_timer_reset","_component_i_lucide_loader","_component_i_lucide_x_octagon","_component_i_lucide_rotate_ccw","_component_i_lucide_trash","IFileText","_component_JsonViewer","ICircleX","_hoisted_16","_hoisted_17","_hoisted_18","ISigmaSquare","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","IHistory","_hoisted_25","_hoisted_26","IBraces","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_component_i_lucide_mouse_pointer_click"],"mappings":"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"}