@thxgg/steward 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +6 -0
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{qKRNa41x.js → 4r0X30JV.js} +1 -1
- package/.output/public/_nuxt/{uTyw4SRK.js → BMdjSp24.js} +1 -1
- package/.output/public/_nuxt/{BubpH_wW.js → BSZqAKg4.js} +1 -1
- package/.output/public/_nuxt/{nYTZJhvT.js → BdjPva1I.js} +1 -1
- package/.output/public/_nuxt/Beeir9iR.js +1 -0
- package/.output/public/_nuxt/Bh3vsUvl.js +1 -0
- package/.output/public/_nuxt/{CMu9GKTH.js → BlTKcjLJ.js} +2 -2
- package/.output/public/_nuxt/{BDqHART1.js → By7gAVcL.js} +1 -1
- package/.output/public/_nuxt/CbJfCtEa.js +1 -0
- package/.output/public/_nuxt/CbkpNvIu.js +141 -0
- package/.output/public/_nuxt/CmhLcqDu.js +1 -0
- package/.output/public/_nuxt/DC6iPLz1.js +30 -0
- package/.output/public/_nuxt/{C_NevjZD.js → DD--ojY9.js} +1 -1
- package/.output/public/_nuxt/Detail.DSyVQNdr.css +1 -0
- package/.output/public/_nuxt/DhKWRjCh.js +60 -0
- package/.output/public/_nuxt/_prd_.BkpxMFSV.css +1 -0
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/f3f42dbd-d501-442b-871c-3d06157e7aa1.json +1 -0
- package/.output/public/_nuxt/c1sXju8w.js +1 -0
- package/.output/public/_nuxt/eGCjCghR.js +1 -0
- package/.output/public/_nuxt/nX8Sf7cz.js +13 -0
- package/.output/server/chunks/_/git-api.mjs +100 -7
- package/.output/server/chunks/_/git-api.mjs.map +1 -1
- package/.output/server/chunks/_/git.mjs +3 -10
- package/.output/server/chunks/_/git.mjs.map +1 -1
- package/.output/server/chunks/_/prd-service.mjs +234 -0
- package/.output/server/chunks/_/prd-service.mjs.map +1 -0
- package/.output/server/chunks/_/task-graph.mjs +3 -3
- package/.output/server/chunks/_/task-graph.mjs.map +1 -1
- package/.output/server/chunks/_/watcher.mjs +26 -46
- package/.output/server/chunks/_/watcher.mjs.map +1 -1
- package/.output/server/chunks/build/{Detail-DC-KJQ1f.mjs → Detail-MGwP_u2d.mjs} +63 -34
- package/.output/server/chunks/build/Detail-MGwP_u2d.mjs.map +1 -0
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs +4 -0
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs.map +1 -0
- package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs +8 -0
- package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs.map +1 -0
- package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs +10 -0
- package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs.map +1 -0
- package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs +8 -0
- package/.output/server/chunks/build/Viewer-styles.D6wYWFb1.mjs.map +1 -0
- package/.output/server/chunks/build/{_prd_-C1C4GAhW.mjs → _prd_-C-Aj4fVa.mjs} +75 -33
- package/.output/server/chunks/build/_prd_-C-Aj4fVa.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/{default-DWCOHHTE.mjs → default-Cao5eO80.mjs} +4 -3
- package/.output/server/chunks/build/default-Cao5eO80.mjs.map +1 -0
- package/.output/server/chunks/build/error-404-Bf6kdO80.mjs +2 -1
- package/.output/server/chunks/build/error-500-D_bcARXN.mjs +2 -1
- package/.output/server/chunks/build/{index-CckL_NBD.mjs → index-ByZO4Bvq.mjs} +2 -2
- package/.output/server/chunks/build/index-ByZO4Bvq.mjs.map +1 -0
- package/.output/server/chunks/build/{index-QVeSHT3L.mjs → index-ljj9uTXI.mjs} +8 -5
- package/.output/server/chunks/build/index-ljj9uTXI.mjs.map +1 -0
- package/.output/server/chunks/build/nuxt-link-SvT1nf8Z.mjs +1 -1
- package/.output/server/chunks/build/{repo-graph-CTEkxiYd.mjs → repo-graph-EuhMeFt7.mjs} +25 -10
- package/.output/server/chunks/build/repo-graph-EuhMeFt7.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +7 -6
- package/.output/server/chunks/build/styles.mjs +4 -4
- package/.output/server/chunks/build/{usePrd-SqcxGyFU.mjs → usePrd-f7ylhIqs.mjs} +10 -34
- package/.output/server/chunks/build/usePrd-f7ylhIqs.mjs.map +1 -0
- package/.output/server/chunks/nitro/nitro.mjs +1149 -720
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/api/browse.get.mjs +12 -6
- package/.output/server/chunks/routes/api/browse.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +2 -1
- package/.output/server/chunks/routes/api/index.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.post.mjs +3 -2
- package/.output/server/chunks/routes/api/index.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs +11 -13
- package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs +11 -6
- package/.output/server/chunks/routes/api/repos/_repoId/git/diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs +31 -12
- package/.output/server/chunks/routes/api/repos/_repoId/git/file-content.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs +13 -13
- package/.output/server/chunks/routes/api/repos/_repoId/git/file-diff.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs +5 -1
- package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +14 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs +20 -9
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/progress.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs +20 -85
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks/_taskId/commits.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs +20 -9
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/tasks.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs +30 -50
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug_.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs +19 -49
- package/.output/server/chunks/routes/api/repos/_repoId/prds.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs +6 -13
- package/.output/server/chunks/routes/api/repos/_repoId/refresh-git-repos.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs +2 -1
- package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs.map +1 -1
- package/.output/server/chunks/routes/api/runtime.get.mjs +3 -2
- package/.output/server/chunks/routes/api/runtime.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/watch.get.mjs +5 -4
- package/.output/server/chunks/routes/api/watch.get.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs +1 -1
- package/.output/server/index.mjs +3 -2
- package/.output/server/index.mjs.map +1 -1
- package/.output/server/node_modules/zod/index.js +4 -0
- package/.output/server/node_modules/zod/package.json +118 -0
- package/.output/server/node_modules/zod/v3/ZodError.js +133 -0
- package/.output/server/node_modules/zod/v3/errors.js +9 -0
- package/.output/server/node_modules/zod/v3/external.js +6 -0
- package/.output/server/node_modules/zod/v3/helpers/errorUtil.js +6 -0
- package/.output/server/node_modules/zod/v3/helpers/parseUtil.js +109 -0
- package/.output/server/node_modules/zod/v3/helpers/typeAliases.js +1 -0
- package/.output/server/node_modules/zod/v3/helpers/util.js +133 -0
- package/.output/server/node_modules/zod/v3/locales/en.js +109 -0
- package/.output/server/node_modules/zod/v3/types.js +3693 -0
- package/.output/server/package.json +2 -1
- package/README.md +7 -2
- package/dist/host/src/api/prds.js +6 -172
- package/dist/host/src/api/repos.js +3 -16
- package/dist/host/src/api/state.js +7 -2
- package/dist/host/src/executor-runner.js +368 -0
- package/dist/host/src/executor.js +138 -260
- package/dist/host/src/index.js +7 -2
- package/dist/host/src/mcp.js +27 -1
- package/dist/host/src/ui.js +18 -3
- package/dist/server/utils/change-events.js +33 -0
- package/dist/server/utils/git.js +11 -16
- package/dist/server/utils/prd-service.js +235 -0
- package/dist/server/utils/prd-state.js +57 -45
- package/dist/server/utils/repos.js +58 -13
- package/dist/server/utils/state-schema.js +61 -0
- package/dist/server/utils/task-graph.js +2 -2
- package/package.json +2 -1
- package/.output/public/_nuxt/-k8zG74W.js +0 -61
- package/.output/public/_nuxt/B-5VWizU.js +0 -1
- package/.output/public/_nuxt/BMAq0QVD.js +0 -42
- package/.output/public/_nuxt/BPeTf9dd.js +0 -1
- package/.output/public/_nuxt/C2HGkiSP.js +0 -1
- package/.output/public/_nuxt/CVvrkZkq.js +0 -1
- package/.output/public/_nuxt/Detail.CzXXlavD.css +0 -1
- package/.output/public/_nuxt/_prd_.KTotLoF_.css +0 -1
- package/.output/public/_nuxt/builds/meta/c1a7997d-8d53-4718-ad03-a977e05e2523.json +0 -1
- package/.output/public/_nuxt/qt5OEWHC.js +0 -1
- package/.output/public/_nuxt/wbj-mIhK.js +0 -1
- package/.output/server/chunks/build/Detail-DC-KJQ1f.mjs.map +0 -1
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-D0sb4vsK.mjs +0 -4
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-D0sb4vsK.mjs.map +0 -1
- package/.output/server/chunks/build/DiffViewer-styles.CkSjCQ0r.mjs +0 -10
- package/.output/server/chunks/build/DiffViewer-styles.CkSjCQ0r.mjs.map +0 -1
- package/.output/server/chunks/build/DiffViewer-styles.FJJuYjYB.mjs +0 -8
- package/.output/server/chunks/build/DiffViewer-styles.FJJuYjYB.mjs.map +0 -1
- package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs +0 -8
- package/.output/server/chunks/build/Viewer-styles.CshnetGw.mjs.map +0 -1
- package/.output/server/chunks/build/_prd_-C1C4GAhW.mjs.map +0 -1
- package/.output/server/chunks/build/default-DWCOHHTE.mjs.map +0 -1
- package/.output/server/chunks/build/index-CckL_NBD.mjs.map +0 -1
- package/.output/server/chunks/build/index-QVeSHT3L.mjs.map +0 -1
- package/.output/server/chunks/build/repo-graph-CTEkxiYd.mjs.map +0 -1
- package/.output/server/chunks/build/usePrd-SqcxGyFU.mjs.map +0 -1
- package/.output/server/node_modules/shiki/dist/bundle-web.mjs +0 -366
|
@@ -5,11 +5,10 @@ import { Background } from '@vue-flow/background';
|
|
|
5
5
|
import { Controls } from '@vue-flow/controls';
|
|
6
6
|
import { MarkerType, VueFlow, Position, Handle } from '@vue-flow/core';
|
|
7
7
|
import { Loader2, AlertCircle, GitBranch, Circle, Clock3, CheckCircle2, AlertTriangle, Clock, ArrowLeft, Tag, ListOrdered, CheckSquare, Check, Link2, Diff, Calendar, ExternalLink, X, RefreshCw, Keyboard, FileDiff, FileCode, GitCommit, FileText, Plus, Minus, FolderGit2, ArrowRight, FileWarning, ChevronDown, Link, Link2Off, FileEdit, FileX, FilePlus } from 'lucide-vue-next';
|
|
8
|
-
import {
|
|
9
|
-
import { B as Button } from './index-CckL_NBD.mjs';
|
|
8
|
+
import { B as Button } from './index-ByZO4Bvq.mjs';
|
|
10
9
|
import { _ as _export_sfc } from './_plugin-vue_export-helper-1tPrXgE0.mjs';
|
|
11
10
|
import { Primitive, useForwardPropsEmits, DialogRoot, DialogPortal, DialogContent, DialogClose, DialogTitle, DialogDescription, Separator as Separator$1, DialogOverlay, TooltipProvider as TooltipProvider$1, TooltipRoot, TooltipTrigger as TooltipTrigger$1, TooltipPortal, TooltipContent as TooltipContent$1, TooltipArrow, ScrollAreaRoot, ScrollAreaViewport, ScrollAreaCorner, ScrollAreaScrollbar, ScrollAreaThumb, DialogTrigger } from 'reka-ui';
|
|
12
|
-
import { c as cn, b as useToast } from './usePrd-
|
|
11
|
+
import { c as cn, b as useToast } from './usePrd-f7ylhIqs.mjs';
|
|
13
12
|
import { cva } from 'class-variance-authority';
|
|
14
13
|
import { _ as __nuxt_component_0$3 } from './nuxt-link-SvT1nf8Z.mjs';
|
|
15
14
|
|
|
@@ -563,6 +562,8 @@ _sfc_main$k.setup = (props, ctx) => {
|
|
|
563
562
|
};
|
|
564
563
|
const __nuxt_component_0$1 = Object.assign(_sfc_main$k, { __name: "GitChangesMinimap" });
|
|
565
564
|
const LINE_LIMIT = 1e4;
|
|
565
|
+
const MAX_DIFF_HIGHLIGHT_LINES = 1500;
|
|
566
|
+
const MAX_FULL_FILE_HIGHLIGHT_LINES = 4e3;
|
|
566
567
|
const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
567
568
|
__name: "DiffViewer",
|
|
568
569
|
__ssrInlineRender: true,
|
|
@@ -661,6 +662,14 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
661
662
|
const language = computed(() => detectLanguage(props.filePath));
|
|
662
663
|
const highlightedLines = ref(/* @__PURE__ */ new Map());
|
|
663
664
|
const isLoading = ref(true);
|
|
665
|
+
const lineHighlightCache = /* @__PURE__ */ new Map();
|
|
666
|
+
let codeToHtmlLoader = null;
|
|
667
|
+
async function getCodeToHtml() {
|
|
668
|
+
if (!codeToHtmlLoader) {
|
|
669
|
+
codeToHtmlLoader = import('shiki').then((module) => module.codeToHtml);
|
|
670
|
+
}
|
|
671
|
+
return codeToHtmlLoader;
|
|
672
|
+
}
|
|
664
673
|
const displayItems = computed(() => {
|
|
665
674
|
const items = [];
|
|
666
675
|
for (let hunkIndex = 0; hunkIndex < props.hunks.length; hunkIndex++) {
|
|
@@ -747,7 +756,13 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
747
756
|
if (!content.trim()) {
|
|
748
757
|
return "";
|
|
749
758
|
}
|
|
759
|
+
const cacheKey = `${lang}:${content}`;
|
|
760
|
+
const cached = lineHighlightCache.get(cacheKey);
|
|
761
|
+
if (cached !== void 0) {
|
|
762
|
+
return cached;
|
|
763
|
+
}
|
|
750
764
|
try {
|
|
765
|
+
const codeToHtml = await getCodeToHtml();
|
|
751
766
|
const html = await codeToHtml(content, {
|
|
752
767
|
lang,
|
|
753
768
|
themes: {
|
|
@@ -756,16 +771,25 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
756
771
|
}
|
|
757
772
|
});
|
|
758
773
|
const codeMatch = html.match(/<code[^>]*>([\s\S]*?)<\/code>/);
|
|
759
|
-
|
|
774
|
+
const highlighted = codeMatch ? codeMatch[1] || "" : escapeHtml(content);
|
|
775
|
+
lineHighlightCache.set(cacheKey, highlighted);
|
|
776
|
+
return highlighted;
|
|
760
777
|
} catch {
|
|
761
|
-
|
|
778
|
+
const fallback = escapeHtml(content);
|
|
779
|
+
lineHighlightCache.set(cacheKey, fallback);
|
|
780
|
+
return fallback;
|
|
762
781
|
}
|
|
763
782
|
}
|
|
764
783
|
async function highlightFullContent(content, lang) {
|
|
765
784
|
if (!content) {
|
|
766
785
|
return [];
|
|
767
786
|
}
|
|
787
|
+
const lines = content.split("\n");
|
|
788
|
+
if (lines.length > MAX_FULL_FILE_HIGHLIGHT_LINES) {
|
|
789
|
+
return lines.map(escapeHtml);
|
|
790
|
+
}
|
|
768
791
|
try {
|
|
792
|
+
const codeToHtml = await getCodeToHtml();
|
|
769
793
|
const html = await codeToHtml(content, {
|
|
770
794
|
lang,
|
|
771
795
|
themes: {
|
|
@@ -775,12 +799,12 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
775
799
|
});
|
|
776
800
|
const codeMatch = html.match(/<code[^>]*>([\s\S]*?)<\/code>/);
|
|
777
801
|
if (!codeMatch || !codeMatch[1]) {
|
|
778
|
-
return
|
|
802
|
+
return lines.map(escapeHtml);
|
|
779
803
|
}
|
|
780
804
|
const highlightedContent = codeMatch[1];
|
|
781
805
|
return highlightedContent.split("\n");
|
|
782
806
|
} catch {
|
|
783
|
-
return
|
|
807
|
+
return lines.map(escapeHtml);
|
|
784
808
|
}
|
|
785
809
|
}
|
|
786
810
|
function escapeHtml(text) {
|
|
@@ -836,9 +860,14 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
836
860
|
}
|
|
837
861
|
}
|
|
838
862
|
}
|
|
863
|
+
const limitedLines = linesToHighlight.slice(0, MAX_DIFF_HIGHLIGHT_LINES);
|
|
864
|
+
const overflowLines = linesToHighlight.slice(MAX_DIFF_HIGHLIGHT_LINES);
|
|
865
|
+
for (const { key, content } of overflowLines) {
|
|
866
|
+
newHighlighted.set(key, escapeHtml(content));
|
|
867
|
+
}
|
|
839
868
|
const batchSize = 50;
|
|
840
|
-
for (let i = 0; i <
|
|
841
|
-
const batch =
|
|
869
|
+
for (let i = 0; i < limitedLines.length; i += batchSize) {
|
|
870
|
+
const batch = limitedLines.slice(i, i + batchSize);
|
|
842
871
|
const results = await Promise.all(
|
|
843
872
|
batch.map(async ({ key, content }) => {
|
|
844
873
|
const result = await highlightLine(content, lang);
|
|
@@ -862,21 +891,21 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
862
891
|
return "context";
|
|
863
892
|
}
|
|
864
893
|
return (_ctx, _push, _parent, _attrs) => {
|
|
865
|
-
_push(`<div${ssrRenderAttrs(mergeProps({ class: "diff-viewer" }, _attrs))} data-v-
|
|
894
|
+
_push(`<div${ssrRenderAttrs(mergeProps({ class: "diff-viewer" }, _attrs))} data-v-a5da7e6e>`);
|
|
866
895
|
if ((unref(isLoading) || __props.isLoadingContent || unref(isLoadingFullFile)) && !__props.binary) {
|
|
867
|
-
_push(`<div class="flex items-center justify-center py-8" data-v-
|
|
896
|
+
_push(`<div class="flex items-center justify-center py-8" data-v-a5da7e6e><div class="size-6 animate-spin rounded-full border-2 border-primary border-t-transparent" data-v-a5da7e6e></div></div>`);
|
|
868
897
|
} else if (__props.binary) {
|
|
869
|
-
_push(`<div class="flex flex-col items-center justify-center gap-3 py-12 text-muted-foreground" data-v-
|
|
898
|
+
_push(`<div class="flex flex-col items-center justify-center gap-3 py-12 text-muted-foreground" data-v-a5da7e6e>`);
|
|
870
899
|
_push(ssrRenderComponent(unref(FileWarning), { class: "size-10 opacity-50" }, null, _parent));
|
|
871
|
-
_push(`<div class="text-center" data-v-
|
|
900
|
+
_push(`<div class="text-center" data-v-a5da7e6e><p class="font-medium" data-v-a5da7e6e>Binary file</p><p class="text-sm" data-v-a5da7e6e>This file cannot be displayed as a diff</p></div></div>`);
|
|
872
901
|
} else if (unref(isEmpty) && !__props.showFullFile) {
|
|
873
|
-
_push(`<div class="flex flex-col items-center justify-center gap-3 py-12 text-muted-foreground" data-v-
|
|
902
|
+
_push(`<div class="flex flex-col items-center justify-center gap-3 py-12 text-muted-foreground" data-v-a5da7e6e>`);
|
|
874
903
|
_push(ssrRenderComponent(unref(AlertTriangle), { class: "size-10 opacity-50" }, null, _parent));
|
|
875
|
-
_push(`<div class="text-center" data-v-
|
|
904
|
+
_push(`<div class="text-center" data-v-a5da7e6e><p class="font-medium" data-v-a5da7e6e>No changes</p><p class="text-sm" data-v-a5da7e6e>This file was touched but has no content changes</p></div></div>`);
|
|
876
905
|
} else if (unref(isLargeFile) && !unref(showAll) && !__props.showFullFile) {
|
|
877
|
-
_push(`<div class="diff-container" data-v-
|
|
906
|
+
_push(`<div class="diff-container" data-v-a5da7e6e><div class="flex flex-col items-center justify-center gap-3 border-b border-border bg-muted/30 py-6" data-v-a5da7e6e>`);
|
|
878
907
|
_push(ssrRenderComponent(unref(AlertTriangle), { class: "size-8 text-yellow-500" }, null, _parent));
|
|
879
|
-
_push(`<div class="text-center" data-v-
|
|
908
|
+
_push(`<div class="text-center" data-v-a5da7e6e><p class="font-medium" data-v-a5da7e6e>Large file</p><p class="text-sm text-muted-foreground" data-v-a5da7e6e> This file has ${ssrInterpolate(unref(totalLines).toLocaleString())} lines (threshold: ${ssrInterpolate(LINE_LIMIT.toLocaleString())}) </p></div>`);
|
|
880
909
|
_push(ssrRenderComponent(unref(Button), {
|
|
881
910
|
variant: "outline",
|
|
882
911
|
size: "sm",
|
|
@@ -897,15 +926,15 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
897
926
|
}, _parent));
|
|
898
927
|
_push(`</div></div>`);
|
|
899
928
|
} else if (__props.showFullFile && __props.fileContent) {
|
|
900
|
-
_push(`<div class="diff-container" data-v-
|
|
929
|
+
_push(`<div class="diff-container" data-v-a5da7e6e><div class="full-file-view" data-v-a5da7e6e><!--[-->`);
|
|
901
930
|
ssrRenderList(unref(fullFileLines), (line, index) => {
|
|
902
931
|
_push(`<div class="${ssrRenderClass([{
|
|
903
932
|
"diff-add": getFullFileLineType(index + 1) === "add"
|
|
904
|
-
}, "full-file-line"])}" data-v-
|
|
933
|
+
}, "full-file-line"])}" data-v-a5da7e6e><div class="diff-gutter" data-v-a5da7e6e><span class="line-number" data-v-a5da7e6e>${ssrInterpolate(index + 1)}</span></div><div class="diff-content" data-v-a5da7e6e><span class="diff-code" data-v-a5da7e6e>${(unref(highlightedFullFile)[index] || escapeHtml(line)) ?? ""}</span></div></div>`);
|
|
905
934
|
});
|
|
906
935
|
_push(`<!--]--></div></div>`);
|
|
907
936
|
} else {
|
|
908
|
-
_push(`<div class="diff-container" data-v-
|
|
937
|
+
_push(`<div class="diff-container" data-v-a5da7e6e><div class="diff-toolbar" data-v-a5da7e6e>`);
|
|
909
938
|
_push(ssrRenderComponent(unref(Button), {
|
|
910
939
|
variant: "ghost",
|
|
911
940
|
size: "sm",
|
|
@@ -925,25 +954,25 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
925
954
|
}),
|
|
926
955
|
_: 1
|
|
927
956
|
}, _parent));
|
|
928
|
-
_push(`</div><div class="diff-split" data-v-
|
|
957
|
+
_push(`</div><div class="diff-split" data-v-a5da7e6e><div class="diff-column diff-column-left" data-v-a5da7e6e><div class="diff-column-content" data-v-a5da7e6e><!--[-->`);
|
|
929
958
|
ssrRenderList(unref(displayItems), (item) => {
|
|
930
959
|
_push(`<!--[-->`);
|
|
931
960
|
if (item.type === "separator") {
|
|
932
|
-
_push(`<div class="diff-separator-half" data-v-
|
|
961
|
+
_push(`<div class="diff-separator-half" data-v-a5da7e6e><div class="separator-line" data-v-a5da7e6e></div><span class="separator-text" data-v-a5da7e6e>···</span></div>`);
|
|
933
962
|
} else if (item.pair) {
|
|
934
963
|
_push(`<div class="${ssrRenderClass([{
|
|
935
964
|
"diff-remove": item.pair.left.type === "remove",
|
|
936
965
|
"diff-empty": item.pair.left.type === "empty",
|
|
937
966
|
"diff-context": item.pair.left.type === "context"
|
|
938
|
-
}, "diff-line"])}" data-v-
|
|
967
|
+
}, "diff-line"])}" data-v-a5da7e6e><div class="diff-gutter" data-v-a5da7e6e>`);
|
|
939
968
|
if (item.pair.left.lineNum) {
|
|
940
|
-
_push(`<span class="line-number" data-v-
|
|
969
|
+
_push(`<span class="line-number" data-v-a5da7e6e>${ssrInterpolate(item.pair.left.lineNum)}</span>`);
|
|
941
970
|
} else {
|
|
942
971
|
_push(`<!---->`);
|
|
943
972
|
}
|
|
944
|
-
_push(`</div><div class="diff-content" data-v-
|
|
973
|
+
_push(`</div><div class="diff-content" data-v-a5da7e6e>`);
|
|
945
974
|
if (item.pair.left.type !== "empty") {
|
|
946
|
-
_push(`<span class="diff-code" data-v-
|
|
975
|
+
_push(`<span class="diff-code" data-v-a5da7e6e>${(getHighlightedContent(item.pair.id, "old") || escapeHtml(item.pair.left.content)) ?? ""}</span>`);
|
|
947
976
|
} else {
|
|
948
977
|
_push(`<!---->`);
|
|
949
978
|
}
|
|
@@ -953,25 +982,25 @@ const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
|
953
982
|
}
|
|
954
983
|
_push(`<!--]-->`);
|
|
955
984
|
});
|
|
956
|
-
_push(`<!--]--></div></div><div class="diff-column diff-column-right" data-v-
|
|
985
|
+
_push(`<!--]--></div></div><div class="diff-column diff-column-right" data-v-a5da7e6e><div class="diff-column-content" data-v-a5da7e6e><!--[-->`);
|
|
957
986
|
ssrRenderList(unref(displayItems), (item) => {
|
|
958
987
|
_push(`<!--[-->`);
|
|
959
988
|
if (item.type === "separator") {
|
|
960
|
-
_push(`<div class="diff-separator-half" data-v-
|
|
989
|
+
_push(`<div class="diff-separator-half" data-v-a5da7e6e><span class="separator-text" data-v-a5da7e6e>···</span><div class="separator-line" data-v-a5da7e6e></div></div>`);
|
|
961
990
|
} else if (item.pair) {
|
|
962
991
|
_push(`<div class="${ssrRenderClass([{
|
|
963
992
|
"diff-add": item.pair.right.type === "add",
|
|
964
993
|
"diff-empty": item.pair.right.type === "empty",
|
|
965
994
|
"diff-context": item.pair.right.type === "context"
|
|
966
|
-
}, "diff-line"])}" data-v-
|
|
995
|
+
}, "diff-line"])}" data-v-a5da7e6e><div class="diff-gutter" data-v-a5da7e6e>`);
|
|
967
996
|
if (item.pair.right.lineNum) {
|
|
968
|
-
_push(`<span class="line-number" data-v-
|
|
997
|
+
_push(`<span class="line-number" data-v-a5da7e6e>${ssrInterpolate(item.pair.right.lineNum)}</span>`);
|
|
969
998
|
} else {
|
|
970
999
|
_push(`<!---->`);
|
|
971
1000
|
}
|
|
972
|
-
_push(`</div><div class="diff-content" data-v-
|
|
1001
|
+
_push(`</div><div class="diff-content" data-v-a5da7e6e>`);
|
|
973
1002
|
if (item.pair.right.type !== "empty") {
|
|
974
|
-
_push(`<span class="diff-code" data-v-
|
|
1003
|
+
_push(`<span class="diff-code" data-v-a5da7e6e>${(getHighlightedContent(item.pair.id, "new") || escapeHtml(item.pair.right.content)) ?? ""}</span>`);
|
|
975
1004
|
} else {
|
|
976
1005
|
_push(`<!---->`);
|
|
977
1006
|
}
|
|
@@ -993,7 +1022,7 @@ _sfc_main$j.setup = (props, ctx) => {
|
|
|
993
1022
|
(ssrContext.modules || (ssrContext.modules = /* @__PURE__ */ new Set())).add("components/git/DiffViewer.vue");
|
|
994
1023
|
return _sfc_setup$j ? _sfc_setup$j(props, ctx) : void 0;
|
|
995
1024
|
};
|
|
996
|
-
const __nuxt_component_1$2 = /* @__PURE__ */ Object.assign(_export_sfc(_sfc_main$j, [["__scopeId", "data-v-
|
|
1025
|
+
const __nuxt_component_1$2 = /* @__PURE__ */ Object.assign(_export_sfc(_sfc_main$j, [["__scopeId", "data-v-a5da7e6e"]]), { __name: "GitDiffViewer" });
|
|
997
1026
|
const _sfc_main$i = /* @__PURE__ */ defineComponent({
|
|
998
1027
|
__name: "ScrollBar",
|
|
999
1028
|
__ssrInlineRender: true,
|
|
@@ -3445,4 +3474,4 @@ _sfc_main.setup = (props, ctx) => {
|
|
|
3445
3474
|
const __nuxt_component_1 = Object.assign(_sfc_main, { __name: "TasksDetail" });
|
|
3446
3475
|
|
|
3447
3476
|
export { Badge as B, __nuxt_component_0$2 as _, __nuxt_component_1 as a };
|
|
3448
|
-
//# sourceMappingURL=Detail-
|
|
3477
|
+
//# sourceMappingURL=Detail-MGwP_u2d.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Detail-MGwP_u2d.mjs","sources":["../../../../node_modules/@dagrejs/dagre/dist/dagre.esm.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Detail-MGwP_u2d.js"],"names":[],"mappings":"","x_google_ignoreList":[0,1]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const DiffViewer_vue_vue_type_style_index_0_scoped_a5da7e6e_lang = ".diff-viewer[data-v-a5da7e6e]{color:hsl(var(--foreground));font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,Monaco,Consolas,monospace;font-size:.8125rem;line-height:1.5}.diff-container[data-v-a5da7e6e]{overflow-x:auto}.diff-toolbar[data-v-a5da7e6e]{background:hsl(var(--muted)/.3);border-bottom:1px solid hsl(var(--border));display:flex;justify-content:flex-end;padding:.25rem .5rem}.diff-split[data-v-a5da7e6e]{display:flex;min-width:100%}.diff-column[data-v-a5da7e6e]{flex:1;min-width:0;overflow-x:auto}.diff-column-left[data-v-a5da7e6e]{border-right:1px solid hsl(var(--border))}.diff-column-content[data-v-a5da7e6e]{min-width:-moz-fit-content;min-width:fit-content}.diff-line[data-v-a5da7e6e]{display:flex}.diff-gutter[data-v-a5da7e6e]{background:hsl(var(--muted)/.3);color:hsl(var(--muted-foreground));flex-shrink:0;padding:0 .5rem;text-align:right;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:3.5rem}.line-number[data-v-a5da7e6e]{display:inline-block;min-width:2rem;opacity:.7}.diff-content[data-v-a5da7e6e]{color:hsl(var(--foreground));flex:1;min-width:0;padding:0 .5rem;white-space:pre}.diff-code[data-v-a5da7e6e]{color:inherit;display:inline}.diff-add[data-v-a5da7e6e]{background:#16a24926}.diff-add .diff-gutter[data-v-a5da7e6e]{background:#16a24940}.diff-remove[data-v-a5da7e6e]{background:#ef434326}.diff-remove .diff-gutter[data-v-a5da7e6e]{background:#ef434340}.diff-empty[data-v-a5da7e6e]{background:hsl(var(--muted)/.2)}.diff-empty .diff-gutter[data-v-a5da7e6e]{background:hsl(var(--muted)/.3)}.diff-context[data-v-a5da7e6e]{background:transparent}.full-file-view[data-v-a5da7e6e]{min-width:100%}.full-file-line[data-v-a5da7e6e]{display:flex}.full-file-line .diff-gutter[data-v-a5da7e6e]{width:4rem}.full-file-line.diff-add[data-v-a5da7e6e]{background:#16a24926}.full-file-line.diff-add .diff-gutter[data-v-a5da7e6e]{background:#16a24940}.dark .full-file-line.diff-add[data-v-a5da7e6e]{background:#16a2491a}.dark .full-file-line.diff-add .diff-gutter[data-v-a5da7e6e]{background:#16a24933}.diff-separator[data-v-a5da7e6e],.diff-separator-half[data-v-a5da7e6e]{align-items:center;background:hsl(var(--muted)/.4);display:flex;padding:.25rem 0}.separator-line[data-v-a5da7e6e]{background:hsl(var(--border));flex:1;height:1px}.separator-text[data-v-a5da7e6e]{color:hsl(var(--muted-foreground));font-size:.75rem;padding:0 .75rem}.dark .diff-add[data-v-a5da7e6e]{background:#16a2491a}.dark .diff-add .diff-gutter[data-v-a5da7e6e]{background:#16a24933}.dark .diff-remove[data-v-a5da7e6e]{background:#ef43431a}.dark .diff-remove .diff-gutter[data-v-a5da7e6e]{background:#ef434333}[data-v-a5da7e6e] .shiki span,[data-v-a5da7e6e] .shiki{background:transparent!important}";
|
|
2
|
+
|
|
3
|
+
export { DiffViewer_vue_vue_type_style_index_0_scoped_a5da7e6e_lang as D };
|
|
4
|
+
//# sourceMappingURL=DiffViewer-styles-1.mjs-BFsE2PCW.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffViewer-styles-1.mjs-BFsE2PCW.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/DiffViewer-styles-1.mjs-BFsE2PCW.js"],"names":[],"mappings":"","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { D as DiffViewer_vue_vue_type_style_index_0_scoped_a5da7e6e_lang } from './DiffViewer-styles-1.mjs-BFsE2PCW.mjs';
|
|
2
|
+
|
|
3
|
+
const DiffViewerStyles_D2bqX3nK = [
|
|
4
|
+
DiffViewer_vue_vue_type_style_index_0_scoped_a5da7e6e_lang
|
|
5
|
+
];
|
|
6
|
+
|
|
7
|
+
export { DiffViewerStyles_D2bqX3nK as default };
|
|
8
|
+
//# sourceMappingURL=DiffViewer-styles.D2bqX3nK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffViewer-styles.D2bqX3nK.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/DiffViewer-styles.D2bqX3nK.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { D as DiffViewer_vue_vue_type_style_index_0_scoped_a5da7e6e_lang } from './DiffViewer-styles-1.mjs-BFsE2PCW.mjs';
|
|
2
|
+
import { D as DiffViewer_vue_vue_type_style_index_1_lang } from './DiffViewer-styles-2.mjs-X6QKNjM0.mjs';
|
|
3
|
+
|
|
4
|
+
const DiffViewerStyles_FoV36wuV = [
|
|
5
|
+
DiffViewer_vue_vue_type_style_index_0_scoped_a5da7e6e_lang,
|
|
6
|
+
DiffViewer_vue_vue_type_style_index_1_lang
|
|
7
|
+
];
|
|
8
|
+
|
|
9
|
+
export { DiffViewerStyles_FoV36wuV as default };
|
|
10
|
+
//# sourceMappingURL=DiffViewer-styles.FoV36wuV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiffViewer-styles.FoV36wuV.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/DiffViewer-styles.FoV36wuV.mjs"],"names":["style_0","style_1"],"mappings":"","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const Viewer_vue_vue_type_style_index_0_lang = ".prd-viewer .prose{--tw-prose-body:var(--foreground);--tw-prose-headings:var(--foreground);--tw-prose-links:var(--primary);--tw-prose-code:var(--foreground);--tw-prose-pre-bg:var(--muted);--tw-prose-quotes:var(--muted-foreground);--tw-prose-hr:var(--border)}.prd-viewer .prose h1,.prd-viewer .prose h2,.prd-viewer .prose h3,.prd-viewer .prose h4{font-weight:600;margin-bottom:.5em;margin-top:1.5em}.prd-viewer .prose h1{border-bottom:1px solid var(--border);font-size:1.875rem;padding-bottom:.5rem}.prd-viewer .prose h2{border-bottom:1px solid var(--border);font-size:1.5rem;padding-bottom:.25rem}.prd-viewer .prose h3{font-size:1.25rem}.prd-viewer .prose p{line-height:1.7;margin-bottom:.75em;margin-top:.75em}.prd-viewer .prose a{color:var(--primary);text-decoration:underline;text-underline-offset:2px}.prd-viewer .prose a:hover{opacity:.8}.prd-viewer .prose code:not(pre code){background:var(--muted);border-radius:.25rem;font-size:.875em;font-weight:500;padding:.125rem .375rem}.prd-viewer .prose pre{background:var(--muted);border-radius:.5rem;margin:1rem 0;overflow-x:auto;padding:1rem}.prd-viewer .prose pre.shiki{background-color:var(--muted)!important}.prd-viewer .prose .shiki code{background:transparent;font-size:.875rem;line-height:1.5;padding:0}.dark .prd-viewer .prose .shiki,.dark .prd-viewer .prose pre.shiki{background-color:var(--muted)!important}.dark .prd-viewer .prose .shiki.github-light,.light .prd-viewer .prose .shiki.github-dark,:not(.dark) .prd-viewer .prose .shiki.github-dark{display:none!important}.prd-viewer .prose table{border-collapse:collapse;margin:1rem 0;width:100%}.prd-viewer .prose td,.prd-viewer .prose th{border:1px solid var(--border);padding:.5rem .75rem;text-align:left}.prd-viewer .prose th{background:var(--muted);font-weight:600}.prd-viewer .prose tr:nth-child(2n){background:color-mix(in oklch,var(--muted) 30%,transparent)}.prd-viewer .prose ol,.prd-viewer .prose ul{margin:.75em 0;padding-left:1.5rem}.prd-viewer .prose li{margin:.25em 0}.prd-viewer .prose ul{list-style-type:disc}.prd-viewer .prose ol{list-style-type:decimal}.prd-viewer .prose input[type=checkbox]{margin-right:.5rem;pointer-events:none}.prd-viewer .prose blockquote{border-left:4px solid var(--border);color:var(--muted-foreground);font-style:italic;margin:1rem 0;padding-left:1rem}.prd-viewer .prose hr{border:none;border-top:1px solid var(--border);margin:2rem 0}.prd-viewer .prose img{border-radius:.5rem;height:auto;margin:1rem 0;max-width:100%}";
|
|
2
|
+
|
|
3
|
+
const ViewerStyles_D6wYWFb1 = [
|
|
4
|
+
Viewer_vue_vue_type_style_index_0_lang
|
|
5
|
+
];
|
|
6
|
+
|
|
7
|
+
export { ViewerStyles_D6wYWFb1 as default };
|
|
8
|
+
//# sourceMappingURL=Viewer-styles.D6wYWFb1.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Viewer-styles.D6wYWFb1.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Viewer-styles-1.mjs-D92u4Pso.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Viewer-styles.D6wYWFb1.mjs"],"names":["style_0"],"mappings":"","x_google_ignoreList":[0,1]}
|
|
@@ -2,15 +2,15 @@ import { _ as __nuxt_component_0$2 } from './nuxt-link-SvT1nf8Z.mjs';
|
|
|
2
2
|
import { defineComponent, computed, ref, watch, inject, mergeProps, unref, withCtx, createVNode, createTextVNode, isRef, openBlock, createBlock, toDisplayString, createCommentVNode, renderSlot, resolveDynamicComponent, useSSRContext } from 'vue';
|
|
3
3
|
import { ssrRenderAttrs, ssrRenderComponent, ssrInterpolate, ssrRenderAttr, ssrRenderSlot, ssrRenderList, ssrRenderClass, ssrRenderVNode } from 'vue/server-renderer';
|
|
4
4
|
import { Loader2, AlertCircle, RefreshCw, FileText, LayoutGrid, GitBranch, User, Calendar, CircleDot, ExternalLink, Circle, CheckCircle2, PlayCircle, Minus, ArrowDown, ArrowUp } from 'lucide-vue-next';
|
|
5
|
-
import { _ as __nuxt_component_0$2$1, a as __nuxt_component_1$1, B as Badge } from './Detail-
|
|
5
|
+
import { _ as __nuxt_component_0$2$1, a as __nuxt_component_1$1, B as Badge } from './Detail-MGwP_u2d.mjs';
|
|
6
6
|
import { marked } from 'marked';
|
|
7
7
|
import { codeToHtml } from 'shiki';
|
|
8
8
|
import DOMPurify from 'dompurify';
|
|
9
|
-
import { u as useRepos, a as usePrd, b as useToast, c as cn } from './usePrd-
|
|
9
|
+
import { u as useRepos, a as usePrd, b as useToast, c as cn } from './usePrd-f7ylhIqs.mjs';
|
|
10
10
|
import { _ as _export_sfc } from './_plugin-vue_export-helper-1tPrXgE0.mjs';
|
|
11
11
|
import { reactiveOmit } from '@vueuse/core';
|
|
12
12
|
import { useForwardPropsEmits, TabsRoot, TabsList as TabsList$1, useForwardProps, TabsTrigger as TabsTrigger$1, TabsContent as TabsContent$1 } from 'reka-ui';
|
|
13
|
-
import { B as Button } from './index-
|
|
13
|
+
import { B as Button } from './index-ByZO4Bvq.mjs';
|
|
14
14
|
import { b as useRoute, a as useRouter } from './server.mjs';
|
|
15
15
|
import '../nitro/nitro.mjs';
|
|
16
16
|
import 'node:http';
|
|
@@ -20,12 +20,12 @@ import 'node:buffer';
|
|
|
20
20
|
import 'node:fs';
|
|
21
21
|
import 'node:path';
|
|
22
22
|
import 'node:crypto';
|
|
23
|
-
import 'node:os';
|
|
24
23
|
import 'node:url';
|
|
24
|
+
import 'node:os';
|
|
25
|
+
import 'zod';
|
|
25
26
|
import '@vue-flow/background';
|
|
26
27
|
import '@vue-flow/controls';
|
|
27
28
|
import '@vue-flow/core';
|
|
28
|
-
import 'shiki/bundle/web';
|
|
29
29
|
import 'class-variance-authority';
|
|
30
30
|
import 'clsx';
|
|
31
31
|
import 'tailwind-merge';
|
|
@@ -184,13 +184,16 @@ const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
|
184
184
|
return DOMPurify.sanitize(html, purifyConfig);
|
|
185
185
|
}
|
|
186
186
|
watch(() => props.content, async (newContent) => {
|
|
187
|
-
if (newContent) {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
187
|
+
if (!newContent) {
|
|
188
|
+
renderedHtml.value = "";
|
|
189
|
+
isLoading.value = false;
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
isLoading.value = true;
|
|
193
|
+
try {
|
|
194
|
+
renderedHtml.value = await renderMarkdown(newContent);
|
|
195
|
+
} finally {
|
|
196
|
+
isLoading.value = false;
|
|
194
197
|
}
|
|
195
198
|
}, { immediate: true });
|
|
196
199
|
return (_ctx, _push, _parent, _attrs) => {
|
|
@@ -904,6 +907,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
904
907
|
}
|
|
905
908
|
return null;
|
|
906
909
|
}
|
|
910
|
+
function getStatusCode(error2) {
|
|
911
|
+
const fetchError = error2;
|
|
912
|
+
return fetchError.statusCode ?? fetchError.status;
|
|
913
|
+
}
|
|
914
|
+
function getErrorMessage(error2, fallback) {
|
|
915
|
+
const fetchError = error2;
|
|
916
|
+
return fetchError.data?.message || fetchError.statusMessage || fetchError.message || fallback;
|
|
917
|
+
}
|
|
907
918
|
const route = useRoute();
|
|
908
919
|
const router = useRouter();
|
|
909
920
|
const { selectRepo } = useRepos();
|
|
@@ -955,9 +966,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
955
966
|
if (Object.prototype.hasOwnProperty.call(tasksByPrd.value, slug)) {
|
|
956
967
|
return tasksByPrd.value[slug] ?? null;
|
|
957
968
|
}
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
969
|
+
try {
|
|
970
|
+
const tasks = await fetchTasks(slug);
|
|
971
|
+
cacheTasksForPrd(slug, tasks);
|
|
972
|
+
return tasks;
|
|
973
|
+
} catch (error2) {
|
|
974
|
+
showError("Failed to load tasks", getErrorMessage(error2, `Could not load tasks for ${slug}.`));
|
|
975
|
+
return null;
|
|
976
|
+
}
|
|
961
977
|
}
|
|
962
978
|
function buildBaseQuery() {
|
|
963
979
|
const query = {};
|
|
@@ -999,7 +1015,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
999
1015
|
detailOpen.value = true;
|
|
1000
1016
|
selectedTaskCommits.value = [];
|
|
1001
1017
|
await syncTaskQuery(task.id, sourcePrdSlug);
|
|
1002
|
-
|
|
1018
|
+
try {
|
|
1019
|
+
selectedTaskCommits.value = await fetchTaskCommits(sourcePrdSlug, task.id);
|
|
1020
|
+
} catch (error2) {
|
|
1021
|
+
selectedTaskCommits.value = [];
|
|
1022
|
+
showError("Failed to load commits", getErrorMessage(error2, "Could not resolve commits for this task."));
|
|
1023
|
+
}
|
|
1003
1024
|
}
|
|
1004
1025
|
async function syncTaskDetailFromRoute() {
|
|
1005
1026
|
const selection = routeTaskSelection.value;
|
|
@@ -1026,7 +1047,12 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1026
1047
|
selectedTaskPrdSlug.value = selection.prdSlug;
|
|
1027
1048
|
detailOpen.value = true;
|
|
1028
1049
|
if (!isSameTask) {
|
|
1029
|
-
|
|
1050
|
+
try {
|
|
1051
|
+
selectedTaskCommits.value = await fetchTaskCommits(selection.prdSlug, task.id);
|
|
1052
|
+
} catch (error2) {
|
|
1053
|
+
selectedTaskCommits.value = [];
|
|
1054
|
+
showError("Failed to load commits", getErrorMessage(error2, "Could not resolve commits for this task."));
|
|
1055
|
+
}
|
|
1030
1056
|
}
|
|
1031
1057
|
}
|
|
1032
1058
|
const taskTitles = computed(() => {
|
|
@@ -1045,19 +1071,33 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1045
1071
|
});
|
|
1046
1072
|
const fileChangeEvent = inject("fileChangeEvent", ref(null));
|
|
1047
1073
|
async function loadDocument() {
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1074
|
+
try {
|
|
1075
|
+
const doc = await fetchDocument(prdSlug.value);
|
|
1076
|
+
if (doc) {
|
|
1077
|
+
document.value = doc;
|
|
1078
|
+
error.value = null;
|
|
1079
|
+
}
|
|
1080
|
+
} catch (err) {
|
|
1081
|
+
const statusCode = getStatusCode(err);
|
|
1082
|
+
if (statusCode === 404) {
|
|
1083
|
+
error.value = `PRD "${prdSlug.value}" not found in this repository.`;
|
|
1084
|
+
return;
|
|
1085
|
+
}
|
|
1086
|
+
showError("Failed to reload PRD", getErrorMessage(err, "Could not refresh the PRD document."));
|
|
1051
1087
|
}
|
|
1052
1088
|
}
|
|
1053
1089
|
async function loadTasksAndProgress() {
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1090
|
+
try {
|
|
1091
|
+
const [tasks, progress] = await Promise.all([
|
|
1092
|
+
fetchTasks(prdSlug.value),
|
|
1093
|
+
fetchProgress(prdSlug.value)
|
|
1094
|
+
]);
|
|
1095
|
+
tasksFile.value = tasks;
|
|
1096
|
+
progressFile.value = progress;
|
|
1097
|
+
cacheTasksForPrd(prdSlug.value, tasks);
|
|
1098
|
+
} catch (err) {
|
|
1099
|
+
showError("Failed to refresh task state", getErrorMessage(err, "Could not refresh tasks and progress."));
|
|
1100
|
+
}
|
|
1061
1101
|
}
|
|
1062
1102
|
async function loadGraph(force = false) {
|
|
1063
1103
|
graphLoading.value = true;
|
|
@@ -1072,6 +1112,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1072
1112
|
}
|
|
1073
1113
|
prdGraph.value = graph;
|
|
1074
1114
|
graphError.value = null;
|
|
1115
|
+
} catch (err) {
|
|
1116
|
+
graphError.value = getErrorMessage(err, "Failed to load PRD graph.");
|
|
1075
1117
|
} finally {
|
|
1076
1118
|
graphLoading.value = false;
|
|
1077
1119
|
}
|
|
@@ -1109,15 +1151,15 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
1109
1151
|
await ensureGraphLoaded();
|
|
1110
1152
|
await syncTaskDetailFromRoute();
|
|
1111
1153
|
} catch (err) {
|
|
1112
|
-
const
|
|
1113
|
-
if (
|
|
1154
|
+
const statusCode = getStatusCode(err);
|
|
1155
|
+
if (statusCode === 404) {
|
|
1114
1156
|
error.value = `PRD "${prdSlug.value}" not found. Check if the file exists in docs/prd/.`;
|
|
1115
|
-
} else if (
|
|
1157
|
+
} else if (statusCode === 500) {
|
|
1116
1158
|
error.value = "Server error while loading the PRD. Check the file format.";
|
|
1117
|
-
showError("Server error",
|
|
1159
|
+
showError("Server error", getErrorMessage(err, "Failed to read PRD file"));
|
|
1118
1160
|
} else {
|
|
1119
1161
|
error.value = "Failed to load PRD document. Please try again.";
|
|
1120
|
-
showError("Load failed", "Could not fetch the PRD document");
|
|
1162
|
+
showError("Load failed", getErrorMessage(err, "Could not fetch the PRD document"));
|
|
1121
1163
|
}
|
|
1122
1164
|
} finally {
|
|
1123
1165
|
isLoading.value = false;
|
|
@@ -1593,4 +1635,4 @@ _sfc_main.setup = (props, ctx) => {
|
|
|
1593
1635
|
};
|
|
1594
1636
|
|
|
1595
1637
|
export { _sfc_main as default };
|
|
1596
|
-
//# sourceMappingURL=_prd_-
|
|
1638
|
+
//# sourceMappingURL=_prd_-C-Aj4fVa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_prd_-C-Aj4fVa.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_prd_-C-Aj4fVa.js"],"names":["__nuxt_component_0$3"],"mappings":"","x_google_ignoreList":[0]}
|