nitropack-nightly 2.11.4-20250306-165704.142d8fac → 2.11.4-20250306-175805.31dde1e4

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.
@@ -45,8 +45,7 @@ import { Worker } from 'node:worker_threads';
45
45
  import { createProxyServer } from 'httpxy';
46
46
  import nodeCrypto from 'node:crypto';
47
47
  import { resolve as resolve$1, dirname as dirname$1 } from 'node:path';
48
- import { ErrorParser } from 'youch-core';
49
- import { Youch } from 'youch';
48
+ import * as _youch from 'nitropack/internal/deps/youch';
50
49
  import { SourceMapConsumer } from 'source-map';
51
50
  import serveStatic from 'serve-static';
52
51
  import { listen } from 'listhen';
@@ -2422,7 +2421,7 @@ async function defaultHandler(error, event, opts) {
2422
2421
  }
2423
2422
  }
2424
2423
  await loadStackTrace(error).catch(consola.error);
2425
- const youch = new Youch();
2424
+ const youch = new _youch.Youch();
2426
2425
  if (isSensitive && !opts?.silent) {
2427
2426
  const tags = [error.unhandled && "[unhandled]", error.fatal && "[fatal]"].filter(Boolean).join(" ");
2428
2427
  const ansiError = await (await youch.toANSI(error)).replaceAll(process.cwd(), ".");
@@ -2477,7 +2476,7 @@ async function loadStackTrace(error) {
2477
2476
  if (!(error instanceof Error)) {
2478
2477
  return;
2479
2478
  }
2480
- const parsed = await new ErrorParser().defineSourceLoader(sourceLoader).parse(error);
2479
+ const parsed = await new _youch.ErrorParser().defineSourceLoader(sourceLoader).parse(error);
2481
2480
  const stack = error.message + "\n" + parsed.frames.map((frame) => fmtFrame(frame)).join("\n");
2482
2481
  Object.defineProperty(error, "stack", { value: stack });
2483
2482
  if (error.cause) {
@@ -0,0 +1,5 @@
1
+ #error-cause {
2
+ border: 1px solid var(--border);
3
+ border-radius: var(--radius);
4
+ --pre-bg-color: transparent;
5
+ }
@@ -0,0 +1,55 @@
1
+ #error-name {
2
+ color: var(--danger-fg);
3
+ font-size: 16px;
4
+ -webkit-font-smoothing: antialiased;
5
+ -moz-osx-font-smoothing: grayscale;
6
+ }
7
+
8
+ #error-title {
9
+ color: var(--title-fg);
10
+ font-size: 32px;
11
+ -webkit-font-smoothing: antialiased;
12
+ -moz-osx-font-smoothing: grayscale;
13
+ }
14
+
15
+ #error-message {
16
+ color: var(--danger-fg);
17
+ font-size: 22px;
18
+ font-weight: 700;
19
+ display: flex;
20
+ align-items: center;
21
+ align-items: flex-start;
22
+ gap: 12px;
23
+ -webkit-font-smoothing: antialiased;
24
+ -moz-osx-font-smoothing: grayscale;
25
+ }
26
+ #error-message svg {
27
+ margin-top: 1.5px;
28
+ }
29
+
30
+ #error-hint {
31
+ border-top: 1px solid var(--border);
32
+ padding-top: 15px;
33
+ margin-top: 15px;
34
+ font-size: 15px;
35
+ font-style: italic;
36
+ display: flex;
37
+ gap: 12px;
38
+ align-items: flex-start;
39
+ padding-left: 1px;
40
+ }
41
+ #error-hint svg {
42
+ margin-bottom: -2px;
43
+ }
44
+ #error-hint strong {
45
+ color: var(--title-fg);
46
+ }
47
+ #error-hint a {
48
+ color: var(--links-fg);
49
+ }
50
+
51
+ @media (min-width: 1024px) {
52
+ #error-hint {
53
+ align-items: center;
54
+ }
55
+ }
@@ -0,0 +1,74 @@
1
+ function showFormattedFrames(button) {
2
+ document.querySelector('#all-frames-toggle input[type="checkbox"]').disabled = false
3
+ const parent = button.closest('section')
4
+
5
+ const formattedFrames = parent.querySelector('#stack-frames-formatted')
6
+ formattedFrames.classList.add('visible')
7
+
8
+ const rawFrames = parent.querySelector('#stack-frames-raw')
9
+ rawFrames.classList.remove('visible')
10
+
11
+ button.parentElement.querySelectorAll('button').forEach((btn) => btn.classList.remove('active'))
12
+ button.classList.add('active')
13
+ }
14
+
15
+ function showRawFrames(button) {
16
+ document.querySelector('#all-frames-toggle input[type="checkbox"]').disabled = true
17
+ const parent = button.closest('section')
18
+
19
+ const formattedFrames = parent.querySelector('#stack-frames-formatted')
20
+ formattedFrames.classList.remove('visible')
21
+
22
+ const rawFrames = parent.querySelector('#stack-frames-raw')
23
+ rawFrames.classList.add('visible')
24
+
25
+ button.parentElement.querySelectorAll('button').forEach((btn) => btn.classList.remove('active'))
26
+ button.classList.add('active')
27
+ }
28
+
29
+ function toggleFrameSource(parent) {
30
+ if (parent.classList.contains('expanded')) {
31
+ parent.classList.remove('expanded')
32
+ } else {
33
+ parent.classList.add('expanded')
34
+ }
35
+ }
36
+
37
+ function toggleAllFrames() {
38
+ const wrapper = document.querySelector('#stack-frames-wrapper')
39
+ const indicator = document.querySelector('#all-frames-toggle input[type="checkbox"]')
40
+ if (indicator.checked) {
41
+ wrapper.classList.add('display-all')
42
+ } else {
43
+ wrapper.classList.remove('display-all')
44
+ }
45
+ }
46
+
47
+ window.addEventListener('DOMContentLoaded', () => {
48
+ document.querySelector('#formatted-frames-toggle').addEventListener('click', function () {
49
+ showFormattedFrames(this)
50
+ })
51
+ document.querySelector('#raw-frames-toggle').addEventListener('click', function () {
52
+ showRawFrames(this)
53
+ })
54
+ document
55
+ .querySelector('#all-frames-toggle input[type="checkbox"]')
56
+ .addEventListener('change', function () {
57
+ toggleAllFrames()
58
+ })
59
+
60
+ document.querySelectorAll('button[class="stack-frame-location"]').forEach((sfl) => {
61
+ sfl.addEventListener('click', function (e) {
62
+ if (e.target.tagName === 'A') {
63
+ return
64
+ }
65
+ toggleFrameSource(e.target.closest('li'))
66
+ })
67
+ })
68
+
69
+ document.querySelectorAll('button[class="stack-frame-toggle-indicator"]').forEach((sfl) => {
70
+ sfl.addEventListener('click', function (e) {
71
+ toggleFrameSource(e.target.closest('li'))
72
+ })
73
+ })
74
+ })
@@ -0,0 +1,206 @@
1
+ :root {
2
+ --frame-bg: var(--slate-2);
3
+ --label-bg: var(--green-5);
4
+ --label-fg: var(--green-12);
5
+ --switch-bg: var(--slate-3);
6
+ --switch-active-bg: var(--slate-a4);
7
+ --switch-border: var(--slate-7);
8
+ }
9
+ html.dark {
10
+ --frame-bg: var(--slate-2);
11
+ --label-bg: var(--green-3);
12
+ --label-fg: var(--green-11);
13
+ --switch-bg: var(--slate-3);
14
+ --switch-active-bg: var(--slate-a4);
15
+ --switch-border: var(--slate-7);
16
+ }
17
+
18
+ #stack-frames-wrapper {
19
+ border: 1px solid var(--border);
20
+ border-radius: var(--radius);
21
+ }
22
+
23
+ #stack-frames-header {
24
+ display: flex;
25
+ justify-content: space-between;
26
+ align-items: center;
27
+ padding: 10px 16px;
28
+ border-radius: var(--radius) var(--radius) 0 0;
29
+ }
30
+
31
+ #all-frames-toggle {
32
+ display: flex;
33
+ align-items: center;
34
+ gap: 6px;
35
+ font-size: 13px;
36
+ font-weight: 500;
37
+ user-select: none;
38
+ }
39
+
40
+ #stack-frames {
41
+ list-style: none;
42
+ }
43
+
44
+ .stack-frame {
45
+ border-top: 1px solid var(--border);
46
+ font-size: 14px;
47
+ }
48
+ .stack-frame.stack-frame-native {
49
+ display: none;
50
+ font-style: italic;
51
+ }
52
+ .stack-frame.stack-frame-native a,
53
+ .stack-frame.stack-frame-native code {
54
+ color: var(--muted-fg);
55
+ }
56
+
57
+ #stack-frames-wrapper.display-all .stack-frame.stack-frame-native {
58
+ display: block;
59
+ }
60
+
61
+ .stack-frame-contents {
62
+ background: var(--frame-bg);
63
+ display: flex;
64
+ padding: 0 12px;
65
+ align-items: center;
66
+ justify-content: space-between;
67
+ }
68
+ .stack-frame:not(.stack-frame-native) .stack-frame-contents:hover {
69
+ background: var(--card-bg);
70
+ }
71
+ .stack-frame:last-child:not(.expanded) .stack-frame-contents {
72
+ border-radius: 0 0 var(--radius) var(--radius);
73
+ }
74
+
75
+ .stack-frame-location {
76
+ display: flex;
77
+ flex-direction: column;
78
+ overflow: hidden;
79
+ gap: 7px;
80
+ border: none;
81
+ background: none;
82
+ flex: 1;
83
+ color: inherit;
84
+ font: inherit;
85
+ padding: 9px 0;
86
+ }
87
+
88
+ .stack-frame-location a {
89
+ text-decoration: none;
90
+ white-space: nowrap;
91
+ overflow: hidden;
92
+ text-overflow: ellipsis;
93
+ }
94
+ .stack-frame-location span {
95
+ white-space: nowrap;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ }
99
+ .stack-frame-location code {
100
+ font-family: var(--font-sans);
101
+ }
102
+
103
+ .stack-frame-extras {
104
+ display: flex;
105
+ gap: 6px;
106
+ align-items: center;
107
+ }
108
+
109
+ .stack-frame-toggle-indicator {
110
+ border: none;
111
+ border-radius: var(--radius);
112
+ height: 22px;
113
+ width: 22px;
114
+ display: flex;
115
+ justify-content: center;
116
+ align-items: center;
117
+ background: none;
118
+ color: inherit;
119
+ font: inherit;
120
+ }
121
+ .stack-frame-toggle-indicator:hover {
122
+ border: 1px solid var(--switch-border);
123
+ }
124
+
125
+ .stack-frame-toggle-indicator svg {
126
+ width: 16px;
127
+ display: block;
128
+ }
129
+
130
+ .stack-frame.expanded .stack-frame-toggle-indicator svg {
131
+ transform: rotate(180deg);
132
+ }
133
+
134
+ .frame-label {
135
+ padding: 0px 8px;
136
+ border-radius: 20px;
137
+ align-items: center;
138
+ height: 20px;
139
+ background: var(--label-bg);
140
+ font-size: 12px;
141
+ font-weight: 500;
142
+ color: var(--label-fg);
143
+ display: none;
144
+ }
145
+ .stack-frame-source {
146
+ display: none;
147
+ }
148
+ .stack-frame.expanded .stack-frame-source {
149
+ display: block;
150
+ }
151
+
152
+ #stack-frames-raw {
153
+ --pre-bg-color: transparent;
154
+ border-top: 1px solid var(--border);
155
+ }
156
+ #stack-frames-formatted,
157
+ #stack-frames-raw {
158
+ display: none;
159
+ }
160
+ #stack-frames-formatted.visible,
161
+ #stack-frames-raw.visible {
162
+ display: block;
163
+ }
164
+
165
+ .toggle-switch {
166
+ display: flex;
167
+ background: var(--switch-bg);
168
+ border: 1px solid var(--switch-border);
169
+ border-radius: var(--radius);
170
+ }
171
+
172
+ .toggle-switch button {
173
+ background: none;
174
+ border: none;
175
+ font-family: inherit;
176
+ color: inherit;
177
+ font-size: 13px;
178
+ font-weight: 500;
179
+ padding: 4px 8px;
180
+ border-right: 1px solid var(--switch-border);
181
+ }
182
+
183
+ .toggle-switch button:first-child {
184
+ border-radius: var(--radius) 0 0 var(--radius);
185
+ }
186
+ .toggle-switch button:last-child {
187
+ border-radius: 0 var(--radius) var(--radius) 0;
188
+ border: none;
189
+ }
190
+
191
+ .toggle-switch button.active {
192
+ background: var(--switch-active-bg);
193
+ color: var(--title-fg);
194
+ }
195
+
196
+ @media (min-width: 768px) {
197
+ .stack-frame-location {
198
+ flex-direction: row;
199
+ }
200
+ }
201
+
202
+ @media (min-width: 1024px) {
203
+ .frame-label {
204
+ display: inline-flex;
205
+ }
206
+ }
@@ -0,0 +1,122 @@
1
+ :root {
2
+ --error-bg: #ff000632;
3
+ --pre-selection-bg: var(--slate-a5);
4
+ --line-numbers-fg: var(--slate-a11);
5
+ }
6
+ html.dark {
7
+ --error-bg: #ff173f2d;
8
+ --pre-selection-bg: var(--slate-a5);
9
+ --line-numbers-fg: var(--slate-a11);
10
+ }
11
+
12
+ .line-highlight {
13
+ position: absolute;
14
+ left: 0;
15
+ right: 0;
16
+ background: var(--error-bg);
17
+ height: 24px;
18
+ pointer-events: none;
19
+ }
20
+
21
+ [class*='shj-lang-'] {
22
+ white-space: pre;
23
+ border-top: 1px solid var(--border);
24
+ background: var(--pre-bg-color);
25
+ color: var(--pre-fg-color);
26
+ line-height: 24px;
27
+ box-sizing: border-box;
28
+ max-width: min(100%, 100vw);
29
+ display: block;
30
+ font-size: 12px;
31
+ font-family: var(--font-mono);
32
+ position: relative;
33
+ padding: 10px 12px 12px 12px;
34
+ }
35
+ [class*='shj-lang-'] * {
36
+ -webkit-font-smoothing: initial;
37
+ -moz-osx-font-smoothing: initial;
38
+ }
39
+
40
+ .shj-inline {
41
+ margin: 0;
42
+ padding: 2px 5px;
43
+ display: inline-block;
44
+ border-radius: 5px;
45
+ }
46
+ [class*='shj-lang-']::selection,
47
+ [class*='shj-lang-'] ::selection {
48
+ background: var(--pre-selection-bg);
49
+ }
50
+ [class*='shj-lang-'] > div {
51
+ display: flex;
52
+ overflow: auto;
53
+ }
54
+ [class*='shj-lang-'] > div :last-child {
55
+ flex: 1;
56
+ outline: none;
57
+ }
58
+ .shj-numbers {
59
+ padding-left: 5px;
60
+ counter-reset: line;
61
+ }
62
+ .shj-numbers div {
63
+ padding-right: 5px;
64
+ }
65
+ .shj-numbers div:before {
66
+ color: var(--line-numbers-fg);
67
+ display: block;
68
+ content: counter(line);
69
+ opacity: 0.5;
70
+ text-align: right;
71
+ margin-right: 5px;
72
+ counter-increment: line;
73
+ }
74
+ .shj-syn-cmnt {
75
+ font-style: italic;
76
+ }
77
+ .shj-syn-err,
78
+ .shj-syn-kwd {
79
+ color: var(--dt-symbol-fg-color);
80
+ }
81
+ .shj-syn-num {
82
+ color: var(--dt-number-fg-color);
83
+ }
84
+ .shj-syn-class {
85
+ color: var(--class-label-fg-color);
86
+ }
87
+
88
+ .shj-numbers,
89
+ .shj-syn-cmnt {
90
+ color: var(--dt-undefined-fg-color);
91
+ }
92
+ .shj-syn-insert,
93
+ .shj-syn-str {
94
+ color: var(--dt-string-fg-color);
95
+ }
96
+ .shj-syn-bool {
97
+ color: var(--dt-boolean-fg-color);
98
+ }
99
+ .shj-syn-type,
100
+ .shj-syn-oper {
101
+ color: var(--braces-fg-color);
102
+ }
103
+ .shj-syn-section,
104
+ .shj-syn-func {
105
+ color: var(--pre-fg-color);
106
+ }
107
+ .shj-syn-deleted,
108
+ .shj-syn-var {
109
+ color: var(--brackets-fg-color);
110
+ }
111
+ .shj-oneline {
112
+ padding: 12px 10px;
113
+ }
114
+ .shj-multiline.shj-mode-header {
115
+ padding: 20px;
116
+ }
117
+
118
+ @media (min-width: 768px) {
119
+ [class*='shj-lang-'] {
120
+ border-top: none;
121
+ }
122
+ }
@@ -0,0 +1,16 @@
1
+ function toggleTheme(input) {
2
+ if (input.checked) {
3
+ document.documentElement.classList.add('dark')
4
+ localStorage.setItem('youch-theme', 'dark')
5
+ } else {
6
+ document.documentElement.classList.remove('dark')
7
+ localStorage.setItem('youch-theme', 'light')
8
+ }
9
+ }
10
+
11
+ window.addEventListener('DOMContentLoaded', () => {
12
+ document.querySelector('#toggle-theme-checkbox').checked = usesDarkMode()
13
+ document.querySelector('#toggle-theme-checkbox').addEventListener('change', function () {
14
+ toggleTheme(this)
15
+ })
16
+ })
@@ -0,0 +1,55 @@
1
+ #header-actions {
2
+ display: flex;
3
+ flex-direction: row-reverse;
4
+ }
5
+
6
+ #toggle-theme-container {
7
+ position: relative;
8
+ display: inline-block;
9
+ padding-right: 10px;
10
+ }
11
+
12
+ #toggle-theme-container input[type='checkbox'] {
13
+ opacity: 0;
14
+ position: absolute;
15
+ }
16
+
17
+ #toggle-theme-label {
18
+ position: relative;
19
+ cursor: pointer;
20
+ border-radius: 50px;
21
+ display: inline-flex;
22
+ }
23
+
24
+ #toggle-theme-checkbox:focus + #toggle-theme-label {
25
+ outline: 2px solid var(--slate-a6);
26
+ outline-offset: 4px;
27
+ }
28
+
29
+ #light-theme-indicator,
30
+ #dark-theme-indicator {
31
+ position: relative;
32
+ z-index: 1;
33
+ display: flex;
34
+ align-items: center;
35
+ justify-content: center;
36
+ }
37
+
38
+ #toggle-theme-label svg {
39
+ width: 30px;
40
+ height: 30px;
41
+ }
42
+
43
+ #toggle-theme-container #dark-theme-indicator {
44
+ display: none;
45
+ }
46
+
47
+ #toggle-theme-container
48
+ input[type='checkbox']:checked
49
+ + #toggle-theme-label
50
+ #light-theme-indicator {
51
+ display: none;
52
+ }
53
+ #toggle-theme-container input[type='checkbox']:checked + #toggle-theme-label #dark-theme-indicator {
54
+ display: flex;
55
+ }
@@ -0,0 +1,11 @@
1
+ function usesDarkMode() {
2
+ let youchTheme = localStorage.getItem('youch-theme')
3
+ let hasDarkMode = false
4
+ if (youchTheme === null) {
5
+ hasDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
6
+ } else if (youchTheme === 'dark') {
7
+ hasDarkMode = true
8
+ }
9
+ return hasDarkMode
10
+ }
11
+ document.documentElement.classList.add(usesDarkMode() ? 'dark' : 'light')