feat(dotnet): migrate core formulas, deploy tools, and blazor admin web app to .NET 10
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Has been cancelled
Quant Engine CI/CD Pipeline / validate-core (pull_request) Has been cancelled
Quant Engine CI/CD Pipeline / validate-ui-and-storage (pull_request) Has been cancelled
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (pull_request) Has been cancelled
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (push) Has been cancelled
Quant Engine CI/CD Pipeline / validate-core (pull_request) Has been cancelled
Quant Engine CI/CD Pipeline / validate-ui-and-storage (pull_request) Has been cancelled
WBS-9.3 - NULL Policy CI Gate / NULL Policy Validation (pull_request) Has been cancelled
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<base href="/" />
|
||||
<ResourcePreloader />
|
||||
<link rel="stylesheet" href="@Assets["lib/bootstrap/dist/css/bootstrap.min.css"]" />
|
||||
<link rel="stylesheet" href="@Assets["app.css"]" />
|
||||
<link rel="stylesheet" href="@Assets["QuantEngine.Web.styles.css"]" />
|
||||
<ImportMap />
|
||||
<link rel="icon" type="image/png" href="favicon.png" />
|
||||
<HeadOutlet />
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<Routes />
|
||||
<ReconnectModal />
|
||||
<script src="@Assets["_framework/blazor.web.js"]"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,23 @@
|
||||
@inherits LayoutComponentBase
|
||||
|
||||
<div class="page">
|
||||
<div class="sidebar">
|
||||
<NavMenu />
|
||||
</div>
|
||||
|
||||
<main>
|
||||
<div class="top-row px-4">
|
||||
<a href="https://learn.microsoft.com/aspnet/core/" target="_blank">About</a>
|
||||
</div>
|
||||
|
||||
<article class="content px-4">
|
||||
@Body
|
||||
</article>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<div id="blazor-error-ui" data-nosnippet>
|
||||
An unhandled error has occurred.
|
||||
<a href="." class="reload">Reload</a>
|
||||
<span class="dismiss">🗙</span>
|
||||
</div>
|
||||
@@ -0,0 +1,98 @@
|
||||
.page {
|
||||
position: relative;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
main {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%);
|
||||
}
|
||||
|
||||
.top-row {
|
||||
background-color: #f7f7f7;
|
||||
border-bottom: 1px solid #d6d5d5;
|
||||
justify-content: flex-end;
|
||||
height: 3.5rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||
white-space: nowrap;
|
||||
margin-left: 1.5rem;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.top-row ::deep a:hover, .top-row ::deep .btn-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.top-row ::deep a:first-child {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
@media (max-width: 640.98px) {
|
||||
.top-row {
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.top-row ::deep a, .top-row ::deep .btn-link {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.page {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 250px;
|
||||
height: 100vh;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.top-row {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.top-row.auth ::deep a:first-child {
|
||||
flex: 1;
|
||||
text-align: right;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
.top-row, article {
|
||||
padding-left: 2rem !important;
|
||||
padding-right: 1.5rem !important;
|
||||
}
|
||||
}
|
||||
|
||||
#blazor-error-ui {
|
||||
color-scheme: light only;
|
||||
background: lightyellow;
|
||||
bottom: 0;
|
||||
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
|
||||
box-sizing: border-box;
|
||||
display: none;
|
||||
left: 0;
|
||||
padding: 0.6rem 1.25rem 0.7rem 1.25rem;
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
#blazor-error-ui .dismiss {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 0.75rem;
|
||||
top: 0.5rem;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<div class="top-row ps-3 navbar navbar-dark">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="">QuantEngine.Web</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="checkbox" title="Navigation menu" class="navbar-toggler" />
|
||||
|
||||
<div class="nav-scrollable" onclick="document.querySelector('.navbar-toggler').click()">
|
||||
<nav class="nav flex-column">
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
|
||||
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
|
||||
</NavLink>
|
||||
</div>
|
||||
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="counter">
|
||||
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span> Counter
|
||||
</NavLink>
|
||||
</div>
|
||||
|
||||
<div class="nav-item px-3">
|
||||
<NavLink class="nav-link" href="weather">
|
||||
<span class="bi bi-list-nested-nav-menu" aria-hidden="true"></span> Weather
|
||||
</NavLink>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
.navbar-toggler {
|
||||
appearance: none;
|
||||
cursor: pointer;
|
||||
width: 3.5rem;
|
||||
height: 2.5rem;
|
||||
color: white;
|
||||
position: absolute;
|
||||
top: 0.5rem;
|
||||
right: 1rem;
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e") no-repeat center/1.75rem rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.navbar-toggler:checked {
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
.top-row {
|
||||
min-height: 3.5rem;
|
||||
background-color: rgba(0,0,0,0.4);
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
|
||||
.bi {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
margin-right: 0.75rem;
|
||||
top: -1px;
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.bi-house-door-fill-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-house-door-fill' viewBox='0 0 16 16'%3E%3Cpath d='M6.5 14.5v-3.505c0-.245.25-.495.5-.495h2c.25 0 .5.25.5.5v3.5a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5v-7a.5.5 0 0 0-.146-.354L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.354 1.146a.5.5 0 0 0-.708 0l-6 6A.5.5 0 0 0 1.5 7.5v7a.5.5 0 0 0 .5.5h4a.5.5 0 0 0 .5-.5Z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-plus-square-fill-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-plus-square-fill' viewBox='0 0 16 16'%3E%3Cpath d='M2 0a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V2a2 2 0 0 0-2-2H2zm6.5 4.5v3h3a.5.5 0 0 1 0 1h-3v3a.5.5 0 0 1-1 0v-3h-3a.5.5 0 0 1 0-1h3v-3a.5.5 0 0 1 1 0z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.bi-list-nested-nav-menu {
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='white' class='bi bi-list-nested' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M4.5 11.5A.5.5 0 0 1 5 11h10a.5.5 0 0 1 0 1H5a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 3 7h10a.5.5 0 0 1 0 1H3a.5.5 0 0 1-.5-.5zm-2-4A.5.5 0 0 1 1 3h10a.5.5 0 0 1 0 1H1a.5.5 0 0 1-.5-.5z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
font-size: 0.9rem;
|
||||
padding-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.nav-item:first-of-type {
|
||||
padding-top: 1rem;
|
||||
}
|
||||
|
||||
.nav-item:last-of-type {
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
.nav-item ::deep .nav-link {
|
||||
color: #d7d7d7;
|
||||
background: none;
|
||||
border: none;
|
||||
border-radius: 4px;
|
||||
height: 3rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
line-height: 3rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.nav-item ::deep a.active {
|
||||
background-color: rgba(255,255,255,0.37);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-item ::deep .nav-link:hover {
|
||||
background-color: rgba(255,255,255,0.1);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.nav-scrollable {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar-toggler:checked ~ .nav-scrollable {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@media (min-width: 641px) {
|
||||
.navbar-toggler {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.nav-scrollable {
|
||||
/* Never collapse the sidebar for wide screens */
|
||||
display: block;
|
||||
|
||||
/* Allow sidebar to scroll for tall menus */
|
||||
height: calc(100vh - 3.5rem);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<script type="module" src="@Assets["Components/Layout/ReconnectModal.razor.js"]"></script>
|
||||
|
||||
<dialog id="components-reconnect-modal" data-nosnippet>
|
||||
<div class="components-reconnect-container">
|
||||
<div class="components-rejoining-animation" aria-hidden="true">
|
||||
<div></div>
|
||||
<div></div>
|
||||
</div>
|
||||
<p class="components-reconnect-first-attempt-visible">
|
||||
Rejoining the server...
|
||||
</p>
|
||||
<p class="components-reconnect-repeated-attempt-visible">
|
||||
Rejoin failed... trying again in <span id="components-seconds-to-next-attempt"></span> seconds.
|
||||
</p>
|
||||
<p class="components-reconnect-failed-visible">
|
||||
Failed to rejoin.<br />Please retry or reload the page.
|
||||
</p>
|
||||
<button id="components-reconnect-button" class="components-reconnect-failed-visible">
|
||||
Retry
|
||||
</button>
|
||||
<p class="components-pause-visible">
|
||||
The session has been paused by the server.
|
||||
</p>
|
||||
<button id="components-resume-button" class="components-pause-visible">
|
||||
Resume
|
||||
</button>
|
||||
<p class="components-resume-failed-visible">
|
||||
Failed to resume the session.<br />Please reload the page.
|
||||
</p>
|
||||
</div>
|
||||
</dialog>
|
||||
@@ -0,0 +1,157 @@
|
||||
.components-reconnect-first-attempt-visible,
|
||||
.components-reconnect-repeated-attempt-visible,
|
||||
.components-reconnect-failed-visible,
|
||||
.components-pause-visible,
|
||||
.components-resume-failed-visible,
|
||||
.components-rejoining-animation {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible,
|
||||
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation,
|
||||
#components-reconnect-modal.components-reconnect-paused .components-pause-visible,
|
||||
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible,
|
||||
#components-reconnect-modal.components-reconnect-retrying,
|
||||
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible,
|
||||
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation,
|
||||
#components-reconnect-modal.components-reconnect-failed,
|
||||
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
||||
#components-reconnect-modal {
|
||||
background-color: white;
|
||||
width: 20rem;
|
||||
margin: 20vh auto;
|
||||
padding: 2rem;
|
||||
border: 0;
|
||||
border-radius: 0.5rem;
|
||||
box-shadow: 0 3px 6px 2px rgba(0, 0, 0, 0.3);
|
||||
opacity: 0;
|
||||
transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
|
||||
animation: components-reconnect-modal-fadeOutOpacity 0.5s both;
|
||||
&[open]
|
||||
|
||||
{
|
||||
animation: components-reconnect-modal-slideUp 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity 0.5s ease-in-out 0.3s;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#components-reconnect-modal::backdrop {
|
||||
background-color: rgba(0, 0, 0, 0.4);
|
||||
animation: components-reconnect-modal-fadeInOpacity 0.5s ease-in-out;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
@keyframes components-reconnect-modal-slideUp {
|
||||
0% {
|
||||
transform: translateY(30px) scale(0.95);
|
||||
}
|
||||
|
||||
100% {
|
||||
transform: translateY(0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes components-reconnect-modal-fadeInOpacity {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes components-reconnect-modal-fadeOutOpacity {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.components-reconnect-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 1rem;
|
||||
}
|
||||
|
||||
#components-reconnect-modal p {
|
||||
margin: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#components-reconnect-modal button {
|
||||
border: 0;
|
||||
background-color: #6b9ed2;
|
||||
color: white;
|
||||
padding: 4px 24px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
#components-reconnect-modal button:hover {
|
||||
background-color: #3b6ea2;
|
||||
}
|
||||
|
||||
#components-reconnect-modal button:active {
|
||||
background-color: #6b9ed2;
|
||||
}
|
||||
|
||||
.components-rejoining-animation {
|
||||
position: relative;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.components-rejoining-animation div {
|
||||
position: absolute;
|
||||
border: 3px solid #0087ff;
|
||||
opacity: 1;
|
||||
border-radius: 50%;
|
||||
animation: components-rejoining-animation 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
|
||||
}
|
||||
|
||||
.components-rejoining-animation div:nth-child(2) {
|
||||
animation-delay: -0.5s;
|
||||
}
|
||||
|
||||
@keyframes components-rejoining-animation {
|
||||
0% {
|
||||
top: 40px;
|
||||
left: 40px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
4.9% {
|
||||
top: 40px;
|
||||
left: 40px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
5% {
|
||||
top: 40px;
|
||||
left: 40px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
100% {
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
// Set up event handlers
|
||||
const reconnectModal = document.getElementById("components-reconnect-modal");
|
||||
reconnectModal.addEventListener("components-reconnect-state-changed", handleReconnectStateChanged);
|
||||
|
||||
const retryButton = document.getElementById("components-reconnect-button");
|
||||
retryButton.addEventListener("click", retry);
|
||||
|
||||
const resumeButton = document.getElementById("components-resume-button");
|
||||
resumeButton.addEventListener("click", resume);
|
||||
|
||||
function handleReconnectStateChanged(event) {
|
||||
if (event.detail.state === "show") {
|
||||
reconnectModal.showModal();
|
||||
} else if (event.detail.state === "hide") {
|
||||
reconnectModal.close();
|
||||
} else if (event.detail.state === "failed") {
|
||||
document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
|
||||
} else if (event.detail.state === "rejected") {
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
async function retry() {
|
||||
document.removeEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
|
||||
|
||||
try {
|
||||
// Reconnect will asynchronously return:
|
||||
// - true to mean success
|
||||
// - false to mean we reached the server, but it rejected the connection (e.g., unknown circuit ID)
|
||||
// - exception to mean we didn't reach the server (this can be sync or async)
|
||||
const successful = await Blazor.reconnect();
|
||||
if (!successful) {
|
||||
// We have been able to reach the server, but the circuit is no longer available.
|
||||
// We'll reload the page so the user can continue using the app as quickly as possible.
|
||||
const resumeSuccessful = await Blazor.resumeCircuit();
|
||||
if (!resumeSuccessful) {
|
||||
location.reload();
|
||||
} else {
|
||||
reconnectModal.close();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
// We got an exception, server is currently unavailable
|
||||
document.addEventListener("visibilitychange", retryWhenDocumentBecomesVisible);
|
||||
}
|
||||
}
|
||||
|
||||
async function resume() {
|
||||
try {
|
||||
const successful = await Blazor.resumeCircuit();
|
||||
if (!successful) {
|
||||
location.reload();
|
||||
}
|
||||
} catch {
|
||||
location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
async function retryWhenDocumentBecomesVisible() {
|
||||
if (document.visibilityState === "visible") {
|
||||
await retry();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
@page "/counter"
|
||||
@rendermode InteractiveServer
|
||||
|
||||
<PageTitle>Counter</PageTitle>
|
||||
|
||||
<h1>Counter</h1>
|
||||
|
||||
<p role="status">Current count: @currentCount</p>
|
||||
|
||||
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
|
||||
|
||||
@code {
|
||||
private int currentCount = 0;
|
||||
|
||||
private void IncrementCount()
|
||||
{
|
||||
currentCount++;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,227 @@
|
||||
@page "/"
|
||||
@using QuantEngine.Core.Models
|
||||
@using QuantEngine.Core.Interfaces
|
||||
@inject IWorkspaceRepository WorkspaceRepo
|
||||
@inject NavigationManager NavManager
|
||||
|
||||
<PageTitle>Quant Engine - Administration Dashboard</PageTitle>
|
||||
|
||||
<div class="dashboard-container">
|
||||
<!-- Header -->
|
||||
<header class="db-header">
|
||||
<div class="logo-area">
|
||||
<span class="icon">📈</span>
|
||||
<h1>Quant Engine</h1>
|
||||
<span class="badge">Active Workspace</span>
|
||||
</div>
|
||||
<div class="system-status">
|
||||
<span class="status-dot green"></span>
|
||||
<span>PostgreSQL: Connected</span>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Main Content Grid -->
|
||||
<div class="db-grid">
|
||||
<!-- Sidebar Summary Cards -->
|
||||
<aside class="summary-panel">
|
||||
<!-- Locks Card -->
|
||||
<div class="card status-card">
|
||||
<h3>🔒 Active Locks</h3>
|
||||
@if (locks.Any())
|
||||
{
|
||||
<ul class="status-list">
|
||||
@foreach (var l in locks)
|
||||
{
|
||||
<li>
|
||||
<strong>@l.Domain</strong> / <span>@l.TargetRef</span>
|
||||
<span class="meta">by @l.LockedBy - @l.Reason (@l.LockedAt)</span>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="empty-state">No active locks in workspace.</p>
|
||||
}
|
||||
</div>
|
||||
|
||||
<!-- Approvals Card -->
|
||||
<div class="card status-card">
|
||||
<h3>✅ Approvals v2</h3>
|
||||
@if (approvals.Any())
|
||||
{
|
||||
<ul class="status-list">
|
||||
@foreach (var a in approvals)
|
||||
{
|
||||
<li class="approval-item">
|
||||
<div class="approval-meta">
|
||||
<strong>@a.Domain</strong> <span class="badge @(a.Status.ToLower())">@a.Status</span>
|
||||
</div>
|
||||
<span class="meta">by @a.ApprovedBy @@ @a.ApprovedAt</span>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="empty-state">No approvals pending.</p>
|
||||
}
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<!-- Main Settings / Configuration Grid -->
|
||||
<main class="main-panel">
|
||||
<div class="card table-card">
|
||||
<div class="table-header">
|
||||
<h2>⚙️ System Config (Settings)</h2>
|
||||
<button class="btn btn-primary" @onclick="ShowAddSettingModal">Add Configuration</button>
|
||||
</div>
|
||||
|
||||
<div class="table-container">
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Ordinal</th>
|
||||
<th>Key</th>
|
||||
<th>Value (JSON)</th>
|
||||
<th>Note</th>
|
||||
<th>Updated At</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (settings != null && settings.Any())
|
||||
{
|
||||
@foreach (var s in settings)
|
||||
{
|
||||
<tr>
|
||||
<td>@s.Ordinal</td>
|
||||
<td class="font-mono"><strong>@s.Key</strong></td>
|
||||
<td class="font-mono value-cell">@s.ValueJson</td>
|
||||
<td>@s.Note</td>
|
||||
<td class="meta">@s.UpdatedAt</td>
|
||||
<td>
|
||||
<div class="action-buttons">
|
||||
<button class="btn btn-sm btn-secondary" @onclick="() => EditSetting(s)">Edit</button>
|
||||
<button class="btn btn-sm btn-danger" @onclick="() => DeleteSetting(s.Key)">Delete</button>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<tr>
|
||||
<td colspan="6" class="empty-row">No configuration settings found.</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<!-- Add/Edit Modal -->
|
||||
@if (showModal)
|
||||
{
|
||||
<div class="modal-backdrop" @onclick="CloseModal">
|
||||
<div class="modal-content" @onclick:stopPropagation="true">
|
||||
<div class="modal-header">
|
||||
<h3>@(isEditMode ? "Edit Setting" : "Add Setting")</h3>
|
||||
<button class="close-btn" @onclick="CloseModal">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="form-group">
|
||||
<label>Key</label>
|
||||
<input type="text" class="form-control" @bind="modalSetting.Key" disabled="@isEditMode" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Value (JSON)</label>
|
||||
<textarea class="form-control font-mono" rows="4" @bind="modalSetting.ValueJson"></textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Note</label>
|
||||
<input type="text" class="form-control" @bind="modalSetting.Note" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>Ordinal</label>
|
||||
<input type="number" class="form-control" @bind="modalSetting.Ordinal" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-secondary" @onclick="CloseModal">Cancel</button>
|
||||
<button class="btn btn-primary" @onclick="SaveSetting">Save Changes</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
@code {
|
||||
private List<Setting> settings = new();
|
||||
private List<WorkspaceLock> locks = new();
|
||||
private List<WorkspaceApproval> approvals = new();
|
||||
|
||||
private bool showModal = false;
|
||||
private bool isEditMode = false;
|
||||
private Setting modalSetting = new();
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await LoadData();
|
||||
}
|
||||
|
||||
private async Task LoadData()
|
||||
{
|
||||
settings = (await WorkspaceRepo.GetSettingsAsync()).ToList();
|
||||
locks = (await WorkspaceRepo.GetLocksAsync()).ToList();
|
||||
approvals = (await WorkspaceRepo.GetApprovalsAsync()).ToList();
|
||||
}
|
||||
|
||||
private void ShowAddSettingModal()
|
||||
{
|
||||
isEditMode = false;
|
||||
modalSetting = new Setting
|
||||
{
|
||||
Ordinal = settings.Count + 1,
|
||||
UpdatedAt = DateTime.UtcNow.AddHours(9).ToString("o")
|
||||
};
|
||||
showModal = true;
|
||||
}
|
||||
|
||||
private void EditSetting(Setting s)
|
||||
{
|
||||
isEditMode = true;
|
||||
modalSetting = new Setting
|
||||
{
|
||||
Ordinal = s.Ordinal,
|
||||
Key = s.Key,
|
||||
ValueJson = s.ValueJson,
|
||||
Note = s.Note,
|
||||
UpdatedAt = DateTime.UtcNow.AddHours(9).ToString("o")
|
||||
};
|
||||
showModal = true;
|
||||
}
|
||||
|
||||
private async Task SaveSetting()
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(modalSetting.Key)) return;
|
||||
|
||||
modalSetting.UpdatedAt = DateTime.UtcNow.AddHours(9).ToString("o");
|
||||
await WorkspaceRepo.UpsertSettingAsync(modalSetting);
|
||||
showModal = false;
|
||||
await LoadData();
|
||||
}
|
||||
|
||||
private async Task DeleteSetting(string key)
|
||||
{
|
||||
await WorkspaceRepo.DeleteSettingAsync(key);
|
||||
await LoadData();
|
||||
}
|
||||
|
||||
private void CloseModal()
|
||||
{
|
||||
showModal = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
@page "/Error"
|
||||
@using System.Diagnostics
|
||||
|
||||
<PageTitle>Error</PageTitle>
|
||||
|
||||
<h1 class="text-danger">Error.</h1>
|
||||
<h2 class="text-danger">An error occurred while processing your request.</h2>
|
||||
|
||||
@if (ShowRequestId)
|
||||
{
|
||||
<p>
|
||||
<strong>Request ID:</strong> <code>@RequestId</code>
|
||||
</p>
|
||||
}
|
||||
|
||||
<h3>Development Mode</h3>
|
||||
<p>
|
||||
Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.
|
||||
</p>
|
||||
<p>
|
||||
<strong>The Development environment shouldn't be enabled for deployed applications.</strong>
|
||||
It can result in displaying sensitive information from exceptions to end users.
|
||||
For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
|
||||
and restarting the app.
|
||||
</p>
|
||||
|
||||
@code{
|
||||
[CascadingParameter]
|
||||
private HttpContext? HttpContext { get; set; }
|
||||
|
||||
private string? RequestId { get; set; }
|
||||
private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
|
||||
|
||||
protected override void OnInitialized() =>
|
||||
RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
@page "/"
|
||||
|
||||
<PageTitle>Home</PageTitle>
|
||||
|
||||
<h1>Hello, world!</h1>
|
||||
|
||||
Welcome to your new app.
|
||||
@@ -0,0 +1,5 @@
|
||||
@page "/not-found"
|
||||
@layout MainLayout
|
||||
|
||||
<h3>Not Found</h3>
|
||||
<p>Sorry, the content you are looking for does not exist.</p>
|
||||
@@ -0,0 +1,64 @@
|
||||
@page "/weather"
|
||||
@attribute [StreamRendering]
|
||||
|
||||
<PageTitle>Weather</PageTitle>
|
||||
|
||||
<h1>Weather</h1>
|
||||
|
||||
<p>This component demonstrates showing data.</p>
|
||||
|
||||
@if (forecasts == null)
|
||||
{
|
||||
<p><em>Loading...</em></p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Date</th>
|
||||
<th aria-label="Temperature in Celsius">Temp. (C)</th>
|
||||
<th aria-label="Temperature in Fahrenheit">Temp. (F)</th>
|
||||
<th>Summary</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var forecast in forecasts)
|
||||
{
|
||||
<tr>
|
||||
<td>@forecast.Date.ToShortDateString()</td>
|
||||
<td>@forecast.TemperatureC</td>
|
||||
<td>@forecast.TemperatureF</td>
|
||||
<td>@forecast.Summary</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
|
||||
@code {
|
||||
private WeatherForecast[]? forecasts;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
// Simulate asynchronous loading to demonstrate streaming rendering
|
||||
await Task.Delay(500);
|
||||
|
||||
var startDate = DateOnly.FromDateTime(DateTime.Now);
|
||||
var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
|
||||
forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
|
||||
{
|
||||
Date = startDate.AddDays(index),
|
||||
TemperatureC = Random.Shared.Next(-20, 55),
|
||||
Summary = summaries[Random.Shared.Next(summaries.Length)]
|
||||
}).ToArray();
|
||||
}
|
||||
|
||||
private class WeatherForecast
|
||||
{
|
||||
public DateOnly Date { get; set; }
|
||||
public int TemperatureC { get; set; }
|
||||
public string? Summary { get; set; }
|
||||
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
<Router AppAssembly="typeof(Program).Assembly" NotFoundPage="typeof(Pages.NotFound)">
|
||||
<Found Context="routeData">
|
||||
<RouteView RouteData="routeData" DefaultLayout="typeof(Layout.MainLayout)" />
|
||||
<FocusOnNavigate RouteData="routeData" Selector="h1" />
|
||||
</Found>
|
||||
</Router>
|
||||
@@ -0,0 +1,11 @@
|
||||
@using System.Net.Http
|
||||
@using System.Net.Http.Json
|
||||
@using Microsoft.AspNetCore.Components.Forms
|
||||
@using Microsoft.AspNetCore.Components.Routing
|
||||
@using Microsoft.AspNetCore.Components.Web
|
||||
@using static Microsoft.AspNetCore.Components.Web.RenderMode
|
||||
@using Microsoft.AspNetCore.Components.Web.Virtualization
|
||||
@using Microsoft.JSInterop
|
||||
@using QuantEngine.Web
|
||||
@using QuantEngine.Web.Components
|
||||
@using QuantEngine.Web.Components.Layout
|
||||
@@ -0,0 +1,39 @@
|
||||
using QuantEngine.Web.Components;
|
||||
using QuantEngine.Infrastructure.Data;
|
||||
using QuantEngine.Infrastructure.Repositories;
|
||||
using QuantEngine.Core.Interfaces;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
// Add services to the container.
|
||||
builder.Services.AddRazorComponents()
|
||||
.AddInteractiveServerComponents();
|
||||
|
||||
// PostgreSQL Dapper Setup
|
||||
var connectionString = "Host=178.104.200.7;Database=giteadb;Username=gitea;Password=C8RFlZ9fdQrBA1vyLhLDS4v70I8dJfRS2ERJW4+zsS4=;Search Path=quantengine;";
|
||||
builder.Services.AddSingleton<IDbConnectionFactory>(new DbConnectionFactory(connectionString));
|
||||
builder.Services.AddScoped<IWorkspaceRepository, WorkspaceRepository>();
|
||||
builder.Services.AddHttpClient();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Enable reverse proxy subpath mapping
|
||||
app.UsePathBase("/quant");
|
||||
|
||||
// Configure the HTTP request pipeline.
|
||||
if (!app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseExceptionHandler("/Error", createScopeForErrors: true);
|
||||
app.UseHsts();
|
||||
}
|
||||
app.UseStatusCodePagesWithReExecute("/not-found", createScopeForStatusCodePages: true);
|
||||
app.UseHttpsRedirection();
|
||||
|
||||
app.UseAntiforgery();
|
||||
|
||||
app.MapStaticAssets();
|
||||
app.MapRazorComponents<App>()
|
||||
.AddInteractiveServerRenderMode();
|
||||
|
||||
app.Run();
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"http": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "http://localhost:5265",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"https": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"launchBrowser": true,
|
||||
"applicationUrl": "https://localhost:7112;http://localhost:5265",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\QuantEngine.Infrastructure\QuantEngine.Infrastructure.csproj" />
|
||||
<ProjectReference Include="..\QuantEngine.Application\QuantEngine.Application.csproj" />
|
||||
<ProjectReference Include="..\QuantEngine.Core\QuantEngine.Core.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<BlazorDisableThrowNavigationException>true</BlazorDisableThrowNavigationException>
|
||||
</PropertyGroup>
|
||||
|
||||
</Project>
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"QuantEngine.Web/1.0.0": {
|
||||
"dependencies": {
|
||||
"QuantEngine.Application": "1.0.0",
|
||||
"QuantEngine.Core": "1.0.0",
|
||||
"QuantEngine.Infrastructure": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Web.dll": {}
|
||||
}
|
||||
},
|
||||
"Dapper/2.1.79": {
|
||||
"runtime": {
|
||||
"lib/net10.0/Dapper.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.1.79.29349"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql/10.0.3": {
|
||||
"runtime": {
|
||||
"lib/net10.0/Npgsql.dll": {
|
||||
"assemblyVersion": "10.0.3.0",
|
||||
"fileVersion": "10.0.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Application/1.0.0": {
|
||||
"dependencies": {
|
||||
"QuantEngine.Core": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Application.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Core/1.0.0": {
|
||||
"runtime": {
|
||||
"QuantEngine.Core.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"QuantEngine.Infrastructure/1.0.0": {
|
||||
"dependencies": {
|
||||
"Dapper": "2.1.79",
|
||||
"Npgsql": "10.0.3",
|
||||
"QuantEngine.Application": "1.0.0",
|
||||
"QuantEngine.Core": "1.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"QuantEngine.Infrastructure.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"QuantEngine.Web/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Dapper/2.1.79": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-8YijbzgTfmqmQOnVNorYM6K++pxqnW3nJ4aC1sRHzxUA2CcuoJ9gsTem3kgBnPRMc38zZHl4Esb6hAezXIEEuw==",
|
||||
"path": "dapper/2.1.79",
|
||||
"hashPath": "dapper.2.1.79.nupkg.sha512"
|
||||
},
|
||||
"Npgsql/10.0.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7nb5YzXuvWWJxB0J8DiyL3we+X4FOctZrt0fIBnucOIaIevFEEwGQVZKtiu9olXdlNAK1eNgqSral6r/jlhI4w==",
|
||||
"path": "npgsql/10.0.3",
|
||||
"hashPath": "npgsql.10.0.3.nupkg.sha512"
|
||||
},
|
||||
"QuantEngine.Application/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"QuantEngine.Core/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"QuantEngine.Infrastructure/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "10.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
|
||||
"Microsoft.AspNetCore.Components.Endpoints.NavigationManager.DisableThrowNavigationException": true
|
||||
}
|
||||
}
|
||||
}
|
||||
+1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
|
||||
@@ -0,0 +1,7 @@
|
||||
// <auto-generated/>
|
||||
namespace Microsoft.CodeAnalysis
|
||||
{
|
||||
internal sealed partial class EmbeddedAttribute : global::System.Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("QuantEngine.Web")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9abb8d3bc31eb38d5c27cbd3ca734da4eeec9609")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("QuantEngine.Web")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("QuantEngine.Web")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// MSBuild WriteCodeFragment 클래스에서 생성되었습니다.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
69636524d965e560a3a3992f665eaf8ed2d29cdf3edd5c42b638668baa82df4d
|
||||
+71
@@ -0,0 +1,71 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net10.0
|
||||
build_property.TargetFrameworkIdentifier = .NETCoreApp
|
||||
build_property.TargetFrameworkVersion = v10.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb = true
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = QuantEngine.Web
|
||||
build_property.RootNamespace = QuantEngine.Web
|
||||
build_property.ProjectDir = C:\Temp\data_feed\src\dotnet\QuantEngine.Web\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
build_property.RazorLangVersion = 9.0
|
||||
build_property.SupportLocalizedComponentNames =
|
||||
build_property.GenerateRazorMetadataSourceChecksumAttributes =
|
||||
build_property.MSBuildProjectDirectory = C:\Temp\data_feed\src\dotnet\QuantEngine.Web
|
||||
build_property._RazorSourceGeneratorDebug =
|
||||
build_property.EffectiveAnalysisLevelStyle = 10.0
|
||||
build_property.EnableCodeStyleSeverity =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/App.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xBcHAucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Counter.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xDb3VudGVyLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Dashboard.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xEYXNoYm9hcmQucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Error.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xFcnJvci5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Home.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xIb21lLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/NotFound.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xOb3RGb3VuZC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Pages/Weather.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xQYWdlc1xXZWF0aGVyLnJhem9y
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Routes.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xSb3V0ZXMucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/_Imports.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xfSW1wb3J0cy5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope =
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Layout/MainLayout.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTWFpbkxheW91dC5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope = b-d6y8adeyxc
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Layout/NavMenu.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcTmF2TWVudS5yYXpvcg==
|
||||
build_metadata.AdditionalFiles.CssScope = b-9gr5lv177o
|
||||
|
||||
[C:/Temp/data_feed/src/dotnet/QuantEngine.Web/Components/Layout/ReconnectModal.razor]
|
||||
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xMYXlvdXRcUmVjb25uZWN0TW9kYWwucmF6b3I=
|
||||
build_metadata.AdditionalFiles.CssScope = b-9dgxcj10me
|
||||
@@ -0,0 +1,18 @@
|
||||
// <auto-generated/>
|
||||
global using Microsoft.AspNetCore.Builder;
|
||||
global using Microsoft.AspNetCore.Hosting;
|
||||
global using Microsoft.AspNetCore.Http;
|
||||
global using Microsoft.AspNetCore.Routing;
|
||||
global using Microsoft.Extensions.Configuration;
|
||||
global using Microsoft.Extensions.DependencyInjection;
|
||||
global using Microsoft.Extensions.Hosting;
|
||||
global using Microsoft.Extensions.Logging;
|
||||
global using Microsoft.Extensions.Validation.Embedded;
|
||||
global using System;
|
||||
global using System.Collections.Generic;
|
||||
global using System.IO;
|
||||
global using System.Linq;
|
||||
global using System.Net.Http;
|
||||
global using System.Net.Http.Json;
|
||||
global using System.Threading;
|
||||
global using System.Threading.Tasks;
|
||||
Binary file not shown.
BIN
Binary file not shown.
+1
@@ -0,0 +1 @@
|
||||
6956cb7c3b7f8dc161be037f277ca8ad489746b41b4cfc6aebd5bf4b3bc73bea
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\appsettings.Development.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\appsettings.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.staticwebassets.runtime.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.staticwebassets.endpoints.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.exe
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.deps.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.runtimeconfig.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Web.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Application.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Core.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Infrastructure.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Infrastructure.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Application.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\QuantEngine.Core.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\EmbeddedAttribute.cs
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\ValidatableTypeAttribute.cs
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.csproj.AssemblyReference.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\rpswa.dswa.cache.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.GeneratedMSBuildEditorConfig.editorconfig
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.AssemblyInfoInputs.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.AssemblyInfo.cs
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.csproj.CoreCompileInputs.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.MvcApplicationPartsAssemblyInfo.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\rjimswa.dswa.cache.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\rjsmrazor.dswa.cache.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\rjsmcshtml.dswa.cache.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\Components\Layout\MainLayout.razor.rz.scp.css
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\Components\Layout\NavMenu.razor.rz.scp.css
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\Components\Layout\ReconnectModal.razor.rz.scp.css
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\bundle\QuantEngine.Web.styles.css
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\scopedcss\projectbundle\QuantEngine.Web.bundle.scp.css
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dgr8mv739g-{0}-bqjiyaj88i-bqjiyaj88i.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\l0f1c41wbh-{0}-c2jlpeoesf-c2jlpeoesf.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ny3xbgedo0-{0}-erw9l3u2r3-erw9l3u2r3.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\yyzux970us-{0}-aexeepp0ev-aexeepp0ev.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\s8tfmvcl6l-{0}-d7shbmvgxk-d7shbmvgxk.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\buy0lgnna4-{0}-ausgxo2sd3-ausgxo2sd3.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\rftpckz71e-{0}-k8d9w2qqmf-k8d9w2qqmf.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\1xufxwh45d-{0}-cosvhxvwiu-cosvhxvwiu.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\110gjqadz3-{0}-ub07r2b239-ub07r2b239.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\moveir2wlt-{0}-fvhpjtyr6v-fvhpjtyr6v.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\i5gc3220r3-{0}-b7pk76d08c-b7pk76d08c.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\xhunqdkvqb-{0}-fsbi9cje9m-fsbi9cje9m.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\gomvvqnjlm-{0}-rzd6atqjts-rzd6atqjts.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\c34v41vs4l-{0}-ee0r1s7dh0-ee0r1s7dh0.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0p7lrldjgj-{0}-dxx9fxp4il-dxx9fxp4il.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0auc0xnlsy-{0}-jd9uben2k1-jd9uben2k1.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\pbeu27ik9w-{0}-khv3u5hwcm-khv3u5hwcm.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\79raj0bcrr-{0}-r4e9w2rdcm-r4e9w2rdcm.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\jqrauj2svw-{0}-lcd1t2u6c8-lcd1t2u6c8.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\pj5n2mkkzw-{0}-c2oey78nd0-c2oey78nd0.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dt9lb9me9i-{0}-tdbxkamptv-tdbxkamptv.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\lwh7ckeki7-{0}-j5mq2jizvt-j5mq2jizvt.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\4cblaxq6jh-{0}-06098lyss8-06098lyss8.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\44s2eqp64d-{0}-nvvlpmu67g-nvvlpmu67g.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\gcxof6xqvd-{0}-s35ty4nyc5-s35ty4nyc5.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\z9wv7fs72k-{0}-pj5nd1wqec-pj5nd1wqec.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\4072jq1i2h-{0}-46ein0sx1k-46ein0sx1k.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\a4eqfiv3ub-{0}-v0zj4ognzu-v0zj4ognzu.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\rg0bjkw6wb-{0}-37tfw0ft22-37tfw0ft22.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\jomvpxly64-{0}-hrwsygsryq-hrwsygsryq.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\u4l44l4mup-{0}-pk9g2wxc8p-pk9g2wxc8p.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\s45yklcy5s-{0}-ft3s53vfgj-ft3s53vfgj.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ryegp6ubqi-{0}-6cfz1n2cew-6cfz1n2cew.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\gfm26p5c1q-{0}-6pdc2jztkx-6pdc2jztkx.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\wh1z5habmz-{0}-493y06b0oq-493y06b0oq.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\oog3rser0x-{0}-iovd86k7lj-iovd86k7lj.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dd5v02aqjc-{0}-vr1egmr9el-vr1egmr9el.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\61rmegrlmv-{0}-kbrnm935zg-kbrnm935zg.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\0x3oeluflx-{0}-jj8uyg4cgr-jj8uyg4cgr.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\h7pf8rqo63-{0}-y7v9cxd14o-y7v9cxd14o.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\a1937s5xj1-{0}-notf2xhcfb-notf2xhcfb.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\a7rq2yiqop-{0}-h1s4sie4z3-h1s4sie4z3.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\ykh8zi7pka-{0}-63fj8s7r0e-63fj8s7r0e.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\8q9g0t5yrl-{0}-0j3bgjxly4-0j3bgjxly4.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\t9yb5ynpxl-{0}-13ja33weya-13ja33weya.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\nr5locadir-{0}-j8lzlu28q6-j8lzlu28q6.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\dym80g6kqp-{0}-u1n4jc5v46-u1n4jc5v46.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\b7jn6yc0gz-{0}-yi314np04p-yi314np04p.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\vpvw6nj9ax-{0}-yi314np04p-yi314np04p.gz
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\staticwebassets.build.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\staticwebassets.build.json.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\staticwebassets.development.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\staticwebassets.build.endpoints.json
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\swae.build.ex.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEng.C85672E0.Up2Date
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\refint\QuantEngine.Web.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.pdb
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\QuantEngine.Web.genruntimeconfig.cache
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\ref\QuantEngine.Web.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Dapper.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\bin\Debug\net10.0\Npgsql.dll
|
||||
C:\Temp\data_feed\src\dotnet\QuantEngine.Web\obj\Debug\net10.0\compressed\q2w3mddmwi-{0}-4c8rkwezul-4c8rkwezul.gz
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
f78c5380dc04b6bce951ebd484d8aad5543d6951999111b3dffeed8a2a8305d3
|
||||
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
// <auto-generated/>
|
||||
namespace Microsoft.Extensions.Validation.Embedded
|
||||
{
|
||||
[global::Microsoft.CodeAnalysis.EmbeddedAttribute]
|
||||
[global::System.AttributeUsage(global::System.AttributeTargets.Class)]
|
||||
internal sealed class ValidatableTypeAttribute : global::System.Attribute
|
||||
{
|
||||
}
|
||||
}
|
||||
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user