web_plsql 1.4.0 → 1.5.0
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/README.md +12 -0
- package/dist/chunk-CfYAbeIz.mjs +13 -0
- package/dist/frontend/assets/main-B5q2ur8E.js +147 -0
- package/dist/frontend/assets/main-B5q2ur8E.js.br +0 -0
- package/dist/frontend/assets/main-B5q2ur8E.js.gz +0 -0
- package/dist/frontend/assets/main-CoERzZAr.css +1 -0
- package/dist/frontend/assets/main-CoERzZAr.css.br +0 -0
- package/dist/frontend/assets/main-CoERzZAr.css.gz +0 -0
- package/dist/frontend/index.html +2 -2
- package/dist/frontend/index.html.br +0 -0
- package/dist/frontend/index.html.gz +0 -0
- package/dist/index.d.mts +3 -2
- package/dist/index.mjs +17 -176
- package/dist/index.mjs.map +1 -1
- package/dist/{oracledb-mock-Dn8aHtd7.mjs → oracledb-mock-Cya43xKB.mjs} +3 -4
- package/dist/oracledb-mock-Cya43xKB.mjs.map +1 -0
- package/package.json +45 -48
- package/dist/chunk-DQk6qfdC.mjs +0 -18
- package/dist/frontend/assets/main-C_esuqtI.js +0 -147
- package/dist/frontend/assets/main-C_esuqtI.js.br +0 -0
- package/dist/frontend/assets/main-C_esuqtI.js.gz +0 -0
- package/dist/frontend/assets/main-bU4x_yEW.css +0 -1
- package/dist/frontend/assets/main-bU4x_yEW.css.br +0 -0
- package/dist/frontend/assets/main-bU4x_yEW.css.gz +0 -0
- package/dist/oracledb-mock-Dn8aHtd7.mjs.map +0 -1
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
:root{--accent-rgb:59, 130, 246;--bg-main:#f8fafc;--bg-side:#fff;--bg-card:#fff;--bg-hover:#f1f5f9;--text-main:#475569;--text-bright:#0f172a;--accent:#3b82f6;--border:#e2e8f0;--success:#10b981;--warning:#f59e0b;--danger:#ef4444;--shadow:0 1px 3px 0 #0000001a, 0 1px 2px -1px #0000001a;--terminal-bg:#1e293b;--config-key:#3b82f6}body.dark{--bg-main:#0f172a;--bg-side:#1e293b;--bg-card:#1e293b;--bg-hover:#334155;--text-main:#94a3b8;--text-bright:#f8fafc;--accent:#3b82f6;--border:#334155;--success:#10b981;--warning:#f59e0b;--danger:#ef4444;--shadow:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--terminal-bg:#000;--config-key:#60a5fa}body{background-color:var(--bg-main);color:var(--text-main);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;transition:background-color .3s,color .3s}.app-container{height:100vh;display:flex}.sidebar{background-color:var(--bg-side);border-right:1px solid var(--border);z-index:10;flex-direction:column;width:240px;display:flex}.logo{color:var(--text-bright);align-items:center;gap:12px;padding:24px;font-size:1.25rem;font-weight:700;display:flex}.logo .material-symbols-rounded{color:var(--accent);font-size:28px}nav{flex:1;padding:12px}.status-indicator{border-top:1px solid var(--border);align-items:center;padding:20px;font-size:.85rem;font-weight:500;display:flex}.dot{background-color:#64748b;border-radius:50%;width:8px;height:8px;margin-right:12px;display:inline-block;box-shadow:0 0 0 4px #64748b1a}.dot.running{background-color:var(--success);box-shadow:0 0 0 4px #10b98133}.dot.paused{background-color:var(--warning);box-shadow:0 0 0 4px #f59e0b33}.content{flex-direction:column;flex:1;display:flex;overflow:hidden}.main-header{background-color:var(--bg-main);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:20px 32px;display:flex}.main-header h1{color:var(--text-bright);align-items:center;gap:12px;margin:0;font-size:1.5rem;font-weight:600;display:flex}.main-header h1 .material-symbols-rounded{color:var(--accent);font-size:28px}.header-toolbar{align-items:center;gap:24px;display:flex}.auto-refresh-group{background:var(--bg-side);border:1px solid var(--border);border-radius:6px;align-items:center;gap:12px;padding:6px 12px;font-size:.875rem;display:flex}.auto-refresh-group select{color:var(--text-bright);cursor:pointer;background:0 0;border:none;font-weight:500}.view{flex:1;padding:32px;overflow-y:auto}.metrics-grid,.pools-grid,.cache-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;margin-bottom:32px;display:grid}.card{background-color:var(--bg-card);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;padding:24px}.card-header{align-items:center;gap:12px;margin-bottom:16px;display:flex}.card-header .material-symbols-rounded{color:var(--accent)}.card h3{text-transform:uppercase;letter-spacing:.05em;color:var(--text-main);margin:0;font-size:.875rem}.card p{color:var(--text-bright);margin:0;font-size:2rem;font-weight:700}.card small{color:var(--text-main);margin-top:8px;font-size:.875rem;display:block}.card.warning{border-left:4px solid var(--warning)}.table-container{background:var(--bg-card);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;overflow:hidden}table{border-collapse:collapse;width:100%}th,td{text-align:left;border-bottom:1px solid var(--border);padding:16px 24px}th{background-color:var(--bg-hover);color:var(--text-main);text-transform:uppercase;letter-spacing:.05em;font-size:.75rem;font-weight:600}td{color:var(--text-bright);font-size:.9375rem}tr:last-child td{border-bottom:none}.terminal-container,.config-container{background-color:var(--bg-side);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:12px;overflow:hidden}.terminal{background-color:var(--terminal-bg);color:#10b981;white-space:pre;margin:0;padding:24px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.875rem;line-height:1.6;overflow-x:auto}.config-view-content{max-width:900px;margin:0 auto;padding:0}.config-table{border-collapse:collapse;width:100%}.config-table tr{border-bottom:1px solid var(--border)}.config-table tr:last-child{border-bottom:none}.config-table td{vertical-align:top;padding:16px 24px}.config-label{color:var(--text-main);background-color:var(--bg-main);width:240px;font-size:.875rem;font-weight:600}.config-value{color:var(--text-bright);word-break:break-all;font-family:JetBrains Mono,monospace;font-size:.875rem}.config-section-header{background-color:var(--bg-hover);text-transform:uppercase;color:var(--accent);letter-spacing:.05em;border-bottom:1px solid var(--border);padding:12px 24px;font-size:.75rem;font-weight:700}.inner-config-table{border-collapse:collapse;width:100%;font-size:.8125rem}.inner-config-table td{border:none;padding:4px 8px}.cache-card .badge{align-self:center}.card-header h4{color:var(--accent)}.stat-row-label{white-space:nowrap;text-overflow:ellipsis;flex:0 0 180px;overflow:hidden}.stat-row-value{text-align:right;flex:1}@media (width<=640px){.stat-row{flex-direction:column;align-items:flex-start;gap:4px}.stat-row-label{opacity:.7;text-align:left;flex:none;font-size:.75rem}.stat-row-value{text-align:left;width:100%}}.view-system-compact{padding:20px 32px}.view-system-compact .metrics-grid{grid-template-columns:repeat(auto-fit,minmax(300px,1fr));align-items:start;gap:16px;margin-bottom:24px;display:grid}.view-system-compact .card{padding:16px}.view-system-compact .stat-row{padding:4px 0}.view-system-compact .card-header{margin-bottom:12px}.resource-card{flex-direction:column;min-height:350px;display:flex}.resource-card .chart-container-mini{margin-top:auto}.chart-container-mini{border:none;border-radius:4px;width:100%;height:100px;position:relative;overflow:hidden}.chart-container{height:300px;margin-bottom:32px;position:relative}.btn,.icon-btn{cursor:pointer;background-color:var(--bg-hover);color:var(--text-bright);border:none;border-radius:8px;justify-content:center;align-items:center;gap:8px;padding:10px 20px;font-size:.875rem;font-weight:600;transition:all .2s;display:inline-flex}.btn .material-symbols-rounded,.icon-btn .material-symbols-rounded{font-size:18px}.btn:hover,.icon-btn:hover{background-color:var(--border)}.btn-primary{background-color:var(--accent);color:#fff}.btn-primary:hover{opacity:.9;background-color:var(--accent)}.btn-success{background-color:var(--success);color:#fff}.btn-success:hover{opacity:.9}.btn-warning{background-color:var(--warning);color:#000}.btn-warning:hover{opacity:.9}.btn-danger{background-color:var(--danger);color:#fff}.btn-danger:hover{opacity:.9}.btn-outline{border:1px solid var(--border);color:var(--accent);background:0 0}.btn-outline:hover{background-color:var(--bg-hover)}.btn-full{width:100%}.btn-sm{padding:6px 12px;font-size:.8125rem}.btn-sm .material-symbols-rounded{font-size:16px}.btn-lg{padding:14px 28px;font-size:1rem}.btn-lg .material-symbols-rounded{font-size:22px}nav button{text-align:left;width:100%;color:var(--text-main);cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:12px;margin-bottom:4px;padding:12px 16px;font-size:.95rem;transition:all .2s;display:flex}nav button:hover{background-color:var(--bg-hover);color:var(--text-bright)}nav button.active{background-color:var(--accent);color:#fff}nav button .material-symbols-rounded{font-size:20px}.icon-btn{min-width:40px;min-height:40px;padding:10px}.icon-btn.icon-sm{min-width:32px;min-height:32px;padding:6px}.icon-btn.icon-sm .material-symbols-rounded{font-size:20px}.control-group{flex-wrap:wrap;gap:16px;margin-top:24px;display:flex}.control-group .btn{flex:1;min-width:140px}.gap-1{gap:4px}.mt-1{margin-top:4px}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mt-4{margin-top:16px}.mt-6{margin-top:24px}.mb-1{margin-bottom:4px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.mb-4{margin-bottom:16px}.mb-6{margin-bottom:24px}.p-2{padding:8px}.p-3{padding:12px}.p-4{padding:16px}.p-6{padding:24px}.mx-auto{margin-left:auto;margin-right:auto}.flex{display:flex}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.self-center{align-self:center}.self-end{align-self:flex-end}.text-xs{font-size:.75rem}.text-sm{font-size:.875rem}.text-lg{font-size:1.125rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem}.text-3xl{font-size:1.875rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.text-center{text-align:center}.text-right{text-align:right}.text-main{color:var(--text-main)}.text-bright{color:var(--text-bright)}.text-accent{color:var(--accent)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.text-danger{color:var(--danger)}.bg-main{background-color:var(--bg-main)}.bg-card{background-color:var(--bg-card)}.bg-hover{background-color:var(--bg-hover)}.bg-success{background-color:var(--success)}.bg-warning{background-color:var(--warning)}.bg-danger{background-color:var(--danger)}.border{border:1px solid var(--border)}.border-b{border-bottom:1px solid var(--border)}.border-none{border:none}.border-t{border-top:1px solid var(--border)}.border-l{border-left:1px solid var(--border)}.border-r{border-right:1px solid var(--border)}.rounded{border-radius:4px}.rounded-md{border-radius:6px}.rounded-lg{border-radius:8px}.rounded-xl{border-radius:12px}.rounded-full{border-radius:9999px}.shadow-sm{box-shadow:var(--shadow)}.shadow-md{box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.w-full{width:100%}.w-auto{width:auto}.max-w-xs{max-width:120px}.max-w-sm{max-width:200px}.max-w-md{max-width:280px}.overflow-hidden{overflow:hidden}.overflow-auto{overflow:auto}.overflow-x-auto{overflow-x:auto}.cursor-pointer{cursor:pointer}.transition{transition:all .2s}.transition-colors{transition:background-color .2s,color .2s,border-color .2s}.transition-all{transition:all .2s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.hover-bg:hover{background-color:var(--bg-hover)}.hover-border:hover{border-color:var(--accent)}.opacity-50{opacity:.5}.opacity-75{opacity:.75}.opacity-90{opacity:.9}.leading-tight{line-height:1.25}.leading-normal{line-height:1.5}.leading-relaxed{line-height:1.625}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-all{word-break:break-all}.grid{display:grid}.grid-cols-2{grid-template-columns:repeat(2,1fr)}.grid-cols-3{grid-template-columns:repeat(3,1fr)}.grid-cols-auto{grid-template-columns:repeat(auto-fit,minmax(120px,1fr))}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-6{gap:24px}.stat-card{background-color:var(--bg-card);border:1px solid var(--border);text-align:center;border-radius:8px;padding:16px}.stat-card-value{color:var(--text-bright);font-size:1.75rem;font-weight:700;line-height:1.2}.stat-card-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-main);margin-top:4px;font-size:.75rem}.progress-bar{background:var(--bg-main);border-radius:3px;height:6px;overflow:hidden}.progress-bar-fill{border-radius:3px;height:100%;transition:width .3s}.progress-bar-sm{height:4px}.progress-bar-lg{height:8px}.badge{border-radius:9999px;align-items:center;gap:4px;padding:4px 8px;font-size:.75rem;font-weight:600;display:inline-flex}.badge-success{color:var(--success);background-color:#10b98126}.badge-warning{color:var(--warning);background-color:#f59e0b26}.badge-danger{color:var(--danger);background-color:#ef444426}.badge-info{color:var(--accent);background-color:#3b82f626}.status-dot{align-items:center;gap:6px;font-size:.875rem;font-weight:500;display:inline-flex}.status-dot .dot{flex-shrink:0;margin:0}.table-row-hover tbody tr{transition:background-color .15s}.table-row-hover tbody tr:hover{background-color:var(--bg-hover)}.table-cell{text-align:left;border-bottom:1px solid var(--border);padding:12px 16px}.table-cell-sm{padding:8px 12px;font-size:.8125rem}.table-header{background-color:var(--bg-hover);color:var(--text-main);text-transform:uppercase;letter-spacing:.05em;text-align:left;padding:12px 16px;font-size:.75rem;font-weight:600}.dense-table th,.dense-table td{padding:6px 12px;font-size:.8125rem}.table-layout-auto{table-layout:auto}.table-layout-fixed{table-layout:fixed}.code{background-color:var(--bg-main);color:var(--accent);border-radius:4px;padding:2px 6px;font-family:JetBrains Mono,Fira Code,monospace;font-size:.875rem}.code-sm{padding:1px 4px;font-size:.75rem}.description{color:var(--text-main);font-size:.75rem;font-weight:400}.stat-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px 0;display:flex}.stat-row:last-child{border-bottom:none}.stat-row-label{color:var(--text-main);font-size:.875rem}.stat-row-value{color:var(--text-bright);font-family:monospace;font-weight:600}.card-section{margin-bottom:24px}.card-section:last-child{margin-bottom:0}.card-clickable{cursor:pointer;transition:all .2s}.card-clickable:hover{border-color:var(--accent);box-shadow:0 4px 12px #3b82f626}.icon-xs{font-size:14px}.icon-sm{font-size:18px}.icon-md{font-size:20px}.icon-lg{font-size:24px}.icon-xl{font-size:28px}.modal{z-index:1000;background-color:#000000b3;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-content{background-color:var(--bg-card);width:100%;max-width:900px;box-shadow:var(--shadow);border-radius:12px;flex-direction:column;max-height:90vh;display:flex}.modal-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:16px 24px;display:flex}.modal-header h3{color:var(--text-bright);margin:0;font-size:1.125rem}.modal-body{padding:24px;overflow-y:auto}.stat-values-inline{align-items:center;gap:8px;display:flex}.stat-values{flex-direction:column;align-items:flex-end;display:flex}.min-max{opacity:.7;margin-top:2px;font-size:.7rem}.search-group{align-items:center;display:flex;position:relative}.input-sm{background-color:var(--bg-side);border:1px solid var(--border);color:var(--text-bright);border-radius:6px;padding:6px 12px;font-size:.875rem}.input-sm:focus{border-color:var(--accent);outline:none}.errors-table-row{cursor:pointer;transition:background-color .2s}.errors-table-row:hover{background-color:rgba(var(--accent-rgb), .08)}.server-status{background-color:var(--bg-card);border:1px solid var(--border);border-radius:8px;align-items:center;gap:8px;padding:8px 12px;display:flex}.server-status-indicator{align-items:center;gap:8px;display:flex}.server-status-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.server-status-dot.running{background-color:var(--success);box-shadow:0 0 8px #10b98166}.server-status-dot.paused{background-color:var(--warning);box-shadow:0 0 8px #f59e0b66}.server-status-dot.stopped{background-color:var(--danger);box-shadow:0 0 8px #ef444466}.server-status-text{text-transform:uppercase;letter-spacing:.025em;font-size:.875rem;font-weight:500}.danger-zone{border:1px solid var(--warning);background-color:#f59e0b08;border-left-width:4px}.danger-zone-title{color:var(--warning);margin-bottom:8px;font-weight:600}.empty-state{text-align:center;color:var(--text-main);padding:48px 24px}.empty-state-icon{color:var(--text-main);opacity:.5;margin-bottom:16px;font-size:48px}.empty-state-text{font-size:.875rem}.skeleton{background:linear-gradient(90deg, var(--bg-main) 25%, var(--bg-hover) 50%, var(--bg-main) 75%);background-size:200% 100%;border-radius:4px;animation:1.5s infinite skeleton-loading}@keyframes skeleton-loading{0%{background-position:200% 0}to{background-position:-200% 0}}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--bg-main)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--text-main);opacity:.5}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--accent);outline-offset:2px}input[type=checkbox]{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}select{accent-color:var(--accent);cursor:pointer}@keyframes spin{to{transform:rotate(360deg)}}.animate-spin{animation:1s linear infinite spin;display:inline-block}.btn.loading{pointer-events:none;opacity:.8}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-tracking:initial;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-bold:700;--tracking-wider:.05em;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-success:#10b981;--color-warning:#f59e0b;--color-danger:#ef4444}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.fixed{position:fixed}.relative{position:relative}.static{position:static}.start{inset-inline-start:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.table{display:table}.w-full{width:100%}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[300px\]{max-width:300px}.max-w-\[800px\]{max-width:800px}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-baseline{align-items:baseline}.items-center{align-items:center}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded-lg{border-radius:var(--radius-lg)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.border-white\/5{border-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-2{padding-block:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-black{color:var(--color-black)}.text-danger{color:var(--color-danger)}.text-success{color:var(--color-success)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.opacity-30{opacity:.3}.opacity-70{opacity:.7}.opacity-75{opacity:.75}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}@media (hover:hover){.hover\:bg-success\/80:hover{background-color:#10b981cc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-success\/80:hover{background-color:color-mix(in oklab, var(--color-success) 80%, transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--color-white) 5%, transparent)}}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}}@media (width>=48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}}body{-webkit-font-smoothing:antialiased;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}body.dark{--bg-main:#0f172a;--bg-side:#1e293b;--bg-card:#1e293b;--bg-hover:#334155;--text-main:#94a3b8;--text-bright:#f8fafc;--border:#334155}body:not(.dark){--bg-main:#f8fafc;--bg-side:#fff;--bg-card:#fff;--bg-hover:#f1f5f9;--text-main:#475569;--text-bright:#0f172a;--border:#e2e8f0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}
|
|
Binary file
|
|
Binary file
|
package/dist/frontend/index.html
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
<title>web_plsql Admin Console</title>
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="/admin/assets/favicon-mQAM4tVu.svg" />
|
|
8
8
|
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Rounded:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" />
|
|
9
|
-
<script type="module" crossorigin src="/admin/assets/main-
|
|
10
|
-
<link rel="stylesheet" crossorigin href="/admin/assets/main-
|
|
9
|
+
<script type="module" crossorigin src="/admin/assets/main-B5q2ur8E.js"></script>
|
|
10
|
+
<link rel="stylesheet" crossorigin href="/admin/assets/main-CoERzZAr.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body class="dark">
|
|
13
13
|
<div class="app-container">
|
|
Binary file
|
|
Binary file
|
package/dist/index.d.mts
CHANGED
|
@@ -177,7 +177,8 @@ declare const z$configType: z$1.ZodObject<{
|
|
|
177
177
|
adminRoute: z$1.ZodOptional<z$1.ZodString>; /** Username for admin console authentication */
|
|
178
178
|
adminUser: z$1.ZodOptional<z$1.ZodString>; /** Password for admin console authentication */
|
|
179
179
|
adminPassword: z$1.ZodOptional<z$1.ZodString>; /** Developer mode (skips frontend build check, enables CORS) */
|
|
180
|
-
devMode: z$1.ZodOptional<z$1.ZodBoolean>;
|
|
180
|
+
devMode: z$1.ZodOptional<z$1.ZodBoolean>; /** Callback function to setup custom Express extensions */
|
|
181
|
+
setupExtensions: z$1.ZodOptional<z$1.ZodCustom<(app: Express, pools: Pool[]) => void | Promise<void>, (app: Express, pools: Pool[]) => void | Promise<void>>>;
|
|
181
182
|
}, z$1.core.$strict>;
|
|
182
183
|
type configType = z$1.infer<typeof z$configType>;
|
|
183
184
|
/**
|
|
@@ -292,7 +293,7 @@ declare global {
|
|
|
292
293
|
}
|
|
293
294
|
/**
|
|
294
295
|
* Returns the current library version
|
|
295
|
-
* @returns
|
|
296
|
+
* @returns Version.
|
|
296
297
|
*/
|
|
297
298
|
declare const getVersion: () => string;
|
|
298
299
|
//#endregion
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as __exportAll } from "./chunk-
|
|
2
|
-
import { n as setExecuteCallback } from "./oracledb-mock-
|
|
1
|
+
import { t as __exportAll } from "./chunk-CfYAbeIz.mjs";
|
|
2
|
+
import { n as setExecuteCallback } from "./oracledb-mock-Cya43xKB.mjs";
|
|
3
3
|
import z$1, { z } from "zod";
|
|
4
4
|
import oracledb from "oracledb";
|
|
5
5
|
import debugModule from "debug";
|
|
@@ -20,7 +20,6 @@ import path from "node:path";
|
|
|
20
20
|
import morgan from "morgan";
|
|
21
21
|
import multer from "multer";
|
|
22
22
|
import readline from "node:readline";
|
|
23
|
-
|
|
24
23
|
//#region src/common/configStaticSchema.ts
|
|
25
24
|
/**
|
|
26
25
|
* Configuration for serving static files
|
|
@@ -30,7 +29,6 @@ const configStaticSchema = z$1.strictObject({
|
|
|
30
29
|
directoryPath: z$1.string(),
|
|
31
30
|
spaFallback: z$1.boolean().optional()
|
|
32
31
|
});
|
|
33
|
-
|
|
34
32
|
//#endregion
|
|
35
33
|
//#region src/common/procedureTraceEntry.ts
|
|
36
34
|
const procedureTraceEntrySchema = z.strictObject({
|
|
@@ -58,7 +56,6 @@ const procedureTraceEntrySchema = z.strictObject({
|
|
|
58
56
|
cgi: z.record(z.string(), z.string()).optional(),
|
|
59
57
|
error: z.string().optional()
|
|
60
58
|
});
|
|
61
|
-
|
|
62
59
|
//#endregion
|
|
63
60
|
//#region src/common/logEntrySchema.ts
|
|
64
61
|
/**
|
|
@@ -86,7 +83,6 @@ const logEntrySchema = z.strictObject({
|
|
|
86
83
|
environment: z.record(z.string(), z.string()).optional()
|
|
87
84
|
}).optional()
|
|
88
85
|
});
|
|
89
|
-
|
|
90
86
|
//#endregion
|
|
91
87
|
//#region src/backend/types.ts
|
|
92
88
|
/**
|
|
@@ -159,9 +155,9 @@ const z$configType = z$1.strictObject({
|
|
|
159
155
|
adminRoute: z$1.string().optional(),
|
|
160
156
|
adminUser: z$1.string().optional(),
|
|
161
157
|
adminPassword: z$1.string().optional(),
|
|
162
|
-
devMode: z$1.boolean().optional()
|
|
158
|
+
devMode: z$1.boolean().optional(),
|
|
159
|
+
setupExtensions: z$1.custom((val) => typeof val === "function", { message: "Invalid setupExtensions callback" }).optional()
|
|
163
160
|
});
|
|
164
|
-
|
|
165
161
|
//#endregion
|
|
166
162
|
//#region src/backend/util/oracledb-provider.ts
|
|
167
163
|
var oracledb_provider_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -189,7 +185,7 @@ const USE_MOCK = process.env.MOCK_ORACLE === "true";
|
|
|
189
185
|
* @returns The pool.
|
|
190
186
|
*/
|
|
191
187
|
async function createPool(config) {
|
|
192
|
-
if (USE_MOCK) return (await import("./oracledb-mock-
|
|
188
|
+
if (USE_MOCK) return (await import("./oracledb-mock-Cya43xKB.mjs").then((n) => n.t)).createPool(config);
|
|
193
189
|
return await oracledb.createPool(config);
|
|
194
190
|
}
|
|
195
191
|
const BIND_IN = oracledb.BIND_IN;
|
|
@@ -206,16 +202,14 @@ const DB_TYPE_VARCHAR = oracledb.DB_TYPE_VARCHAR;
|
|
|
206
202
|
const DB_TYPE_CLOB = oracledb.DB_TYPE_CLOB;
|
|
207
203
|
const DB_TYPE_NUMBER = oracledb.DB_TYPE_NUMBER;
|
|
208
204
|
const DB_TYPE_DATE = oracledb.DB_TYPE_DATE;
|
|
209
|
-
|
|
210
205
|
//#endregion
|
|
211
206
|
//#region src/backend/version.ts
|
|
212
207
|
globalThis.__VERSION__ ??= "**development**";
|
|
213
208
|
/**
|
|
214
209
|
* Returns the current library version
|
|
215
|
-
* @returns
|
|
210
|
+
* @returns Version.
|
|
216
211
|
*/
|
|
217
|
-
const getVersion = () => "1.
|
|
218
|
-
|
|
212
|
+
const getVersion = () => "1.5.0";
|
|
219
213
|
//#endregion
|
|
220
214
|
//#region src/backend/server/config.ts
|
|
221
215
|
const paddedLine = (title, value) => {
|
|
@@ -266,7 +260,6 @@ const showConfig = (config) => {
|
|
|
266
260
|
}
|
|
267
261
|
console.log(LINE);
|
|
268
262
|
};
|
|
269
|
-
|
|
270
263
|
//#endregion
|
|
271
264
|
//#region src/backend/server/server.ts
|
|
272
265
|
const debug$14 = debugModule("webplsql:server");
|
|
@@ -340,6 +333,7 @@ const startServer = async (config, ssl) => {
|
|
|
340
333
|
});
|
|
341
334
|
}
|
|
342
335
|
if (internalConfig.loggerFilename.length > 0) app.use(handlerLogger(internalConfig.loggerFilename));
|
|
336
|
+
if (internalConfig.setupExtensions) await internalConfig.setupExtensions(app, adminContext.pools);
|
|
343
337
|
for (const i of internalConfig.routeStatic) {
|
|
344
338
|
app.use(i.route, expressStaticGzip(i.directoryPath, {
|
|
345
339
|
enableBrotli: true,
|
|
@@ -409,7 +403,6 @@ const loadConfig = (filename = "config.json") => z$configType.parse(getJsonFile(
|
|
|
409
403
|
* @returns Promise resolving to the web server object.
|
|
410
404
|
*/
|
|
411
405
|
const startServerConfig = async (filename = "config.json", ssl) => startServer(loadConfig(filename), ssl);
|
|
412
|
-
|
|
413
406
|
//#endregion
|
|
414
407
|
//#region src/backend/util/shutdown.ts
|
|
415
408
|
const debug$13 = debugModule("webplsql:shutdown");
|
|
@@ -456,7 +449,6 @@ const forceShutdown = () => {
|
|
|
456
449
|
debug$13("forceShutdown");
|
|
457
450
|
process.kill(process.pid, "SIGTERM");
|
|
458
451
|
};
|
|
459
|
-
|
|
460
452
|
//#endregion
|
|
461
453
|
//#region src/common/constants.ts
|
|
462
454
|
/**
|
|
@@ -563,27 +555,6 @@ const OWA_STREAM_CHUNK_SIZE = 1e3;
|
|
|
563
555
|
*/
|
|
564
556
|
const OWA_STREAM_BUFFER_SIZE = 16384;
|
|
565
557
|
/**
|
|
566
|
-
* OWA_RESOLVED_NAME_MAX_LEN = 400
|
|
567
|
-
*
|
|
568
|
-
* Purpose: Maximum string length for resolved Oracle procedure canonical names.
|
|
569
|
-
* Canonical format: SCHEMA.PACKAGE.PROCEDURE or SCHEMA.PROCEDURE.
|
|
570
|
-
*
|
|
571
|
-
* Used By:
|
|
572
|
-
* - resolveProcedureName() function for dbms_utility.name_resolve output
|
|
573
|
-
* - Procedure name resolution SQL at procedureSanitize.js:46-76
|
|
574
|
-
*
|
|
575
|
-
* Related Values:
|
|
576
|
-
* - dbms_utility.name_resolve context = 1 (procedure/function resolution)
|
|
577
|
-
* - Oracle identifier limits: Schema (128) + Package (128) + Procedure (128) + 2 dots = ~386
|
|
578
|
-
* - 400 provides comfortable headroom
|
|
579
|
-
*
|
|
580
|
-
* Implications:
|
|
581
|
-
* - Oracle object names: 30 bytes for most, extended to 128 in some contexts
|
|
582
|
-
* - Canonical name: schema.package.procedure (max ~128+1+128+1+128 = 386)
|
|
583
|
-
* - 400 is safe upper bound with margin
|
|
584
|
-
*/
|
|
585
|
-
const OWA_RESOLVED_NAME_MAX_LEN = 400;
|
|
586
|
-
/**
|
|
587
558
|
* STATS_INTERVAL_MS = 5000
|
|
588
559
|
*
|
|
589
560
|
* Purpose: Duration of each statistical bucket in milliseconds.
|
|
@@ -648,107 +619,6 @@ const MAX_HISTORY_BUCKETS = 1e3;
|
|
|
648
619
|
* - Under heavy load, older samples are discarded (FIFO)
|
|
649
620
|
*/
|
|
650
621
|
const MAX_PERCENTILE_SAMPLES = 1e3;
|
|
651
|
-
/**
|
|
652
|
-
* SHUTDOWN_GRACE_DELAY_MS = 100
|
|
653
|
-
*
|
|
654
|
-
* Purpose: Delay between initiating server shutdown and forced termination.
|
|
655
|
-
*
|
|
656
|
-
* Used By: POST /api/server/stop handler only
|
|
657
|
-
*
|
|
658
|
-
* Related Values:
|
|
659
|
-
* - forceShutdown() at src/util/shutdown.js
|
|
660
|
-
* - SIGTERM/SIGINT handlers at shutdown.js
|
|
661
|
-
*
|
|
662
|
-
* Implications:
|
|
663
|
-
* - Allows graceful completion of in-flight requests
|
|
664
|
-
* - Gives Express middleware time to send final responses
|
|
665
|
-
* - 100ms is short; may be insufficient under heavy load
|
|
666
|
-
* - Consider making configurable for high-traffic deployments
|
|
667
|
-
*/
|
|
668
|
-
const SHUTDOWN_GRACE_DELAY_MS = 100;
|
|
669
|
-
/**
|
|
670
|
-
* TRACE_LOG_ROTATION_SIZE = '10M'
|
|
671
|
-
*
|
|
672
|
-
* Purpose: Log file size threshold triggering trace log rotation (10 Megabytes).
|
|
673
|
-
*
|
|
674
|
-
* Used By: rotating-file-stream library for 'trace.log'
|
|
675
|
-
*
|
|
676
|
-
* Related Values:
|
|
677
|
-
* - TRACE_LOG_ROTATION_INTERVAL ('1d'): Also triggers rotation
|
|
678
|
-
* - TRACE_LOG_MAX_ROTATED_FILES (10): Maximum retained files
|
|
679
|
-
*
|
|
680
|
-
* Implications:
|
|
681
|
-
* - When either size OR time threshold is reached, rotation occurs
|
|
682
|
-
* - Combined with daily rotation: ~10MB/day minimum
|
|
683
|
-
* - gzip compression reduces rotated file size by ~70-90%
|
|
684
|
-
*/
|
|
685
|
-
const TRACE_LOG_ROTATION_SIZE = "10M";
|
|
686
|
-
/**
|
|
687
|
-
* TRACE_LOG_ROTATION_INTERVAL = '1d'
|
|
688
|
-
*
|
|
689
|
-
* Purpose: Time-based trace log rotation trigger (daily).
|
|
690
|
-
*
|
|
691
|
-
* Used By: rotating-file-stream library for 'trace.log'
|
|
692
|
-
*
|
|
693
|
-
* Implications:
|
|
694
|
-
* - Guarantees at least one rotation per day
|
|
695
|
-
* - Midnight-based or 24h from first write
|
|
696
|
-
*/
|
|
697
|
-
const TRACE_LOG_ROTATION_INTERVAL = "1d";
|
|
698
|
-
/**
|
|
699
|
-
* TRACE_LOG_MAX_ROTATED_FILES = 10
|
|
700
|
-
*
|
|
701
|
-
* Purpose: Maximum number of rotated trace log files to retain.
|
|
702
|
-
*
|
|
703
|
-
* Used By: rotating-file-stream library for 'trace.log'
|
|
704
|
-
*
|
|
705
|
-
* Implications:
|
|
706
|
-
* - When exceeded, oldest rotated file is deleted
|
|
707
|
-
* - Maximum: ~10 files × 10MB = ~100MB (compressed: ~10-30MB)
|
|
708
|
-
*/
|
|
709
|
-
const TRACE_LOG_MAX_ROTATED_FILES = 10;
|
|
710
|
-
/**
|
|
711
|
-
* JSON_LOG_ROTATION_SIZE = '10M'
|
|
712
|
-
*
|
|
713
|
-
* Purpose: Log file size threshold triggering JSON error log rotation (10 Megabytes).
|
|
714
|
-
*
|
|
715
|
-
* Used By: rotating-file-stream library for 'error.json.log'
|
|
716
|
-
*
|
|
717
|
-
* Related Values:
|
|
718
|
-
* - JSON_LOG_ROTATION_INTERVAL ('1d'): Also triggers rotation
|
|
719
|
-
* - JSON_LOG_MAX_ROTATED_FILES (10): Maximum retained files
|
|
720
|
-
*
|
|
721
|
-
* Implications:
|
|
722
|
-
* - When either size OR time threshold is reached, rotation occurs
|
|
723
|
-
* - Combined with daily rotation: ~10MB/day minimum
|
|
724
|
-
* - gzip compression reduces rotated file size by ~70-90%
|
|
725
|
-
*/
|
|
726
|
-
const JSON_LOG_ROTATION_SIZE = "10M";
|
|
727
|
-
/**
|
|
728
|
-
* JSON_LOG_ROTATION_INTERVAL = '1d'
|
|
729
|
-
*
|
|
730
|
-
* Purpose: Time-based JSON error log rotation trigger (daily).
|
|
731
|
-
*
|
|
732
|
-
* Used By: rotating-file-stream library for 'error.json.log'
|
|
733
|
-
*
|
|
734
|
-
* Implications:
|
|
735
|
-
* - Guarantees at least one rotation per day
|
|
736
|
-
* - Midnight-based or 24h from first write
|
|
737
|
-
*/
|
|
738
|
-
const JSON_LOG_ROTATION_INTERVAL = "1d";
|
|
739
|
-
/**
|
|
740
|
-
* JSON_LOG_MAX_ROTATED_FILES = 10
|
|
741
|
-
*
|
|
742
|
-
* Purpose: Maximum number of rotated JSON error log files to retain.
|
|
743
|
-
*
|
|
744
|
-
* Used By: rotating-file-stream library for 'error.json.log'
|
|
745
|
-
*
|
|
746
|
-
* Implications:
|
|
747
|
-
* - When exceeded, oldest rotated file is deleted
|
|
748
|
-
* - Maximum: ~10 files × 10MB = ~100MB (compressed: ~10-30MB)
|
|
749
|
-
*/
|
|
750
|
-
const JSON_LOG_MAX_ROTATED_FILES = 10;
|
|
751
|
-
|
|
752
622
|
//#endregion
|
|
753
623
|
//#region src/backend/util/statsManager.ts
|
|
754
624
|
const debug$12 = debugModule("webplsql:statsManager");
|
|
@@ -980,7 +850,6 @@ var StatsManager = class {
|
|
|
980
850
|
return this.history;
|
|
981
851
|
}
|
|
982
852
|
};
|
|
983
|
-
|
|
984
853
|
//#endregion
|
|
985
854
|
//#region src/backend/server/adminContext.ts
|
|
986
855
|
/**
|
|
@@ -1023,7 +892,6 @@ var AdminContext = class {
|
|
|
1023
892
|
this._paused = value;
|
|
1024
893
|
}
|
|
1025
894
|
};
|
|
1026
|
-
|
|
1027
895
|
//#endregion
|
|
1028
896
|
//#region src/backend/util/file.ts
|
|
1029
897
|
/**
|
|
@@ -1100,7 +968,6 @@ const isFile = async (filePath) => {
|
|
|
1100
968
|
return false;
|
|
1101
969
|
}
|
|
1102
970
|
};
|
|
1103
|
-
|
|
1104
971
|
//#endregion
|
|
1105
972
|
//#region src/backend/util/html.ts
|
|
1106
973
|
/**
|
|
@@ -1148,7 +1015,6 @@ ${body}
|
|
|
1148
1015
|
</body>
|
|
1149
1016
|
</html>
|
|
1150
1017
|
`;
|
|
1151
|
-
|
|
1152
1018
|
//#endregion
|
|
1153
1019
|
//#region src/backend/util/trace.ts
|
|
1154
1020
|
/**
|
|
@@ -1222,9 +1088,9 @@ const toTable = (head, body) => {
|
|
|
1222
1088
|
*/
|
|
1223
1089
|
const logToFile = (text) => {
|
|
1224
1090
|
const fs = rotatingFileStream.createStream("trace.log", {
|
|
1225
|
-
size:
|
|
1226
|
-
interval:
|
|
1227
|
-
maxFiles:
|
|
1091
|
+
size: "10M",
|
|
1092
|
+
interval: "1d",
|
|
1093
|
+
maxFiles: 10,
|
|
1228
1094
|
compress: "gzip"
|
|
1229
1095
|
});
|
|
1230
1096
|
fs.write(text);
|
|
@@ -1428,7 +1294,6 @@ const warningMessage = (para) => {
|
|
|
1428
1294
|
logToFile(text);
|
|
1429
1295
|
console.warn(text);
|
|
1430
1296
|
};
|
|
1431
|
-
|
|
1432
1297
|
//#endregion
|
|
1433
1298
|
//#region src/backend/util/errorToString.ts
|
|
1434
1299
|
/**
|
|
@@ -1446,7 +1311,6 @@ const errorToString = (error) => {
|
|
|
1446
1311
|
return parts.join("\n");
|
|
1447
1312
|
} else return inspect(error);
|
|
1448
1313
|
};
|
|
1449
|
-
|
|
1450
1314
|
//#endregion
|
|
1451
1315
|
//#region src/backend/handler/plsql/upload.ts
|
|
1452
1316
|
const debug$11 = debugModule("webplsql:fileUpload");
|
|
@@ -1519,7 +1383,6 @@ const uploadFile = async (file, doctable, databaseConnection) => {
|
|
|
1519
1383
|
throw new Error(`Unable to remove file "${file.filename}".\n${errorToString(err)}`);
|
|
1520
1384
|
}
|
|
1521
1385
|
};
|
|
1522
|
-
|
|
1523
1386
|
//#endregion
|
|
1524
1387
|
//#region src/backend/handler/plsql/procedureVariable.ts
|
|
1525
1388
|
const debug$10 = debugModule("webplsql:procedureVariable");
|
|
@@ -1562,7 +1425,6 @@ const getProcedureVariable = (_req, procName, argObj) => {
|
|
|
1562
1425
|
}
|
|
1563
1426
|
};
|
|
1564
1427
|
};
|
|
1565
|
-
|
|
1566
1428
|
//#endregion
|
|
1567
1429
|
//#region src/backend/handler/plsql/requestError.ts
|
|
1568
1430
|
var RequestError = class RequestError extends Error {
|
|
@@ -1576,7 +1438,6 @@ var RequestError = class RequestError extends Error {
|
|
|
1576
1438
|
this.timestamp = /* @__PURE__ */ new Date();
|
|
1577
1439
|
}
|
|
1578
1440
|
};
|
|
1579
|
-
|
|
1580
1441
|
//#endregion
|
|
1581
1442
|
//#region src/backend/util/util.ts
|
|
1582
1443
|
/**
|
|
@@ -1590,7 +1451,6 @@ const stringToNumber = (value) => {
|
|
|
1590
1451
|
if (typeof value !== "string" || !/^[+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?$/i.test(value)) return null;
|
|
1591
1452
|
return Number(value);
|
|
1592
1453
|
};
|
|
1593
|
-
|
|
1594
1454
|
//#endregion
|
|
1595
1455
|
//#region src/backend/handler/plsql/procedureNamed.ts
|
|
1596
1456
|
const debug$9 = debugModule("webplsql:procedureNamed");
|
|
@@ -1821,7 +1681,6 @@ const getProcedureNamed = async (req, procName, argObj, databaseConnection, argu
|
|
|
1821
1681
|
bind: bindings
|
|
1822
1682
|
};
|
|
1823
1683
|
};
|
|
1824
|
-
|
|
1825
1684
|
//#endregion
|
|
1826
1685
|
//#region src/backend/handler/plsql/parsePage.ts
|
|
1827
1686
|
const debug$8 = debugModule("webplsql:parsePage");
|
|
@@ -1954,7 +1813,6 @@ const tryDecodeDate = (value) => {
|
|
|
1954
1813
|
if (Number.isNaN(result.getTime())) return null;
|
|
1955
1814
|
return result;
|
|
1956
1815
|
};
|
|
1957
|
-
|
|
1958
1816
|
//#endregion
|
|
1959
1817
|
//#region src/backend/handler/plsql/sendResponse.ts
|
|
1960
1818
|
const debug$7 = debugModule("webplsql:sendResponse");
|
|
@@ -2060,7 +1918,6 @@ const sendResponse = async (_req, res, page) => {
|
|
|
2060
1918
|
});
|
|
2061
1919
|
else res.send(page.body);
|
|
2062
1920
|
};
|
|
2063
|
-
|
|
2064
1921
|
//#endregion
|
|
2065
1922
|
//#region src/backend/handler/plsql/procedureError.ts
|
|
2066
1923
|
var ProcedureError = class ProcedureError extends Error {
|
|
@@ -2083,7 +1940,6 @@ var ProcedureError = class ProcedureError extends Error {
|
|
|
2083
1940
|
this.bind = bind;
|
|
2084
1941
|
}
|
|
2085
1942
|
};
|
|
2086
|
-
|
|
2087
1943
|
//#endregion
|
|
2088
1944
|
//#region src/backend/util/cache.ts
|
|
2089
1945
|
/**
|
|
@@ -2182,7 +2038,6 @@ var Cache = class {
|
|
|
2182
2038
|
};
|
|
2183
2039
|
}
|
|
2184
2040
|
};
|
|
2185
|
-
|
|
2186
2041
|
//#endregion
|
|
2187
2042
|
//#region src/backend/handler/plsql/procedureSanitize.ts
|
|
2188
2043
|
const debug$6 = debugModule("webplsql:procedureSanitize");
|
|
@@ -2253,7 +2108,7 @@ const resolveProcedureName = async (procName, databaseConnection, procedureNameC
|
|
|
2253
2108
|
resolved: {
|
|
2254
2109
|
dir: BIND_OUT,
|
|
2255
2110
|
type: STRING,
|
|
2256
|
-
maxSize:
|
|
2111
|
+
maxSize: 400
|
|
2257
2112
|
}
|
|
2258
2113
|
};
|
|
2259
2114
|
try {
|
|
@@ -2391,7 +2246,6 @@ const requestValidationFunction = async (procName, validationFunction, databaseC
|
|
|
2391
2246
|
validationFunctionCache.set(key, { valid });
|
|
2392
2247
|
return valid;
|
|
2393
2248
|
};
|
|
2394
|
-
|
|
2395
2249
|
//#endregion
|
|
2396
2250
|
//#region src/backend/handler/plsql/owaPageStream.ts
|
|
2397
2251
|
const debug$5 = debugModule("webplsql:owaPageStream");
|
|
@@ -2461,7 +2315,6 @@ var OWAPageStream = class extends Readable {
|
|
|
2461
2315
|
if (content && content.length > 0) this.push(content);
|
|
2462
2316
|
}
|
|
2463
2317
|
};
|
|
2464
|
-
|
|
2465
2318
|
//#endregion
|
|
2466
2319
|
//#region src/backend/util/traceManager.ts
|
|
2467
2320
|
var TraceManager = class {
|
|
@@ -2514,7 +2367,6 @@ var TraceManager = class {
|
|
|
2514
2367
|
}
|
|
2515
2368
|
};
|
|
2516
2369
|
const traceManager = new TraceManager();
|
|
2517
|
-
|
|
2518
2370
|
//#endregion
|
|
2519
2371
|
//#region src/backend/handler/plsql/procedure.ts
|
|
2520
2372
|
const debug$4 = debugModule("webplsql:procedure");
|
|
@@ -2813,7 +2665,6 @@ const invokeProcedure = async (req, res, argObj, cgiObj, filesToUpload, options,
|
|
|
2813
2665
|
}
|
|
2814
2666
|
debug$4("invokeProcedure: end");
|
|
2815
2667
|
};
|
|
2816
|
-
|
|
2817
2668
|
//#endregion
|
|
2818
2669
|
//#region src/backend/handler/plsql/cgi.ts
|
|
2819
2670
|
const debug$3 = debugModule("webplsql:cgi");
|
|
@@ -2918,7 +2769,6 @@ const getCGI = (req, doctable, cgi, authenticatedUser = null) => {
|
|
|
2918
2769
|
};
|
|
2919
2770
|
return Object.assign({}, DEFAULT_CGI, CGI, cgi);
|
|
2920
2771
|
};
|
|
2921
|
-
|
|
2922
2772
|
//#endregion
|
|
2923
2773
|
//#region src/backend/util/type.ts
|
|
2924
2774
|
/**
|
|
@@ -2927,7 +2777,6 @@ const getCGI = (req, doctable, cgi, authenticatedUser = null) => {
|
|
|
2927
2777
|
* @returns True if the value is a string or an array of strings
|
|
2928
2778
|
*/
|
|
2929
2779
|
const isStringOrArrayOfString = (value) => typeof value === "string" || Array.isArray(value) && value.every((element) => typeof element === "string");
|
|
2930
|
-
|
|
2931
2780
|
//#endregion
|
|
2932
2781
|
//#region src/backend/handler/plsql/request.ts
|
|
2933
2782
|
const debug$2 = debugModule("webplsql:request");
|
|
@@ -3004,16 +2853,15 @@ const processRequest = async (req, res, options, connectionPool, procedureNameCa
|
|
|
3004
2853
|
}
|
|
3005
2854
|
debug$2("processRequest: EXIT");
|
|
3006
2855
|
};
|
|
3007
|
-
|
|
3008
2856
|
//#endregion
|
|
3009
2857
|
//#region src/backend/util/jsonLogger.ts
|
|
3010
2858
|
var JsonLogger = class {
|
|
3011
2859
|
stream;
|
|
3012
2860
|
constructor(filename = "error.json.log") {
|
|
3013
2861
|
this.stream = rotatingFileStream.createStream(filename, {
|
|
3014
|
-
size:
|
|
3015
|
-
interval:
|
|
3016
|
-
maxFiles:
|
|
2862
|
+
size: "10M",
|
|
2863
|
+
interval: "1d",
|
|
2864
|
+
maxFiles: 10,
|
|
3017
2865
|
compress: "gzip"
|
|
3018
2866
|
});
|
|
3019
2867
|
}
|
|
@@ -3038,7 +2886,6 @@ var JsonLogger = class {
|
|
|
3038
2886
|
}
|
|
3039
2887
|
};
|
|
3040
2888
|
const jsonLogger = new JsonLogger();
|
|
3041
|
-
|
|
3042
2889
|
//#endregion
|
|
3043
2890
|
//#region src/backend/handler/plsql/errorPage.ts
|
|
3044
2891
|
/**
|
|
@@ -3112,7 +2959,6 @@ const errorPage = (req, res, options, error) => {
|
|
|
3112
2959
|
if (options.errorStyle === "basic") res.status(404).send("Page not found");
|
|
3113
2960
|
else res.status(404).send(getHtmlPage(html));
|
|
3114
2961
|
};
|
|
3115
|
-
|
|
3116
2962
|
//#endregion
|
|
3117
2963
|
//#region src/backend/handler/plsql/handlerPlSql.ts
|
|
3118
2964
|
const debug$1 = debugModule("webplsql:handlerPlSql");
|
|
@@ -3184,7 +3030,6 @@ const handlerWebPlSql = (connectionPool, config, adminContext) => {
|
|
|
3184
3030
|
handler.argumentCache = argumentCache;
|
|
3185
3031
|
return handler;
|
|
3186
3032
|
};
|
|
3187
|
-
|
|
3188
3033
|
//#endregion
|
|
3189
3034
|
//#region src/backend/handler/handlerLogger.ts
|
|
3190
3035
|
const debug = debugModule("webplsql:handlerLogger");
|
|
@@ -3197,7 +3042,6 @@ const handlerLogger = (filename) => {
|
|
|
3197
3042
|
debug("register");
|
|
3198
3043
|
return morgan("combined", { stream: fs.createWriteStream(path.join(process.cwd(), filename), { flags: "a" }) });
|
|
3199
3044
|
};
|
|
3200
|
-
|
|
3201
3045
|
//#endregion
|
|
3202
3046
|
//#region src/backend/handler/handlerUpload.ts
|
|
3203
3047
|
/**
|
|
@@ -3211,7 +3055,6 @@ const handlerUpload = (uploadFileSizeLimit) => {
|
|
|
3211
3055
|
limits: { fileSize: uploadFileSizeLimit }
|
|
3212
3056
|
}).any();
|
|
3213
3057
|
};
|
|
3214
|
-
|
|
3215
3058
|
//#endregion
|
|
3216
3059
|
//#region src/backend/handler/handlerAdmin.ts
|
|
3217
3060
|
const version = () => getVersion();
|
|
@@ -3395,7 +3238,7 @@ const createAdminRouter = (adminContext) => {
|
|
|
3395
3238
|
res.json({ message: "Server shutting down..." });
|
|
3396
3239
|
setTimeout(() => {
|
|
3397
3240
|
forceShutdown();
|
|
3398
|
-
},
|
|
3241
|
+
}, 100);
|
|
3399
3242
|
break;
|
|
3400
3243
|
case "pause":
|
|
3401
3244
|
adminContext.setPaused(true);
|
|
@@ -3447,7 +3290,6 @@ const createAdminRouter = (adminContext) => {
|
|
|
3447
3290
|
});
|
|
3448
3291
|
return router;
|
|
3449
3292
|
};
|
|
3450
|
-
|
|
3451
3293
|
//#endregion
|
|
3452
3294
|
//#region src/backend/handler/handlerAdminConsole.ts
|
|
3453
3295
|
/**
|
|
@@ -3547,7 +3389,6 @@ const handlerAdminConsole = (config, adminContext) => {
|
|
|
3547
3389
|
}));
|
|
3548
3390
|
return router;
|
|
3549
3391
|
};
|
|
3550
|
-
|
|
3551
3392
|
//#endregion
|
|
3552
3393
|
//#region src/backend/handler/handlerSpaFallback.ts
|
|
3553
3394
|
/**
|
|
@@ -3582,7 +3423,7 @@ const createSpaFallback = (directoryPath, _route) => {
|
|
|
3582
3423
|
});
|
|
3583
3424
|
};
|
|
3584
3425
|
};
|
|
3585
|
-
|
|
3586
3426
|
//#endregion
|
|
3587
3427
|
export { AdminContext, createAdminRouter, createServer, createSpaFallback, forceShutdown, getJsonFile, getVersion, handlerAdminConsole, handlerLogger, handlerUpload, handlerWebPlSql, installShutdown, isDirectory, isFile, loadConfig, oracledb_provider_exports as oracledb, readFile, readFileSyncUtf8, removeFile, showConfig, startServer, startServerConfig, z$configType };
|
|
3428
|
+
|
|
3588
3429
|
//# sourceMappingURL=index.mjs.map
|