truecourse 0.1.5 → 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.
- package/cli.mjs +3 -1
- package/package.json +1 -1
- package/public/404.html +2 -2
- package/public/index.html +2 -2
- package/public/index.txt +1 -1
- package/public/repos.html +2 -2
- package/public/repos.txt +1 -1
- package/server.mjs +16 -7
- /package/public/_next/static/{kWvBK3M_UdFRGPFgNFXnS → kOyPn8D2uazBrGUJ8aHW-}/_buildManifest.js +0 -0
- /package/public/_next/static/{kWvBK3M_UdFRGPFgNFXnS → kOyPn8D2uazBrGUJ8aHW-}/_ssgManifest.js +0 -0
package/cli.mjs
CHANGED
|
@@ -8657,7 +8657,6 @@ async function runStart() {
|
|
|
8657
8657
|
});
|
|
8658
8658
|
serverProcess.on("close", (code) => {
|
|
8659
8659
|
if (code !== null && code !== 0) {
|
|
8660
|
-
v2.error(`Server exited with code ${code}`);
|
|
8661
8660
|
process.exit(code);
|
|
8662
8661
|
}
|
|
8663
8662
|
});
|
|
@@ -12455,6 +12454,9 @@ async function runAnalyze() {
|
|
|
12455
12454
|
}
|
|
12456
12455
|
const violations = await res.json();
|
|
12457
12456
|
renderViolations(violations);
|
|
12457
|
+
const repoUrl = `${serverUrl}/repos/${repo.id}`;
|
|
12458
|
+
const link = `\x1B[4m\x1B[34m${repoUrl}\x1B[0m`;
|
|
12459
|
+
fe(`Open ${link} to see violations and architecture diagrams in the UI`);
|
|
12458
12460
|
} catch (err) {
|
|
12459
12461
|
spinner.stop("Analysis failed");
|
|
12460
12462
|
const message = err instanceof Error ? err.message : String(err);
|
package/package.json
CHANGED
package/public/404.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--kOyPn8D2uazBrGUJ8aHW_--><html lang="en" class="font-sans"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/bfb5d4bf473c84ea.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f20a7a6e701c70d8.js"/><script src="/_next/static/chunks/a51c26f2-8f567e78114a65f0.js" async=""></script><script src="/_next/static/chunks/597-bdc49f9b0afbcc65.js" async=""></script><script src="/_next/static/chunks/main-app-11a30c55aba12d50.js" async=""></script><meta name="robots" content="noindex"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>404: This page could not be found.</title><title>TrueCourse</title><meta name="description" content="Visualize your codebase architecture"/><link href="https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter:wght@400..700&display=swap" rel="stylesheet"/><script>
|
|
2
2
|
(function() {
|
|
3
3
|
try {
|
|
4
4
|
var stored = localStorage.getItem('theme');
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
}
|
|
10
10
|
} catch (e) {}
|
|
11
11
|
})();
|
|
12
|
-
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f20a7a6e701c70d8.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32064,[],\"\"]\n3:I[30982,[],\"\"]\n4:I[51597,[],\"OutletBoundary\"]\n6:I[7544,[],\"AsyncMetadataOutlet\"]\n8:I[51597,[],\"ViewportBoundary\"]\na:I[51597,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[42044,[],\"\"]\n:HL[\"/_next/static/css/bfb5d4bf473c84ea.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
12
|
+
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans"><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f20a7a6e701c70d8.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32064,[],\"\"]\n3:I[30982,[],\"\"]\n4:I[51597,[],\"OutletBoundary\"]\n6:I[7544,[],\"AsyncMetadataOutlet\"]\n8:I[51597,[],\"ViewportBoundary\"]\na:I[51597,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[42044,[],\"\"]\n:HL[\"/_next/static/css/bfb5d4bf473c84ea.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"kOyPn8D2uazBrGUJ8aHW-\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/bfb5d4bf473c84ea.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"font-sans\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Geist:wght@100..900\u0026family=Inter:wght@400..700\u0026display=swap\",\"rel\":\"stylesheet\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n var stored = localStorage.getItem('theme');\\n if (stored === 'dark' || (!stored \u0026\u0026 window.matchMedia('(prefers-color-scheme: dark)').matches)) {\\n document.documentElement.classList.add('dark');\\n } else {\\n document.documentElement.classList.remove('dark');\\n }\\n } catch (e) {}\\n })();\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-sans\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$L5\",[\"$\",\"$L6\",null,{\"promise\":\"$@7\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],null],[\"$\",\"$La\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"fallback\":null,\"children\":\"$Lc\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n5:null\n"])</script><script>self.__next_f.push([1,"7:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"TrueCourse\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize your codebase architecture\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script></body></html>
|
package/public/index.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--kOyPn8D2uazBrGUJ8aHW_--><html lang="en" class="font-sans"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" as="image" href="/logo.svg"/><link rel="stylesheet" href="/_next/static/css/bfb5d4bf473c84ea.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f20a7a6e701c70d8.js"/><script src="/_next/static/chunks/a51c26f2-8f567e78114a65f0.js" async=""></script><script src="/_next/static/chunks/597-bdc49f9b0afbcc65.js" async=""></script><script src="/_next/static/chunks/main-app-11a30c55aba12d50.js" async=""></script><script src="/_next/static/chunks/381-85180243c39f893f.js" async=""></script><script src="/_next/static/chunks/572-f3883e9a1f12af9b.js" async=""></script><script src="/_next/static/chunks/app/page-cfec34672a92b197.js" async=""></script><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>TrueCourse</title><meta name="description" content="Visualize your codebase architecture"/><link href="https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter:wght@400..700&display=swap" rel="stylesheet"/><script>
|
|
2
2
|
(function() {
|
|
3
3
|
try {
|
|
4
4
|
var stored = localStorage.getItem('theme');
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
}
|
|
10
10
|
} catch (e) {}
|
|
11
11
|
})();
|
|
12
|
-
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans"><div hidden=""><!--$--><!--/$--></div><div class="flex min-h-screen flex-col"><header class="flex h-14 items-center justify-between border-b border-border bg-card px-4"><div class="flex items-center gap-3"><a class="flex items-center gap-2 text-lg font-bold text-foreground" href="/"><img src="/logo.svg" alt="TrueCourse" class="h-7 w-7"/>TrueCourse</a></div><div class="flex items-center gap-3"></div><div class="flex items-center gap-1"><button type="button" tabindex="0" data-slot="button" aria-label="Toggle theme" class="group/button inline-flex shrink-0 items-center justify-center border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon h-5 w-5"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></button></div></header><main class="mx-auto w-full max-w-5xl flex-1 px-4 py-8"><div class="mb-8 text-center"><h1 class="text-3xl font-bold text-foreground">TrueCourse</h1><p class="mt-2 text-muted-foreground">Visualize and understand your codebase architecture</p></div><div class="mb-8 space-y-5"><div class="flex flex-col items-center gap-2.5 rounded-lg border border-border bg-card p-6"><p class="text-sm text-muted-foreground">Run this from your project directory:</p><code class="rounded-md bg-muted px-4 py-2.5 font-mono text-sm text-foreground select-all">npx truecourse add</code></div><div class="flex items-center gap-3"><div class="h-px flex-1 bg-border"></div><span class="text-xs text-muted-foreground">or add manually</span><div class="h-px flex-1 bg-border"></div></div><form class="w-full"><div class="flex gap-2"><div class="relative flex-1"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-open absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"></path></svg><input id="base-ui-_R_it9btb_" type="text" data-slot="input" placeholder="Paste repository path..." class="h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 pl-10" value=""/></div><button type="submit" data-disabled="" tabindex="0" disabled="" data-slot="button" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus h-4 w-4"><path d="M5 12h14"></path><path d="M12 5v14"></path></svg>Add Repository</button></div></form></div><div class="flex items-center justify-center py-16"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader-circle h-8 w-8 animate-spin text-muted-foreground"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f20a7a6e701c70d8.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32064,[],\"\"]\n3:I[30982,[],\"\"]\n4:I[21405,[],\"ClientPageRoot\"]\n5:I[18227,[\"381\",\"static/chunks/381-85180243c39f893f.js\",\"572\",\"static/chunks/572-f3883e9a1f12af9b.js\",\"974\",\"static/chunks/app/page-cfec34672a92b197.js\"],\"default\"]\n8:I[51597,[],\"OutletBoundary\"]\na:I[7544,[],\"AsyncMetadataOutlet\"]\nc:I[51597,[],\"ViewportBoundary\"]\ne:I[51597,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[42044,[],\"\"]\n:HL[\"/_next/static/css/bfb5d4bf473c84ea.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"kWvBK3M_UdFRGPFgNFXnS\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/bfb5d4bf473c84ea.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"font-sans\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Geist:wght@100..900\u0026family=Inter:wght@400..700\u0026display=swap\",\"rel\":\"stylesheet\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n var stored = localStorage.getItem('theme');\\n if (stored === 'dark' || (!stored \u0026\u0026 window.matchMedia('(prefers-color-scheme: dark)').matches)) {\\n document.documentElement.classList.add('dark');\\n } else {\\n document.documentElement.classList.remove('dark');\\n }\\n } catch (e) {}\\n })();\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-sans\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"TrueCourse\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize your codebase architecture\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
|
|
12
|
+
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans"><div hidden=""><!--$--><!--/$--></div><div class="flex min-h-screen flex-col"><header class="flex h-14 items-center justify-between border-b border-border bg-card px-4"><div class="flex items-center gap-3"><a class="flex items-center gap-2 text-lg font-bold text-foreground" href="/"><img src="/logo.svg" alt="TrueCourse" class="h-7 w-7"/>TrueCourse</a></div><div class="flex items-center gap-3"></div><div class="flex items-center gap-1"><button type="button" tabindex="0" data-slot="button" aria-label="Toggle theme" class="group/button inline-flex shrink-0 items-center justify-center border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50 size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon h-5 w-5"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg></button></div></header><main class="mx-auto w-full max-w-5xl flex-1 px-4 py-8"><div class="mb-8 text-center"><h1 class="text-3xl font-bold text-foreground">TrueCourse</h1><p class="mt-2 text-muted-foreground">Visualize and understand your codebase architecture</p></div><div class="mb-8 space-y-5"><div class="flex flex-col items-center gap-2.5 rounded-lg border border-border bg-card p-6"><p class="text-sm text-muted-foreground">Run this from your project directory:</p><code class="rounded-md bg-muted px-4 py-2.5 font-mono text-sm text-foreground select-all">npx truecourse add</code></div><div class="flex items-center gap-3"><div class="h-px flex-1 bg-border"></div><span class="text-xs text-muted-foreground">or add manually</span><div class="h-px flex-1 bg-border"></div></div><form class="w-full"><div class="flex gap-2"><div class="relative flex-1"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-open absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"></path></svg><input id="base-ui-_R_it9btb_" type="text" data-slot="input" placeholder="Paste repository path..." class="h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 pl-10" value=""/></div><button type="submit" data-disabled="" tabindex="0" disabled="" data-slot="button" class="group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:translate-y-px disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 bg-primary text-primary-foreground [a]:hover:bg-primary/80 h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-plus h-4 w-4"><path d="M5 12h14"></path><path d="M12 5v14"></path></svg>Add Repository</button></div></form></div><div class="flex items-center justify-center py-16"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-loader-circle h-8 w-8 animate-spin text-muted-foreground"><path d="M21 12a9 9 0 1 1-6.219-8.56"></path></svg></div></main></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f20a7a6e701c70d8.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32064,[],\"\"]\n3:I[30982,[],\"\"]\n4:I[21405,[],\"ClientPageRoot\"]\n5:I[18227,[\"381\",\"static/chunks/381-85180243c39f893f.js\",\"572\",\"static/chunks/572-f3883e9a1f12af9b.js\",\"974\",\"static/chunks/app/page-cfec34672a92b197.js\"],\"default\"]\n8:I[51597,[],\"OutletBoundary\"]\na:I[7544,[],\"AsyncMetadataOutlet\"]\nc:I[51597,[],\"ViewportBoundary\"]\ne:I[51597,[],\"MetadataBoundary\"]\nf:\"$Sreact.suspense\"\n11:I[42044,[],\"\"]\n:HL[\"/_next/static/css/bfb5d4bf473c84ea.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"kOyPn8D2uazBrGUJ8aHW-\",\"p\":\"\",\"c\":[\"\",\"\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/bfb5d4bf473c84ea.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"font-sans\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Geist:wght@100..900\u0026family=Inter:wght@400..700\u0026display=swap\",\"rel\":\"stylesheet\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n var stored = localStorage.getItem('theme');\\n if (stored === 'dark' || (!stored \u0026\u0026 window.matchMedia('(prefers-color-scheme: dark)').matches)) {\\n document.documentElement.classList.add('dark');\\n } else {\\n document.documentElement.classList.remove('dark');\\n }\\n } catch (e) {}\\n })();\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-sans\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{\"Component\":\"$5\",\"searchParams\":{},\"params\":{},\"promises\":[\"$@6\",\"$@7\"]}],null,[\"$\",\"$L8\",null,{\"children\":[\"$L9\",[\"$\",\"$La\",null,{\"promise\":\"$@b\"}]]}]]}],{},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],null],[\"$\",\"$Le\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$f\",null,{\"fallback\":null,\"children\":\"$L10\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"6:{}\n7:\"$0:f:0:1:2:children:1:props:children:0:props:params\"\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n9:null\n"])</script><script>self.__next_f.push([1,"b:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"TrueCourse\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize your codebase architecture\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:\"$b:metadata\"\n"])</script></body></html>
|
package/public/index.txt
CHANGED
|
@@ -10,7 +10,7 @@ e:I[51597,[],"MetadataBoundary"]
|
|
|
10
10
|
f:"$Sreact.suspense"
|
|
11
11
|
11:I[42044,[],""]
|
|
12
12
|
:HL["/_next/static/css/bfb5d4bf473c84ea.css","style"]
|
|
13
|
-
0:{"P":null,"b":"
|
|
13
|
+
0:{"P":null,"b":"kOyPn8D2uazBrGUJ8aHW-","p":"","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bfb5d4bf473c84ea.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"font-sans","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"rel":"preconnect","href":"https://fonts.gstatic.com","crossOrigin":"anonymous"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter:wght@400..700&display=swap","rel":"stylesheet"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n var stored = localStorage.getItem('theme');\n if (stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches)) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n } catch (e) {}\n })();\n "}}]]}],["$","body",null,{"className":"font-sans","suppressHydrationWarning":true,"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","searchParams":{},"params":{},"promises":["$@6","$@7"]}],null,["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[]],"s":false,"S":true}
|
|
14
14
|
6:{}
|
|
15
15
|
7:"$0:f:0:1:2:children:1:props:children:0:props:params"
|
|
16
16
|
d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
package/public/repos.html
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><!--
|
|
1
|
+
<!DOCTYPE html><!--kOyPn8D2uazBrGUJ8aHW_--><html lang="en" class="font-sans"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/bfb5d4bf473c84ea.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/599369d853c61df7.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-f20a7a6e701c70d8.js"/><script src="/_next/static/chunks/a51c26f2-8f567e78114a65f0.js" async=""></script><script src="/_next/static/chunks/597-bdc49f9b0afbcc65.js" async=""></script><script src="/_next/static/chunks/main-app-11a30c55aba12d50.js" async=""></script><script src="/_next/static/chunks/7273c211-cf17e181dbeacc49.js" async=""></script><script src="/_next/static/chunks/381-85180243c39f893f.js" async=""></script><script src="/_next/static/chunks/552-6917726d81ee49a3.js" async=""></script><script src="/_next/static/chunks/572-f3883e9a1f12af9b.js" async=""></script><script src="/_next/static/chunks/app/repos/%5B%5B...slug%5D%5D/page-775a75a81164bb72.js" async=""></script><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><title>TrueCourse</title><meta name="description" content="Visualize your codebase architecture"/><link href="https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter:wght@400..700&display=swap" rel="stylesheet"/><script>
|
|
2
2
|
(function() {
|
|
3
3
|
try {
|
|
4
4
|
var stored = localStorage.getItem('theme');
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
}
|
|
10
10
|
} catch (e) {}
|
|
11
11
|
})();
|
|
12
|
-
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans"><div hidden=""><!--$--><!--/$--></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f20a7a6e701c70d8.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32064,[],\"\"]\n3:I[30982,[],\"\"]\n4:\"$Sreact.suspense\"\n5:I[40191,[\"763\",\"static/chunks/7273c211-cf17e181dbeacc49.js\",\"381\",\"static/chunks/381-85180243c39f893f.js\",\"552\",\"static/chunks/552-6917726d81ee49a3.js\",\"572\",\"static/chunks/572-f3883e9a1f12af9b.js\",\"302\",\"static/chunks/app/repos/%5B%5B...slug%5D%5D/page-775a75a81164bb72.js\"],\"default\"]\n6:I[51597,[],\"OutletBoundary\"]\n8:I[7544,[],\"AsyncMetadataOutlet\"]\na:I[51597,[],\"ViewportBoundary\"]\nc:I[51597,[],\"MetadataBoundary\"]\ne:I[42044,[],\"\"]\n:HL[\"/_next/static/css/bfb5d4bf473c84ea.css\",\"style\"]\n:HL[\"/_next/static/css/599369d853c61df7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"
|
|
12
|
+
</script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="font-sans"><div hidden=""><!--$--><!--/$--></div><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--><!--$--><!--/$--><script src="/_next/static/chunks/webpack-f20a7a6e701c70d8.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[32064,[],\"\"]\n3:I[30982,[],\"\"]\n4:\"$Sreact.suspense\"\n5:I[40191,[\"763\",\"static/chunks/7273c211-cf17e181dbeacc49.js\",\"381\",\"static/chunks/381-85180243c39f893f.js\",\"552\",\"static/chunks/552-6917726d81ee49a3.js\",\"572\",\"static/chunks/572-f3883e9a1f12af9b.js\",\"302\",\"static/chunks/app/repos/%5B%5B...slug%5D%5D/page-775a75a81164bb72.js\"],\"default\"]\n6:I[51597,[],\"OutletBoundary\"]\n8:I[7544,[],\"AsyncMetadataOutlet\"]\na:I[51597,[],\"ViewportBoundary\"]\nc:I[51597,[],\"MetadataBoundary\"]\ne:I[42044,[],\"\"]\n:HL[\"/_next/static/css/bfb5d4bf473c84ea.css\",\"style\"]\n:HL[\"/_next/static/css/599369d853c61df7.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"kOyPn8D2uazBrGUJ8aHW-\",\"p\":\"\",\"c\":[\"\",\"repos\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"repos\",{\"children\":[[\"slug\",\"\",\"oc\"],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/bfb5d4bf473c84ea.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"className\":\"font-sans\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.googleapis.com\"}],[\"$\",\"link\",null,{\"rel\":\"preconnect\",\"href\":\"https://fonts.gstatic.com\",\"crossOrigin\":\"anonymous\"}],[\"$\",\"link\",null,{\"href\":\"https://fonts.googleapis.com/css2?family=Geist:wght@100..900\u0026family=Inter:wght@400..700\u0026display=swap\",\"rel\":\"stylesheet\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function() {\\n try {\\n var stored = localStorage.getItem('theme');\\n if (stored === 'dark' || (!stored \u0026\u0026 window.matchMedia('(prefers-color-scheme: dark)').matches)) {\\n document.documentElement.classList.add('dark');\\n } else {\\n document.documentElement.classList.remove('dark');\\n }\\n } catch (e) {}\\n })();\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"font-sans\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}],{\"children\":[\"repos\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"slug\",\"\",\"oc\"],[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$4\",null,{\"children\":[\"$\",\"$L5\",null,{}]}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/599369d853c61df7.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$L7\",[\"$\",\"$L8\",null,{\"promise\":\"$@9\"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],null],[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$4\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n7:null\n"])</script><script>self.__next_f.push([1,"9:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"TrueCourse\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Visualize your codebase architecture\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$9:metadata\"\n"])</script></body></html>
|
package/public/repos.txt
CHANGED
|
@@ -10,7 +10,7 @@ c:I[51597,[],"MetadataBoundary"]
|
|
|
10
10
|
e:I[42044,[],""]
|
|
11
11
|
:HL["/_next/static/css/bfb5d4bf473c84ea.css","style"]
|
|
12
12
|
:HL["/_next/static/css/599369d853c61df7.css","style"]
|
|
13
|
-
0:{"P":null,"b":"
|
|
13
|
+
0:{"P":null,"b":"kOyPn8D2uazBrGUJ8aHW-","p":"","c":["","repos"],"i":false,"f":[[["",{"children":["repos",{"children":[["slug","","oc"],{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/bfb5d4bf473c84ea.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","suppressHydrationWarning":true,"className":"font-sans","children":[["$","head",null,{"children":[["$","link",null,{"rel":"preconnect","href":"https://fonts.googleapis.com"}],["$","link",null,{"rel":"preconnect","href":"https://fonts.gstatic.com","crossOrigin":"anonymous"}],["$","link",null,{"href":"https://fonts.googleapis.com/css2?family=Geist:wght@100..900&family=Inter:wght@400..700&display=swap","rel":"stylesheet"}],["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n (function() {\n try {\n var stored = localStorage.getItem('theme');\n if (stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches)) {\n document.documentElement.classList.add('dark');\n } else {\n document.documentElement.classList.remove('dark');\n }\n } catch (e) {}\n })();\n "}}]]}],["$","body",null,{"className":"font-sans","suppressHydrationWarning":true,"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}],{"children":["repos",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["slug","","oc"],["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$4",null,{"children":["$","$L5",null,{}]}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/599369d853c61df7.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L6",null,{"children":["$L7",["$","$L8",null,{"promise":"$@9"}]]}]]}],{},null,false]},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$La",null,{"children":"$Lb"}],null],["$","$Lc",null,{"children":["$","div",null,{"hidden":true,"children":["$","$4",null,{"fallback":null,"children":"$Ld"}]}]}]]}],false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true}
|
|
14
14
|
b:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
15
15
|
7:null
|
|
16
16
|
9:{"metadata":[["$","title","0",{"children":"TrueCourse"}],["$","meta","1",{"name":"description","content":"Visualize your codebase architecture"}]],"error":null,"digest":"$undefined"}
|
package/server.mjs
CHANGED
|
@@ -57791,7 +57791,7 @@ async function startEmbeddedPostgres() {
|
|
|
57791
57791
|
if (message.includes("address already in use") || message.includes("EADDRINUSE") || !message) {
|
|
57792
57792
|
throw new Error(
|
|
57793
57793
|
`Port ${port} is already in use. Is another TrueCourse instance or PostgreSQL running?
|
|
57794
|
-
Stop
|
|
57794
|
+
Stop the other instance first.`
|
|
57795
57795
|
);
|
|
57796
57796
|
}
|
|
57797
57797
|
throw new Error(`Failed to start embedded PostgreSQL: ${message}`);
|
|
@@ -109727,11 +109727,12 @@ async function main() {
|
|
|
109727
109727
|
const databaseUrl = await startEmbeddedPostgres();
|
|
109728
109728
|
console.log(`[Database] Connected: ${databaseUrl.replace(/\/\/.*@/, "//<credentials>@")}`);
|
|
109729
109729
|
initDatabase(databaseUrl);
|
|
109730
|
+
const devMigrations = path7.join(__dirname2, "../src/db/migrations");
|
|
109731
|
+
const distMigrations = path7.join(__dirname2, "db/migrations");
|
|
109732
|
+
const migrationsFolder = fs5.existsSync(distMigrations) ? distMigrations : devMigrations;
|
|
109730
109733
|
const migrationClient = postgres2(databaseUrl, { max: 1, onnotice: () => {
|
|
109731
109734
|
} });
|
|
109732
|
-
await migrate(drizzle(migrationClient), {
|
|
109733
|
-
migrationsFolder: path7.join(__dirname2, "../src/db/migrations")
|
|
109734
|
-
});
|
|
109735
|
+
await migrate(drizzle(migrationClient), { migrationsFolder });
|
|
109735
109736
|
await migrationClient.end();
|
|
109736
109737
|
console.log("[Database] Migrations complete");
|
|
109737
109738
|
await seedRules();
|
|
@@ -109754,7 +109755,15 @@ async function main() {
|
|
|
109754
109755
|
const staticDir = path7.join(__dirname2, "public");
|
|
109755
109756
|
if (fs5.existsSync(staticDir)) {
|
|
109756
109757
|
app.use(import_express7.default.static(staticDir));
|
|
109757
|
-
app.get("*", (
|
|
109758
|
+
app.get("*", (req, res) => {
|
|
109759
|
+
const firstSegment = req.path.split("/")[1];
|
|
109760
|
+
if (firstSegment) {
|
|
109761
|
+
const pageFile = path7.join(staticDir, `${firstSegment}.html`);
|
|
109762
|
+
if (fs5.existsSync(pageFile)) {
|
|
109763
|
+
res.sendFile(pageFile);
|
|
109764
|
+
return;
|
|
109765
|
+
}
|
|
109766
|
+
}
|
|
109758
109767
|
res.sendFile(path7.join(staticDir, "index.html"));
|
|
109759
109768
|
});
|
|
109760
109769
|
}
|
|
@@ -109785,7 +109794,7 @@ Stop it first, or set PORT to use a different port.`
|
|
|
109785
109794
|
console.log(" ~~~~~~~~~~~~~~");
|
|
109786
109795
|
console.log("");
|
|
109787
109796
|
console.log(` Charting your course...`);
|
|
109788
|
-
console.log(` Open
|
|
109797
|
+
console.log(` Open \x1B[4m\x1B[34mhttp://localhost:${config.port}\x1B[0m to sail`);
|
|
109789
109798
|
console.log("");
|
|
109790
109799
|
console.log(" To analyze a repo from your terminal:");
|
|
109791
109800
|
console.log(" cd /path/to/your/repo");
|
|
@@ -109808,7 +109817,7 @@ Stop it first, or set PORT to use a different port.`
|
|
|
109808
109817
|
process.on("SIGTERM", shutdown);
|
|
109809
109818
|
}
|
|
109810
109819
|
main().catch((err) => {
|
|
109811
|
-
console.error(
|
|
109820
|
+
console.error(err instanceof Error ? err.message : String(err));
|
|
109812
109821
|
process.exit(1);
|
|
109813
109822
|
});
|
|
109814
109823
|
/*! Bundled license information:
|
/package/public/_next/static/{kWvBK3M_UdFRGPFgNFXnS → kOyPn8D2uazBrGUJ8aHW-}/_buildManifest.js
RENAMED
|
File without changes
|
/package/public/_next/static/{kWvBK3M_UdFRGPFgNFXnS → kOyPn8D2uazBrGUJ8aHW-}/_ssgManifest.js
RENAMED
|
File without changes
|