@thxgg/steward 0.1.19 → 0.1.21
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{CCruYste.js → B3PShd4B.js} +1 -1
- package/.output/public/_nuxt/{C9jB6HQI.js → B7kcsnX1.js} +1 -1
- package/.output/public/_nuxt/{CIIE0-WR.js → B9j1BHt9.js} +1 -1
- package/.output/public/_nuxt/{xc3v2JZH.js → BGSfDLaX.js} +1 -1
- package/.output/public/_nuxt/{BfV4oCiT.js → BTHAQvnA.js} +1 -1
- package/.output/public/_nuxt/{f7vKgp5U.js → C2LWefrW.js} +1 -1
- package/.output/public/_nuxt/{DddVAa3N.js → CV5HFGKm.js} +1 -1
- package/.output/public/_nuxt/{Bs6UO7IT.js → ClxxfTZn.js} +1 -1
- package/.output/public/_nuxt/{DEekox9p.js → CzCDTesu.js} +1 -1
- package/.output/public/_nuxt/{D30YtxUg.js → D6aZT905.js} +1 -1
- package/.output/public/_nuxt/{MO41rxll.js → D9fz0wy8.js} +1 -1
- package/.output/public/_nuxt/{BfUfZSFp.js → DDV2bymk.js} +1 -1
- package/.output/public/_nuxt/{C9AsKFSQ.js → DK5VWQk7.js} +1 -1
- package/.output/public/_nuxt/{D2RLSKEu.js → DSqaInP-.js} +1 -1
- package/.output/public/_nuxt/Detail.CYc96mGf.css +1 -0
- package/.output/public/_nuxt/{BCiXS3ZV.js → Dn6yoG20.js} +2 -2
- package/.output/public/_nuxt/{Cg4hnDua.js → a87LfEfa.js} +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/c98d132b-2ccd-4cf3-88e6-4f203447e539.json +1 -0
- package/.output/public/_nuxt/zhOijcjw.js +30 -0
- package/.output/server/chunks/_/git-api.mjs +10 -23
- package/.output/server/chunks/_/git-api.mjs.map +1 -1
- package/.output/server/chunks/_/prd-service.mjs +1 -3
- package/.output/server/chunks/_/prd-service.mjs.map +1 -1
- package/.output/server/chunks/_/watcher.mjs +1 -2
- package/.output/server/chunks/_/watcher.mjs.map +1 -1
- package/.output/server/chunks/build/{Detail-BcQGdJY5.mjs → Detail-B7yBNjgp.mjs} +321 -136
- package/.output/server/chunks/build/Detail-B7yBNjgp.mjs.map +1 -0
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-d2dQvARr.mjs +4 -0
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-d2dQvARr.mjs.map +1 -0
- package/.output/server/chunks/build/DiffViewer-styles.BDwAqkTk.mjs +8 -0
- package/.output/server/chunks/build/DiffViewer-styles.BDwAqkTk.mjs.map +1 -0
- package/.output/server/chunks/build/DiffViewer-styles.DRJh5Ui4.mjs +10 -0
- package/.output/server/chunks/build/DiffViewer-styles.DRJh5Ui4.mjs.map +1 -0
- package/.output/server/chunks/build/{_prd_-CD_Bds_B.mjs → _prd_-DY25apyl.mjs} +4 -3
- package/.output/server/chunks/build/_prd_-DY25apyl.mjs.map +1 -0
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/default-BKKgG7HJ.mjs +2 -1
- 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-DE1tjHAd.mjs +2 -1
- package/.output/server/chunks/build/nuxt-link-SvT1nf8Z.mjs +1 -1
- package/.output/server/chunks/build/{repo-graph-CBfhpnd5.mjs → repo-graph-CUcJKW1F.mjs} +4 -3
- package/.output/server/chunks/build/repo-graph-CUcJKW1F.mjs.map +1 -0
- package/.output/server/chunks/build/server.mjs +5 -4
- package/.output/server/chunks/build/styles.mjs +4 -4
- package/.output/server/chunks/build/usePrd-hXZOmvAv.mjs +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +1514 -694
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/api/browse.get.mjs +1 -0
- package/.output/server/chunks/routes/api/browse.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/index.get.mjs +3 -3
- package/.output/server/chunks/routes/api/index.post.mjs +2 -2
- package/.output/server/chunks/routes/api/repos/_repoId/git/commits.get.mjs +3 -5
- 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 +3 -5
- 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 +3 -5
- 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 +3 -5
- 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 +3 -5
- package/.output/server/chunks/routes/api/repos/_repoId/graph.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/archive.post.mjs +2 -4
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/archive.post.mjs.map +1 -1
- package/.output/server/chunks/routes/api/repos/_repoId/prd/_prdSlug/graph.get.mjs +3 -5
- 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 +3 -5
- 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 +3 -5
- 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 +3 -5
- 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 +3 -5
- 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 +3 -5
- 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 +3 -3
- package/.output/server/chunks/routes/api/repos/_repoId_.delete.mjs +3 -3
- 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/state-migration/status.get.mjs +3 -2
- package/.output/server/chunks/routes/api/state-migration/status.get.mjs.map +1 -1
- package/.output/server/chunks/routes/api/watch.get.mjs +3 -3
- 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/package.json +1 -1
- package/dist/app/lib/async-request.js +39 -0
- package/dist/host/src/api/git.js +14 -7
- package/dist/server/utils/git-repo-path.js +63 -0
- package/dist/server/utils/git.js +26 -9
- package/dist/server/utils/state-migration.js +206 -0
- package/package.json +1 -1
- package/.output/public/_nuxt/CwdD8083.js +0 -30
- package/.output/public/_nuxt/Detail.DSyVQNdr.css +0 -1
- package/.output/public/_nuxt/builds/meta/627332c0-2e14-4849-8cac-e350f64ed513.json +0 -1
- package/.output/server/chunks/_/git.mjs +0 -296
- package/.output/server/chunks/_/git.mjs.map +0 -1
- package/.output/server/chunks/_/repos.mjs +0 -272
- package/.output/server/chunks/_/repos.mjs.map +0 -1
- package/.output/server/chunks/build/Detail-BcQGdJY5.mjs.map +0 -1
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs +0 -4
- package/.output/server/chunks/build/DiffViewer-styles-1.mjs-BFsE2PCW.mjs.map +0 -1
- package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs +0 -8
- package/.output/server/chunks/build/DiffViewer-styles.D2bqX3nK.mjs.map +0 -1
- package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs +0 -10
- package/.output/server/chunks/build/DiffViewer-styles.FoV36wuV.mjs.map +0 -1
- package/.output/server/chunks/build/_prd_-CD_Bds_B.mjs.map +0 -1
- package/.output/server/chunks/build/repo-graph-CBfhpnd5.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.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}html.dark .diff-viewer span[style*=--shiki-dark]{background-color:transparent!important;color:var(--shiki-dark)!important}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"id":"627332c0-2e14-4849-8cac-e350f64ed513","timestamp":1772044179936,"prerendered":[]}
|
|
@@ -1,296 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { resolve, isAbsolute, relative, join } from 'node:path';
|
|
3
|
-
|
|
4
|
-
async function execGit(repoPath, args) {
|
|
5
|
-
return new Promise((resolve2, reject) => {
|
|
6
|
-
const proc = spawn("git", args, {
|
|
7
|
-
cwd: repoPath,
|
|
8
|
-
env: { ...process.env, GIT_TERMINAL_PROMPT: "0" }
|
|
9
|
-
});
|
|
10
|
-
let stdout = "";
|
|
11
|
-
let stderr = "";
|
|
12
|
-
proc.stdout.on("data", (data) => {
|
|
13
|
-
stdout += data.toString();
|
|
14
|
-
});
|
|
15
|
-
proc.stderr.on("data", (data) => {
|
|
16
|
-
stderr += data.toString();
|
|
17
|
-
});
|
|
18
|
-
proc.on("close", (code) => {
|
|
19
|
-
if (code === 0) {
|
|
20
|
-
resolve2(stdout);
|
|
21
|
-
} else {
|
|
22
|
-
reject(new Error(stderr || `git exited with code ${code}`));
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
proc.on("error", (err) => {
|
|
26
|
-
reject(new Error(`Failed to spawn git: ${err.message}`));
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
async function isGitRepo(path) {
|
|
31
|
-
try {
|
|
32
|
-
await execGit(path, ["rev-parse", "--git-dir"]);
|
|
33
|
-
return true;
|
|
34
|
-
} catch {
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
function validatePathInRepo(repoPath, filePath) {
|
|
39
|
-
const resolvedRepo = resolve(repoPath);
|
|
40
|
-
const resolvedFile = isAbsolute(filePath) ? resolve(filePath) : resolve(repoPath, filePath);
|
|
41
|
-
const relativePath = relative(resolvedRepo, resolvedFile);
|
|
42
|
-
return !relativePath.startsWith("..") && !isAbsolute(relativePath);
|
|
43
|
-
}
|
|
44
|
-
async function getCommitInfo(repoPath, sha) {
|
|
45
|
-
if (!/^[0-9a-f]{4,40}$/i.test(sha)) {
|
|
46
|
-
throw new Error(`Invalid commit SHA: ${sha}`);
|
|
47
|
-
}
|
|
48
|
-
const format = "%H%n%h%n%s%n%an%n%aI";
|
|
49
|
-
const output = await execGit(repoPath, ["show", sha, "--format=" + format, "--no-patch"]);
|
|
50
|
-
const lines = output.trim().split("\n");
|
|
51
|
-
if (lines.length < 5) {
|
|
52
|
-
throw new Error(`Failed to parse commit info for ${sha}`);
|
|
53
|
-
}
|
|
54
|
-
const statsOutput = await execGit(repoPath, ["show", sha, "--format=", "--numstat"]);
|
|
55
|
-
const statsLines = statsOutput.trim().split("\n").filter((l) => l.trim());
|
|
56
|
-
let additions = 0;
|
|
57
|
-
let deletions = 0;
|
|
58
|
-
let filesChanged = 0;
|
|
59
|
-
for (const line of statsLines) {
|
|
60
|
-
const parts = line.split(" ");
|
|
61
|
-
const added = parts[0];
|
|
62
|
-
const deleted = parts[1];
|
|
63
|
-
if (added && deleted && added !== "-" && deleted !== "-") {
|
|
64
|
-
additions += parseInt(added, 10) || 0;
|
|
65
|
-
deletions += parseInt(deleted, 10) || 0;
|
|
66
|
-
}
|
|
67
|
-
filesChanged++;
|
|
68
|
-
}
|
|
69
|
-
return {
|
|
70
|
-
sha: lines[0],
|
|
71
|
-
shortSha: lines[1],
|
|
72
|
-
message: lines[2],
|
|
73
|
-
author: lines[3],
|
|
74
|
-
date: lines[4],
|
|
75
|
-
filesChanged,
|
|
76
|
-
additions,
|
|
77
|
-
deletions
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
async function getCommitDiff(repoPath, sha) {
|
|
81
|
-
if (!/^[0-9a-f]{4,40}$/i.test(sha)) {
|
|
82
|
-
throw new Error(`Invalid commit SHA: ${sha}`);
|
|
83
|
-
}
|
|
84
|
-
const numstatOutput = await execGit(repoPath, ["show", sha, "--format=", "--numstat"]);
|
|
85
|
-
const nameStatusOutput = await execGit(repoPath, ["show", sha, "--format=", "--name-status"]);
|
|
86
|
-
const numstatLines = numstatOutput.trim().split("\n").filter((l) => l.trim());
|
|
87
|
-
const nameStatusLines = nameStatusOutput.trim().split("\n").filter((l) => l.trim());
|
|
88
|
-
const files = [];
|
|
89
|
-
const statsMap = /* @__PURE__ */ new Map();
|
|
90
|
-
for (const line of numstatLines) {
|
|
91
|
-
const parts = line.split(" ");
|
|
92
|
-
if (parts.length >= 3) {
|
|
93
|
-
const added = parts[0];
|
|
94
|
-
const deleted = parts[1];
|
|
95
|
-
const pathParts = parts.slice(2);
|
|
96
|
-
const path = pathParts.join(" ");
|
|
97
|
-
const isBinary = added === "-" && deleted === "-";
|
|
98
|
-
statsMap.set(path, {
|
|
99
|
-
additions: isBinary ? 0 : parseInt(added, 10) || 0,
|
|
100
|
-
deletions: isBinary ? 0 : parseInt(deleted, 10) || 0,
|
|
101
|
-
binary: isBinary
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
for (const line of nameStatusLines) {
|
|
106
|
-
const parts = line.split(" ");
|
|
107
|
-
if (parts.length < 2 || !parts[0] || !parts[1]) continue;
|
|
108
|
-
const statusChar = parts[0].charAt(0);
|
|
109
|
-
let status;
|
|
110
|
-
let path;
|
|
111
|
-
let oldPath;
|
|
112
|
-
switch (statusChar) {
|
|
113
|
-
case "A":
|
|
114
|
-
status = "added";
|
|
115
|
-
path = parts[1];
|
|
116
|
-
break;
|
|
117
|
-
case "D":
|
|
118
|
-
status = "deleted";
|
|
119
|
-
path = parts[1];
|
|
120
|
-
break;
|
|
121
|
-
case "M":
|
|
122
|
-
status = "modified";
|
|
123
|
-
path = parts[1];
|
|
124
|
-
break;
|
|
125
|
-
case "R":
|
|
126
|
-
status = "renamed";
|
|
127
|
-
oldPath = parts[1];
|
|
128
|
-
path = parts[2] || parts[1];
|
|
129
|
-
break;
|
|
130
|
-
case "C":
|
|
131
|
-
status = "added";
|
|
132
|
-
path = parts[2] || parts[1];
|
|
133
|
-
break;
|
|
134
|
-
default:
|
|
135
|
-
status = "modified";
|
|
136
|
-
path = parts[1];
|
|
137
|
-
}
|
|
138
|
-
const stats = statsMap.get(path) || (oldPath ? statsMap.get(`${oldPath} => ${path}`) : void 0) || statsMap.get(`${oldPath} ${path}`) || { additions: 0, deletions: 0, binary: false };
|
|
139
|
-
files.push({
|
|
140
|
-
path,
|
|
141
|
-
status,
|
|
142
|
-
oldPath,
|
|
143
|
-
additions: stats.additions,
|
|
144
|
-
deletions: stats.deletions,
|
|
145
|
-
binary: stats.binary
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
return files;
|
|
149
|
-
}
|
|
150
|
-
async function getFileDiff(repoPath, sha, filePath) {
|
|
151
|
-
if (!/^[0-9a-f]{4,40}$/i.test(sha)) {
|
|
152
|
-
throw new Error(`Invalid commit SHA: ${sha}`);
|
|
153
|
-
}
|
|
154
|
-
if (!validatePathInRepo(repoPath, filePath)) {
|
|
155
|
-
throw new Error("File path is outside repository");
|
|
156
|
-
}
|
|
157
|
-
const output = await execGit(repoPath, [
|
|
158
|
-
"show",
|
|
159
|
-
sha,
|
|
160
|
-
"--format=",
|
|
161
|
-
"--unified=3",
|
|
162
|
-
"--",
|
|
163
|
-
filePath
|
|
164
|
-
]);
|
|
165
|
-
return parseDiffHunks(output);
|
|
166
|
-
}
|
|
167
|
-
function parseDiffHunks(diffOutput) {
|
|
168
|
-
const hunks = [];
|
|
169
|
-
const lines = diffOutput.split("\n");
|
|
170
|
-
let currentHunk = null;
|
|
171
|
-
let oldLineNum = 0;
|
|
172
|
-
let newLineNum = 0;
|
|
173
|
-
for (const line of lines) {
|
|
174
|
-
const hunkMatch = line.match(/^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@/);
|
|
175
|
-
if (hunkMatch) {
|
|
176
|
-
if (currentHunk) {
|
|
177
|
-
hunks.push(currentHunk);
|
|
178
|
-
}
|
|
179
|
-
const oldStart = parseInt(hunkMatch[1], 10);
|
|
180
|
-
const oldLines = hunkMatch[2] ? parseInt(hunkMatch[2], 10) : 1;
|
|
181
|
-
const newStart = parseInt(hunkMatch[3], 10);
|
|
182
|
-
const newLines = hunkMatch[4] ? parseInt(hunkMatch[4], 10) : 1;
|
|
183
|
-
currentHunk = {
|
|
184
|
-
oldStart,
|
|
185
|
-
oldLines,
|
|
186
|
-
newStart,
|
|
187
|
-
newLines,
|
|
188
|
-
lines: []
|
|
189
|
-
};
|
|
190
|
-
oldLineNum = oldStart;
|
|
191
|
-
newLineNum = newStart;
|
|
192
|
-
continue;
|
|
193
|
-
}
|
|
194
|
-
const isDiffHeader = line.startsWith("diff --git") || line.startsWith("index ") || /^--- (?:a\/.*|\/dev\/null)$/.test(line) || /^\+\+\+ (?:b\/.*|\/dev\/null)$/.test(line) || line === "\";
|
|
195
|
-
if (isDiffHeader) {
|
|
196
|
-
continue;
|
|
197
|
-
}
|
|
198
|
-
if (currentHunk) {
|
|
199
|
-
if (line.startsWith("+")) {
|
|
200
|
-
const diffLine = {
|
|
201
|
-
type: "add",
|
|
202
|
-
content: line.substring(1),
|
|
203
|
-
newNumber: newLineNum++
|
|
204
|
-
};
|
|
205
|
-
currentHunk.lines.push(diffLine);
|
|
206
|
-
} else if (line.startsWith("-")) {
|
|
207
|
-
const diffLine = {
|
|
208
|
-
type: "remove",
|
|
209
|
-
content: line.substring(1),
|
|
210
|
-
oldNumber: oldLineNum++
|
|
211
|
-
};
|
|
212
|
-
currentHunk.lines.push(diffLine);
|
|
213
|
-
} else if (line.startsWith(" ")) {
|
|
214
|
-
const diffLine = {
|
|
215
|
-
type: "context",
|
|
216
|
-
content: line.substring(1),
|
|
217
|
-
oldNumber: oldLineNum++,
|
|
218
|
-
newNumber: newLineNum++
|
|
219
|
-
};
|
|
220
|
-
currentHunk.lines.push(diffLine);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
if (currentHunk) {
|
|
225
|
-
hunks.push(currentHunk);
|
|
226
|
-
}
|
|
227
|
-
return hunks;
|
|
228
|
-
}
|
|
229
|
-
async function getFileContent(repoPath, sha, filePath) {
|
|
230
|
-
if (!/^[0-9a-f]{4,40}$/i.test(sha)) {
|
|
231
|
-
throw new Error(`Invalid commit SHA: ${sha}`);
|
|
232
|
-
}
|
|
233
|
-
if (!validatePathInRepo(repoPath, filePath)) {
|
|
234
|
-
throw new Error("File path is outside repository");
|
|
235
|
-
}
|
|
236
|
-
const output = await execGit(repoPath, ["show", `${sha}:${filePath}`]);
|
|
237
|
-
return output;
|
|
238
|
-
}
|
|
239
|
-
async function commitExistsInRepo(repoPath, sha) {
|
|
240
|
-
try {
|
|
241
|
-
await execGit(repoPath, ["cat-file", "-t", sha]);
|
|
242
|
-
return true;
|
|
243
|
-
} catch {
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
async function findRepoForCommit(repoConfig, sha) {
|
|
248
|
-
if (!/^[0-9a-f]{4,40}$/i.test(sha)) {
|
|
249
|
-
throw new Error(`Invalid commit SHA: ${sha}`);
|
|
250
|
-
}
|
|
251
|
-
if (await isGitRepo(repoConfig.path)) {
|
|
252
|
-
if (await commitExistsInRepo(repoConfig.path, sha)) {
|
|
253
|
-
return {
|
|
254
|
-
sha,
|
|
255
|
-
repoPath: "",
|
|
256
|
-
absolutePath: repoConfig.path
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
if (!repoConfig.gitRepos || repoConfig.gitRepos.length === 0) {
|
|
261
|
-
throw new Error(`Commit ${sha.substring(0, 7)} not found in repository "${repoConfig.name}"`);
|
|
262
|
-
}
|
|
263
|
-
const results = await Promise.all(
|
|
264
|
-
repoConfig.gitRepos.map(async (gitRepo) => {
|
|
265
|
-
if (await commitExistsInRepo(gitRepo.absolutePath, sha)) {
|
|
266
|
-
return {
|
|
267
|
-
sha,
|
|
268
|
-
repoPath: gitRepo.relativePath,
|
|
269
|
-
absolutePath: gitRepo.absolutePath
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
return null;
|
|
273
|
-
})
|
|
274
|
-
);
|
|
275
|
-
const found = results.find((r) => r !== null);
|
|
276
|
-
if (found) {
|
|
277
|
-
return found;
|
|
278
|
-
}
|
|
279
|
-
throw new Error(
|
|
280
|
-
`Commit ${sha.substring(0, 7)} not found in repository "${repoConfig.name}" or any of its ${repoConfig.gitRepos.length} discovered git repos`
|
|
281
|
-
);
|
|
282
|
-
}
|
|
283
|
-
async function resolveCommitRepo(repoConfig, commitEntry) {
|
|
284
|
-
if (typeof commitEntry === "object" && commitEntry.sha && commitEntry.repo) {
|
|
285
|
-
return {
|
|
286
|
-
sha: commitEntry.sha,
|
|
287
|
-
repoPath: commitEntry.repo,
|
|
288
|
-
absolutePath: join(repoConfig.path, commitEntry.repo)
|
|
289
|
-
};
|
|
290
|
-
}
|
|
291
|
-
const sha = typeof commitEntry === "string" ? commitEntry : commitEntry.sha;
|
|
292
|
-
return findRepoForCommit(repoConfig, sha);
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
export { getCommitDiff as a, getFileContent as b, getFileDiff as c, findRepoForCommit as f, getCommitInfo as g, isGitRepo as i, resolveCommitRepo as r, validatePathInRepo as v };
|
|
296
|
-
//# sourceMappingURL=git.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git.mjs","sources":["../../../../server/utils/git.ts"],"names":["resolve"],"mappings":"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"}
|
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import process from 'node:process';globalThis._importMeta_=globalThis._importMeta_||{url:"file:///_entry.js",env:process.env};import { promises, existsSync } from 'node:fs';
|
|
2
|
-
import { resolve, isAbsolute, join, basename, relative, dirname } from 'node:path';
|
|
3
|
-
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
|
-
import { b as dbRun, h as dbAll, e as dbGet } from '../nitro/nitro.mjs';
|
|
6
|
-
|
|
7
|
-
function findPackageRoot(startDir) {
|
|
8
|
-
let currentDir = startDir;
|
|
9
|
-
while (true) {
|
|
10
|
-
if (existsSync(join(currentDir, "package.json"))) {
|
|
11
|
-
return currentDir;
|
|
12
|
-
}
|
|
13
|
-
const parentDir = dirname(currentDir);
|
|
14
|
-
if (parentDir === currentDir) {
|
|
15
|
-
return startDir;
|
|
16
|
-
}
|
|
17
|
-
currentDir = parentDir;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function normalizePathSlashes(path) {
|
|
21
|
-
return path.replaceAll("\\", "/");
|
|
22
|
-
}
|
|
23
|
-
function isPathWithin(basePath, candidatePath) {
|
|
24
|
-
const relativePath = relative(resolve(basePath), resolve(candidatePath));
|
|
25
|
-
return relativePath === "" || !relativePath.startsWith("..") && !isAbsolute(relativePath);
|
|
26
|
-
}
|
|
27
|
-
const PACKAGE_ROOT = findPackageRoot(dirname(fileURLToPath(globalThis._importMeta_.url)));
|
|
28
|
-
const LEGACY_REPOS_FILE = join(PACKAGE_ROOT, "server", "data", "repos.json");
|
|
29
|
-
let legacyImportPromise = null;
|
|
30
|
-
function serializeGitRepos(gitRepos) {
|
|
31
|
-
return gitRepos && gitRepos.length > 0 ? JSON.stringify(gitRepos) : null;
|
|
32
|
-
}
|
|
33
|
-
function parseGitRepos(repoPath, gitReposJson) {
|
|
34
|
-
if (!gitReposJson) {
|
|
35
|
-
return void 0;
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
const parsed = JSON.parse(gitReposJson);
|
|
39
|
-
if (!Array.isArray(parsed)) {
|
|
40
|
-
return void 0;
|
|
41
|
-
}
|
|
42
|
-
const repoRoot = resolve(repoPath);
|
|
43
|
-
const validRepos = /* @__PURE__ */ new Map();
|
|
44
|
-
for (const item of parsed) {
|
|
45
|
-
if (!item || typeof item !== "object") {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
const relativePath = item.relativePath;
|
|
49
|
-
const name = item.name;
|
|
50
|
-
if (!relativePath || !name) {
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
const normalizedRelativePath = normalizePathSlashes(relativePath).replace(/^\.\//, "");
|
|
54
|
-
if (!normalizedRelativePath || normalizedRelativePath === ".") {
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
const absolutePath = resolve(repoRoot, normalizedRelativePath);
|
|
58
|
-
if (!isPathWithin(repoRoot, absolutePath)) {
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
validRepos.set(normalizedRelativePath, {
|
|
62
|
-
relativePath: normalizedRelativePath,
|
|
63
|
-
absolutePath,
|
|
64
|
-
name
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
return validRepos.size > 0 ? Array.from(validRepos.values()) : void 0;
|
|
68
|
-
} catch {
|
|
69
|
-
return void 0;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function rowToRepo(row) {
|
|
73
|
-
const gitRepos = parseGitRepos(row.path, row.git_repos_json);
|
|
74
|
-
return {
|
|
75
|
-
id: row.id,
|
|
76
|
-
name: row.name,
|
|
77
|
-
path: row.path,
|
|
78
|
-
addedAt: row.added_at,
|
|
79
|
-
...gitRepos && { gitRepos }
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function isLegacyRepoConfig(value) {
|
|
83
|
-
if (!value || typeof value !== "object") {
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
const repo = value;
|
|
87
|
-
return typeof repo.id === "string" && typeof repo.name === "string" && typeof repo.path === "string" && typeof repo.addedAt === "string";
|
|
88
|
-
}
|
|
89
|
-
async function importLegacyReposIfNeeded() {
|
|
90
|
-
if (legacyImportPromise) {
|
|
91
|
-
return legacyImportPromise;
|
|
92
|
-
}
|
|
93
|
-
legacyImportPromise = (async () => {
|
|
94
|
-
var _a;
|
|
95
|
-
const row = await dbGet("SELECT COUNT(*) as count FROM repos");
|
|
96
|
-
if (((_a = row == null ? void 0 : row.count) != null ? _a : 0) > 0) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
let legacyRepos;
|
|
100
|
-
try {
|
|
101
|
-
const content = await promises.readFile(LEGACY_REPOS_FILE, "utf-8");
|
|
102
|
-
legacyRepos = JSON.parse(content);
|
|
103
|
-
} catch {
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
if (!Array.isArray(legacyRepos) || legacyRepos.length === 0) {
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
for (const candidate of legacyRepos) {
|
|
110
|
-
if (!isLegacyRepoConfig(candidate)) {
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
const repo = candidate;
|
|
114
|
-
await dbRun(
|
|
115
|
-
`
|
|
116
|
-
INSERT INTO repos (id, name, path, added_at, git_repos_json)
|
|
117
|
-
VALUES (?, ?, ?, ?, ?)
|
|
118
|
-
ON CONFLICT(id) DO UPDATE SET
|
|
119
|
-
name = excluded.name,
|
|
120
|
-
path = excluded.path,
|
|
121
|
-
added_at = excluded.added_at,
|
|
122
|
-
git_repos_json = excluded.git_repos_json
|
|
123
|
-
`,
|
|
124
|
-
[repo.id, repo.name, repo.path, repo.addedAt, serializeGitRepos(repo.gitRepos)]
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
try {
|
|
128
|
-
await promises.unlink(LEGACY_REPOS_FILE);
|
|
129
|
-
} catch {
|
|
130
|
-
}
|
|
131
|
-
})();
|
|
132
|
-
return legacyImportPromise;
|
|
133
|
-
}
|
|
134
|
-
async function getRepos() {
|
|
135
|
-
await importLegacyReposIfNeeded();
|
|
136
|
-
const rows = await dbAll("SELECT id, name, path, added_at, git_repos_json FROM repos ORDER BY added_at ASC");
|
|
137
|
-
return rows.map(rowToRepo);
|
|
138
|
-
}
|
|
139
|
-
async function addRepo(path, name) {
|
|
140
|
-
await importLegacyReposIfNeeded();
|
|
141
|
-
const resolvedPath = resolve(path);
|
|
142
|
-
const existing = await dbGet("SELECT id FROM repos WHERE path = ?", [resolvedPath]);
|
|
143
|
-
if (existing) {
|
|
144
|
-
throw new Error("Repository already added");
|
|
145
|
-
}
|
|
146
|
-
const gitRepos = await discoverGitRepos(resolvedPath);
|
|
147
|
-
const repo = {
|
|
148
|
-
id: randomUUID(),
|
|
149
|
-
name: name || basename(resolvedPath),
|
|
150
|
-
path: resolvedPath,
|
|
151
|
-
addedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
152
|
-
...gitRepos.length > 0 && { gitRepos }
|
|
153
|
-
};
|
|
154
|
-
await dbRun(
|
|
155
|
-
"INSERT INTO repos (id, name, path, added_at, git_repos_json) VALUES (?, ?, ?, ?, ?)",
|
|
156
|
-
[repo.id, repo.name, repo.path, repo.addedAt, serializeGitRepos(repo.gitRepos)]
|
|
157
|
-
);
|
|
158
|
-
return repo;
|
|
159
|
-
}
|
|
160
|
-
async function getRepoById(id) {
|
|
161
|
-
await importLegacyReposIfNeeded();
|
|
162
|
-
const row = await dbGet(
|
|
163
|
-
"SELECT id, name, path, added_at, git_repos_json FROM repos WHERE id = ?",
|
|
164
|
-
[id]
|
|
165
|
-
);
|
|
166
|
-
return row ? rowToRepo(row) : void 0;
|
|
167
|
-
}
|
|
168
|
-
async function updateRepoGitRepos(id, gitRepos) {
|
|
169
|
-
await importLegacyReposIfNeeded();
|
|
170
|
-
const result = await dbRun(
|
|
171
|
-
"UPDATE repos SET git_repos_json = ? WHERE id = ?",
|
|
172
|
-
[serializeGitRepos(gitRepos), id]
|
|
173
|
-
);
|
|
174
|
-
return result.changes > 0;
|
|
175
|
-
}
|
|
176
|
-
async function removeRepo(id) {
|
|
177
|
-
await importLegacyReposIfNeeded();
|
|
178
|
-
const result = await dbRun("DELETE FROM repos WHERE id = ?", [id]);
|
|
179
|
-
return result.changes > 0;
|
|
180
|
-
}
|
|
181
|
-
const IGNORED_DIRS = /* @__PURE__ */ new Set([
|
|
182
|
-
"node_modules",
|
|
183
|
-
".git",
|
|
184
|
-
"vendor",
|
|
185
|
-
"dist",
|
|
186
|
-
"build",
|
|
187
|
-
".next",
|
|
188
|
-
".nuxt",
|
|
189
|
-
"__pycache__",
|
|
190
|
-
".venv",
|
|
191
|
-
"venv",
|
|
192
|
-
"target",
|
|
193
|
-
// Rust
|
|
194
|
-
"Pods"
|
|
195
|
-
// iOS
|
|
196
|
-
]);
|
|
197
|
-
async function isGitRepo(dirPath) {
|
|
198
|
-
try {
|
|
199
|
-
const gitPath = join(dirPath, ".git");
|
|
200
|
-
const stats = await promises.stat(gitPath);
|
|
201
|
-
return stats.isDirectory() || stats.isFile();
|
|
202
|
-
} catch {
|
|
203
|
-
return false;
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
async function discoverGitRepos(basePath, maxDepth = 4) {
|
|
207
|
-
const resolvedBase = resolve(basePath);
|
|
208
|
-
if (await isGitRepo(resolvedBase)) {
|
|
209
|
-
return [];
|
|
210
|
-
}
|
|
211
|
-
const discovered = [];
|
|
212
|
-
async function scanDirectory(dirPath, currentDepth) {
|
|
213
|
-
if (currentDepth > maxDepth) return;
|
|
214
|
-
try {
|
|
215
|
-
const entries = await promises.readdir(dirPath, { withFileTypes: true });
|
|
216
|
-
for (const entry of entries) {
|
|
217
|
-
if (!entry.isDirectory()) continue;
|
|
218
|
-
if (IGNORED_DIRS.has(entry.name)) continue;
|
|
219
|
-
const fullPath = join(dirPath, entry.name);
|
|
220
|
-
if (await isGitRepo(fullPath)) {
|
|
221
|
-
const relativePath = relative(resolvedBase, fullPath);
|
|
222
|
-
discovered.push({
|
|
223
|
-
relativePath,
|
|
224
|
-
absolutePath: fullPath,
|
|
225
|
-
name: entry.name
|
|
226
|
-
});
|
|
227
|
-
continue;
|
|
228
|
-
}
|
|
229
|
-
await scanDirectory(fullPath, currentDepth + 1);
|
|
230
|
-
}
|
|
231
|
-
} catch {
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
await scanDirectory(resolvedBase, 1);
|
|
235
|
-
return discovered;
|
|
236
|
-
}
|
|
237
|
-
async function validateRepoPath(path) {
|
|
238
|
-
const trimmedPath = path.trim();
|
|
239
|
-
if (trimmedPath.length === 0) {
|
|
240
|
-
return { valid: false, error: "Path is required" };
|
|
241
|
-
}
|
|
242
|
-
if (trimmedPath.length > 4096) {
|
|
243
|
-
return { valid: false, error: "Path is too long" };
|
|
244
|
-
}
|
|
245
|
-
if (trimmedPath.includes("\0")) {
|
|
246
|
-
return { valid: false, error: "Path contains invalid characters" };
|
|
247
|
-
}
|
|
248
|
-
const isWindowsAbsolutePath = /^[A-Za-z]:[\\/]/.test(trimmedPath);
|
|
249
|
-
if (!isAbsolute(trimmedPath) && !isWindowsAbsolutePath) {
|
|
250
|
-
return { valid: false, error: "Path must be absolute" };
|
|
251
|
-
}
|
|
252
|
-
const resolvedPath = resolve(trimmedPath);
|
|
253
|
-
try {
|
|
254
|
-
const stats = await promises.stat(resolvedPath);
|
|
255
|
-
if (!stats.isDirectory()) {
|
|
256
|
-
return { valid: false, error: "Path is not a directory" };
|
|
257
|
-
}
|
|
258
|
-
const hasPrdDir = await promises.stat(join(resolvedPath, "docs", "prd")).then(() => true).catch(() => false);
|
|
259
|
-
if (!hasPrdDir) {
|
|
260
|
-
return {
|
|
261
|
-
valid: false,
|
|
262
|
-
error: "Directory does not appear to be a valid PRD repository (missing docs/prd directory)"
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
return { valid: true };
|
|
266
|
-
} catch {
|
|
267
|
-
return { valid: false, error: "Directory does not exist" };
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
export { getRepoById as a, addRepo as b, discoverGitRepos as d, getRepos as g, removeRepo as r, updateRepoGitRepos as u, validateRepoPath as v };
|
|
272
|
-
//# sourceMappingURL=repos.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repos.mjs","sources":["../../../../server/utils/repos.ts"],"names":["fs"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Detail-BcQGdJY5.mjs","sources":["../../../../node_modules/@dagrejs/dagre/dist/dagre.esm.js","../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/Detail-BcQGdJY5.js"],"names":[],"mappings":"","x_google_ignoreList":[0,1]}
|
|
@@ -1,4 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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]}
|
|
@@ -1,8 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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]}
|
|
@@ -1,10 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
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]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_prd_-CD_Bds_B.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/_prd_-CD_Bds_B.js"],"names":["__nuxt_component_0$3"],"mappings":"","x_google_ignoreList":[0]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"repo-graph-CBfhpnd5.mjs","sources":["../../../../node_modules/.cache/nuxt/.nuxt/dist/server/_nuxt/repo-graph-CBfhpnd5.js"],"names":["__nuxt_component_0"],"mappings":"","x_google_ignoreList":[0]}
|