vatts 2.0.2 → 2.1.0-canary.1
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/LICENSE +12 -12
- package/README.md +63 -63
- package/dist/api/console.d.ts +28 -5
- package/dist/api/console.js +305 -137
- package/dist/api/native-server.js +25 -4
- package/dist/bin/vatts.js +192 -4
- package/dist/builder.js +70 -69
- package/dist/core-go/core-linux-arm64.node +0 -0
- package/dist/core-go/core-linux-x64.node +0 -0
- package/dist/core-go/core-win-x64.node +0 -0
- package/dist/global/global.d.ts +176 -176
- package/dist/helpers.d.ts +2 -2
- package/dist/helpers.js +20 -41
- package/dist/hotReload.js +205 -205
- package/dist/index.d.ts +2 -1
- package/dist/index.js +104 -19
- package/dist/loaders.js +15 -15
- package/dist/react/BuildingPage.js +202 -202
- package/dist/react/DefaultNotFound.js +16 -16
- package/dist/react/DevIndicator.js +101 -101
- package/dist/react/entry.client.js +7 -8
- package/dist/react/image/Image.js +1 -1
- package/dist/react/renderer-react.js +270 -33
- package/dist/react/server-error.d.ts +8 -0
- package/dist/react/server-error.js +346 -0
- package/dist/router.js +1 -65
- package/dist/types.d.ts +1 -5
- package/dist/utils/utils.d.ts +1 -0
- package/dist/utils/utils.js +68 -0
- package/dist/vue/App.vue +191 -191
- package/dist/vue/BuildingPage.vue +280 -280
- package/dist/vue/DefaultNotFound.vue +328 -328
- package/dist/vue/DevIndicator.vue +225 -225
- package/dist/vue/ErrorModal.vue +316 -316
- package/dist/vue/Link.vue +38 -38
- package/dist/vue/entry.client.js +7 -7
- package/dist/vue/image/Image.vue +106 -106
- package/dist/vue/renderer.vue.js +266 -46
- package/dist/vue/server-error.vue +351 -0
- package/package.json +1 -1
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.default = ServerError;
|
|
37
|
+
const react_1 = __importStar(require("react"));
|
|
38
|
+
function formatUnknownError(error) {
|
|
39
|
+
if (!error)
|
|
40
|
+
return { message: 'Erro desconhecido no SSR.' };
|
|
41
|
+
if (error instanceof Error) {
|
|
42
|
+
return { message: error.message || String(error), stack: error.stack };
|
|
43
|
+
}
|
|
44
|
+
if (typeof error === 'string') {
|
|
45
|
+
return { message: error };
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
return { message: JSON.stringify(error, null, 2) };
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return { message: String(error) };
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Styles definidos como string para facilitar o uso sem arquivos CSS externos
|
|
55
|
+
const styles = `
|
|
56
|
+
.ssr-error-wrapper {
|
|
57
|
+
/* PALETA: React Theme (Igual ao BuildingScreen) */
|
|
58
|
+
--react-cyan: #61DAFB;
|
|
59
|
+
--react-dark: #20232a;
|
|
60
|
+
--bg-solid: #000000;
|
|
61
|
+
--card-bg: #0a0a0a;
|
|
62
|
+
--text-main: #ffffff;
|
|
63
|
+
--text-muted: #8ea9c7; /* Azulado acinzentado */
|
|
64
|
+
--error-red: #ff5f56; /* Mantido vermelho para indicar ERRO crítico */
|
|
65
|
+
|
|
66
|
+
font-family: 'Inter', system-ui, sans-serif;
|
|
67
|
+
position: fixed;
|
|
68
|
+
top: 0;
|
|
69
|
+
left: 0;
|
|
70
|
+
width: 100vw;
|
|
71
|
+
height: 100vh;
|
|
72
|
+
background-color: var(--bg-solid);
|
|
73
|
+
color: var(--text-main);
|
|
74
|
+
overflow: hidden;
|
|
75
|
+
z-index: 9999;
|
|
76
|
+
box-sizing: border-box;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ssr-error-wrapper .container {
|
|
80
|
+
display: flex;
|
|
81
|
+
flex-direction: column;
|
|
82
|
+
justify-content: center;
|
|
83
|
+
align-items: center;
|
|
84
|
+
width: 100%;
|
|
85
|
+
height: 100%;
|
|
86
|
+
padding: 20px;
|
|
87
|
+
box-sizing: border-box;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.ssr-error-wrapper .card {
|
|
91
|
+
width: 100%;
|
|
92
|
+
max-width: 900px;
|
|
93
|
+
max-height: 90vh;
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: column;
|
|
96
|
+
background: var(--card-bg);
|
|
97
|
+
/* Borda sutil ciano */
|
|
98
|
+
box-shadow: 0 0 0 1px rgba(97, 218, 251, 0.1), 0 40px 80px -20px rgba(0, 0, 0, 0.9);
|
|
99
|
+
border-radius: 20px;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
position: relative;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.ssr-error-wrapper .neon-line {
|
|
105
|
+
height: 1px;
|
|
106
|
+
width: 100%;
|
|
107
|
+
/* Gradiente Azul/Ciano */
|
|
108
|
+
background: linear-gradient(90deg, transparent, var(--react-dark), var(--react-cyan), var(--react-dark), transparent);
|
|
109
|
+
box-shadow: 0 0 15px rgba(97, 218, 251, 0.2);
|
|
110
|
+
flex-shrink: 0;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.ssr-error-wrapper .content {
|
|
114
|
+
padding: 32px 40px;
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-direction: column;
|
|
117
|
+
flex: 1;
|
|
118
|
+
overflow: hidden;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.ssr-error-wrapper h1 {
|
|
122
|
+
margin: 0 0 24px 0;
|
|
123
|
+
font-size: 1.8rem;
|
|
124
|
+
font-weight: 800;
|
|
125
|
+
letter-spacing: -0.03em;
|
|
126
|
+
/* Gradiente Texto: Branco para Cyan */
|
|
127
|
+
background: linear-gradient(180deg, #ffffff 0%, var(--react-cyan) 100%);
|
|
128
|
+
-webkit-background-clip: text;
|
|
129
|
+
-webkit-text-fill-color: transparent;
|
|
130
|
+
display: flex;
|
|
131
|
+
align-items: center;
|
|
132
|
+
gap: 12px;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.ssr-error-wrapper .icon {
|
|
136
|
+
-webkit-text-fill-color: initial;
|
|
137
|
+
font-size: 1.5rem;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.ssr-error-wrapper .meta-info {
|
|
141
|
+
margin-bottom: 24px;
|
|
142
|
+
display: flex;
|
|
143
|
+
flex-direction: column;
|
|
144
|
+
gap: 8px;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.ssr-error-wrapper .meta-row {
|
|
148
|
+
display: flex;
|
|
149
|
+
align-items: baseline;
|
|
150
|
+
gap: 10px;
|
|
151
|
+
font-size: 0.9rem;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.ssr-error-wrapper .meta-label {
|
|
155
|
+
color: var(--react-cyan); /* Label agora é Ciano */
|
|
156
|
+
font-weight: 700;
|
|
157
|
+
font-size: 0.75rem;
|
|
158
|
+
letter-spacing: 0.05em;
|
|
159
|
+
opacity: 0.8;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.ssr-error-wrapper .meta-value {
|
|
163
|
+
color: var(--text-muted);
|
|
164
|
+
font-family: 'JetBrains Mono', monospace;
|
|
165
|
+
font-size: 0.85rem;
|
|
166
|
+
word-break: break-all;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.ssr-error-wrapper .meta-value.accent {
|
|
170
|
+
color: var(--react-cyan);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.ssr-error-wrapper .terminal-box {
|
|
174
|
+
background: rgba(10, 10, 10, 0.8);
|
|
175
|
+
/* Borda e fundo sutilmente azulados */
|
|
176
|
+
border: 1px solid rgba(97, 218, 251, 0.15);
|
|
177
|
+
border-radius: 12px;
|
|
178
|
+
display: flex;
|
|
179
|
+
flex-direction: column;
|
|
180
|
+
flex: 1;
|
|
181
|
+
overflow: hidden;
|
|
182
|
+
font-family: 'JetBrains Mono', monospace;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.ssr-error-wrapper .terminal-header {
|
|
186
|
+
background: rgba(97, 218, 251, 0.05);
|
|
187
|
+
padding: 12px 16px;
|
|
188
|
+
border-bottom: 1px solid rgba(97, 218, 251, 0.1);
|
|
189
|
+
display: flex;
|
|
190
|
+
align-items: center;
|
|
191
|
+
gap: 12px;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.ssr-error-wrapper .dots {
|
|
195
|
+
display: flex;
|
|
196
|
+
gap: 6px;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.ssr-error-wrapper .dot {
|
|
200
|
+
width: 10px;
|
|
201
|
+
height: 10px;
|
|
202
|
+
border-radius: 50%;
|
|
203
|
+
}
|
|
204
|
+
.ssr-error-wrapper .dot.red { background: #ff5f56; }
|
|
205
|
+
.ssr-error-wrapper .dot.yellow { background: #ffbd2e; }
|
|
206
|
+
.ssr-error-wrapper .dot.green { background: #27c93f; }
|
|
207
|
+
|
|
208
|
+
.ssr-error-wrapper .terminal-title {
|
|
209
|
+
font-size: 0.75rem;
|
|
210
|
+
color: rgba(255,255,255,0.3);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.ssr-error-wrapper .terminal-body {
|
|
214
|
+
padding: 20px;
|
|
215
|
+
overflow-y: auto;
|
|
216
|
+
color: #e0e0e0;
|
|
217
|
+
font-size: 0.85rem;
|
|
218
|
+
line-height: 1.6;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.ssr-error-wrapper .log-entry.error {
|
|
222
|
+
color: #ff8b8b; /* Vermelho claro para erro */
|
|
223
|
+
font-weight: 600;
|
|
224
|
+
margin-bottom: 16px;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.ssr-error-wrapper .arrow {
|
|
228
|
+
color: var(--react-cyan);
|
|
229
|
+
margin-right: 8px;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.ssr-error-wrapper .separator {
|
|
233
|
+
height: 1px;
|
|
234
|
+
background: rgba(255,255,255,0.1);
|
|
235
|
+
margin: 16px 0;
|
|
236
|
+
width: 100%;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
.ssr-error-wrapper .stack-trace {
|
|
240
|
+
color: rgba(142, 169, 199, 0.6); /* Azulado mudo */
|
|
241
|
+
white-space: pre-wrap;
|
|
242
|
+
font-size: 0.75rem;
|
|
243
|
+
line-height: 1.5;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.ssr-error-wrapper .custom-scroll::-webkit-scrollbar {
|
|
247
|
+
width: 8px;
|
|
248
|
+
}
|
|
249
|
+
.ssr-error-wrapper .custom-scroll::-webkit-scrollbar-track {
|
|
250
|
+
background: transparent;
|
|
251
|
+
}
|
|
252
|
+
.ssr-error-wrapper .custom-scroll::-webkit-scrollbar-thumb {
|
|
253
|
+
background: rgba(97, 218, 251, 0.2);
|
|
254
|
+
border-radius: 4px;
|
|
255
|
+
}
|
|
256
|
+
.ssr-error-wrapper .custom-scroll::-webkit-scrollbar-thumb:hover {
|
|
257
|
+
background: rgba(97, 218, 251, 0.4);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.ssr-error-wrapper .card-footer {
|
|
261
|
+
padding: 16px 40px;
|
|
262
|
+
background: rgba(97, 218, 251, 0.02);
|
|
263
|
+
border-top: 1px solid rgba(97, 218, 251, 0.05);
|
|
264
|
+
display: flex;
|
|
265
|
+
justify-content: space-between;
|
|
266
|
+
align-items: center;
|
|
267
|
+
font-size: 11px;
|
|
268
|
+
box-sizing: border-box;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.ssr-error-wrapper .footer-hint {
|
|
272
|
+
color: rgba(255, 255, 255, 0.3);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.ssr-error-wrapper .status-error {
|
|
276
|
+
display: flex;
|
|
277
|
+
align-items: center;
|
|
278
|
+
gap: 8px;
|
|
279
|
+
color: var(--error-red);
|
|
280
|
+
font-weight: 600;
|
|
281
|
+
text-transform: uppercase;
|
|
282
|
+
letter-spacing: 0.05em;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
.ssr-error-wrapper .status-dot {
|
|
286
|
+
width: 6px;
|
|
287
|
+
height: 6px;
|
|
288
|
+
background-color: var(--error-red);
|
|
289
|
+
border-radius: 50%;
|
|
290
|
+
box-shadow: 0 0 8px var(--error-red);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.ssr-error-wrapper .brand-link {
|
|
294
|
+
margin-top: 24px;
|
|
295
|
+
opacity: 0.4;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.ssr-error-wrapper .brand-text {
|
|
299
|
+
font-family: 'Inter', sans-serif;
|
|
300
|
+
font-size: 14px;
|
|
301
|
+
font-weight: 600;
|
|
302
|
+
color: #fff;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.ssr-error-wrapper .brand-highlight {
|
|
306
|
+
color: var(--react-cyan);
|
|
307
|
+
}
|
|
308
|
+
`;
|
|
309
|
+
function ServerError({ title = 'SSR Error', error, hint, requestUrl, }) {
|
|
310
|
+
const { message, stack } = (0, react_1.useMemo)(() => formatUnknownError(error), [error]);
|
|
311
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
312
|
+
react_1.default.createElement("style", null, styles),
|
|
313
|
+
react_1.default.createElement("link", { href: "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700;900&family=JetBrains+Mono:wght@400;500&display=swap", rel: "stylesheet" }),
|
|
314
|
+
react_1.default.createElement("div", { className: "ssr-error-wrapper" },
|
|
315
|
+
react_1.default.createElement("div", { className: "container" },
|
|
316
|
+
react_1.default.createElement("div", { className: "card" },
|
|
317
|
+
react_1.default.createElement("div", { className: "neon-line" }),
|
|
318
|
+
react_1.default.createElement("div", { className: "content" },
|
|
319
|
+
react_1.default.createElement("h1", null, title),
|
|
320
|
+
(requestUrl || hint) && (react_1.default.createElement("div", { className: "meta-info" },
|
|
321
|
+
requestUrl && (react_1.default.createElement("div", { className: "meta-row" },
|
|
322
|
+
react_1.default.createElement("span", { className: "meta-label" }, "REQUEST URL:"),
|
|
323
|
+
react_1.default.createElement("code", { className: "meta-value" }, requestUrl))),
|
|
324
|
+
hint && (react_1.default.createElement("div", { className: "meta-row" },
|
|
325
|
+
react_1.default.createElement("span", { className: "meta-label" }, "HINT:"),
|
|
326
|
+
react_1.default.createElement("span", { className: "meta-value accent" }, hint))))),
|
|
327
|
+
react_1.default.createElement("div", { className: "terminal-box" },
|
|
328
|
+
react_1.default.createElement("div", { className: "terminal-header" },
|
|
329
|
+
react_1.default.createElement("div", { className: "dots" },
|
|
330
|
+
react_1.default.createElement("div", { className: "dot red" }),
|
|
331
|
+
react_1.default.createElement("div", { className: "dot yellow" }),
|
|
332
|
+
react_1.default.createElement("div", { className: "dot green" })),
|
|
333
|
+
react_1.default.createElement("span", { className: "terminal-title" }, "SSR Exception Log")),
|
|
334
|
+
react_1.default.createElement("div", { className: "terminal-body custom-scroll" },
|
|
335
|
+
react_1.default.createElement("div", { className: "log-entry error" },
|
|
336
|
+
react_1.default.createElement("span", { className: "arrow" }, '>'),
|
|
337
|
+
" ",
|
|
338
|
+
message),
|
|
339
|
+
stack && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
340
|
+
react_1.default.createElement("div", { className: "separator" }),
|
|
341
|
+
react_1.default.createElement("div", { className: "stack-trace" }, stack)))))),
|
|
342
|
+
react_1.default.createElement("div", { className: "card-footer" },
|
|
343
|
+
react_1.default.createElement("div", { className: "status-error" },
|
|
344
|
+
react_1.default.createElement("div", { className: "status-dot" }),
|
|
345
|
+
react_1.default.createElement("span", null, "Render Failed"))))))));
|
|
346
|
+
}
|
package/dist/router.js
CHANGED
|
@@ -40,7 +40,6 @@ const url_1 = require("url");
|
|
|
40
40
|
const console_1 = __importDefault(require("./api/console"));
|
|
41
41
|
const factory_1 = require("./adapters/factory");
|
|
42
42
|
const http_1 = require("./api/http");
|
|
43
|
-
const helpers_1 = require("./helpers");
|
|
44
43
|
// --- Estado Global ---
|
|
45
44
|
let allRoutes = [];
|
|
46
45
|
let allBackendRoutes = [];
|
|
@@ -252,70 +251,7 @@ function loadPathRoutes(routesDir) {
|
|
|
252
251
|
return allRoutes.map(r => ({ ...r.config, componentPath: r.componentPath }));
|
|
253
252
|
}
|
|
254
253
|
function loadRoutes(routesDir) {
|
|
255
|
-
|
|
256
|
-
return loadPathRoutes(path_1.default.join(routesDir, "../"));
|
|
257
|
-
}
|
|
258
|
-
if (!fs_1.default.existsSync(routesDir)) {
|
|
259
|
-
allRoutes = [];
|
|
260
|
-
return [];
|
|
261
|
-
}
|
|
262
|
-
const loaded = [];
|
|
263
|
-
const cwdPath = process.cwd();
|
|
264
|
-
// Função recursiva otimizada
|
|
265
|
-
const scanAndLoad = (dir) => {
|
|
266
|
-
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
267
|
-
for (const entry of entries) {
|
|
268
|
-
const name = entry.name;
|
|
269
|
-
// Skip arquivos ocultos ou de sistema para acelerar scan
|
|
270
|
-
if (name.startsWith('.') || name.startsWith('_'))
|
|
271
|
-
continue;
|
|
272
|
-
const fullPath = path_1.default.join(dir, name);
|
|
273
|
-
if (entry.isDirectory()) {
|
|
274
|
-
if (name === 'backend')
|
|
275
|
-
continue;
|
|
276
|
-
scanAndLoad(fullPath);
|
|
277
|
-
}
|
|
278
|
-
else if (entry.isFile() && (name.endsWith('.tsx') || name.endsWith('.ts') || name.endsWith(".jsx") || name.endsWith(".js") || name.endsWith(".vue"))) {
|
|
279
|
-
try {
|
|
280
|
-
const absolutePath = path_1.default.resolve(fullPath);
|
|
281
|
-
// OTIMIZAÇÃO CRÍTICA: Só limpa cache se o arquivo já foi carregado antes.
|
|
282
|
-
// Isso evita chamadas caras de require.resolve() na inicialização do servidor.
|
|
283
|
-
if (loadedFiles.has(absolutePath)) {
|
|
284
|
-
safeClearCache(absolutePath);
|
|
285
|
-
}
|
|
286
|
-
// OTIMIZAÇÃO: Usa requireWithoutStyles também para rotas!
|
|
287
|
-
// Isso evita que o Node tente processar imports de CSS/Assets dentro das páginas durante o roteamento.
|
|
288
|
-
const routeModule = requireWithoutStyles(absolutePath);
|
|
289
|
-
let defaultConfig = routeModule.default;
|
|
290
|
-
if (name.endsWith(".vue")) {
|
|
291
|
-
defaultConfig = {
|
|
292
|
-
...routeModule.config,
|
|
293
|
-
component: routeModule.default
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
if (defaultConfig?.pattern && defaultConfig?.component) {
|
|
297
|
-
const componentPath = path_1.default.relative(cwdPath, fullPath).replace(/\\/g, '/');
|
|
298
|
-
// OTIMIZAÇÃO: Pré-compila a regex aqui
|
|
299
|
-
const regex = compileRoutePatternWithGroups(defaultConfig.pattern);
|
|
300
|
-
loaded.push({
|
|
301
|
-
config: defaultConfig,
|
|
302
|
-
componentPath,
|
|
303
|
-
regex,
|
|
304
|
-
paramNames: [] // Usando named groups na regex, não precisamos mapear manual
|
|
305
|
-
});
|
|
306
|
-
loadedFiles.add(absolutePath);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
catch (error) {
|
|
310
|
-
console_1.default.error(`Error loading route ${fullPath}:`, error);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
};
|
|
315
|
-
scanAndLoad(routesDir);
|
|
316
|
-
// Atualiza variável global e retorna formato esperado pelo sistema (sem a regex exposta para não quebrar tipagem antiga se for estrita)
|
|
317
|
-
allRoutes = loaded;
|
|
318
|
-
return allRoutes.map(r => ({ ...r.config, componentPath: r.componentPath }));
|
|
254
|
+
return loadPathRoutes(path_1.default.join(routesDir, "../"));
|
|
319
255
|
}
|
|
320
256
|
function findMatchingRoute(pathname) {
|
|
321
257
|
// OTIMIZAÇÃO: Loop usando regex pré-compilada. Muito mais rápido.
|
package/dist/types.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface VattsOptions {
|
|
|
19
19
|
dir?: string;
|
|
20
20
|
framework?: 'express' | 'fastify' | 'native';
|
|
21
21
|
envFiles?: string[];
|
|
22
|
+
skipBuild?: boolean;
|
|
22
23
|
}
|
|
23
24
|
/**
|
|
24
25
|
* Interface para as configurações avançadas do servidor Vatts.js.
|
|
@@ -33,11 +34,6 @@ export interface VattsConfig {
|
|
|
33
34
|
cert: string;
|
|
34
35
|
ca?: string;
|
|
35
36
|
};
|
|
36
|
-
/**
|
|
37
|
-
* Prefere utilizar rotas por path, sem precisar registrar?
|
|
38
|
-
* Padrão: false
|
|
39
|
-
*/
|
|
40
|
-
pathRouter?: boolean;
|
|
41
37
|
/**
|
|
42
38
|
* Limita o número máximo de headers HTTP permitidos por requisição.
|
|
43
39
|
* Padrão: 100
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function showTitle(): Promise<void>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.showTitle = showTitle;
|
|
37
|
+
const console_1 = __importStar(require("../api/console"));
|
|
38
|
+
async function showTitle() {
|
|
39
|
+
const currentVersion = require('../../package.json').version;
|
|
40
|
+
async function verifyVersion() {
|
|
41
|
+
// node fetch
|
|
42
|
+
try {
|
|
43
|
+
const response = await fetch('https://registry.npmjs.org/vatts/latest');
|
|
44
|
+
const data = await response.json();
|
|
45
|
+
return data.version;
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console_1.default.error('Could not check for the latest Vatts.js version:', error);
|
|
49
|
+
return currentVersion; // Retorna a versão atual em caso de erro
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const latestVersion = await verifyVersion();
|
|
53
|
+
const isUpToDate = latestVersion === currentVersion;
|
|
54
|
+
let message;
|
|
55
|
+
if (!isUpToDate) {
|
|
56
|
+
message = `${console_1.Colors.FgRed} A new version is available (v${latestVersion})${console_1.Colors.FgMagenta}`;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
message = `${console_1.Colors.FgGreen} You are on the latest version${console_1.Colors.FgMagenta}`;
|
|
60
|
+
}
|
|
61
|
+
// JS STICK LETTERS
|
|
62
|
+
console.log(`${console_1.Colors.Bright + console_1.Colors.FgCyan}
|
|
63
|
+
${console_1.Colors.Bright + console_1.Colors.FgCyan} ___ ___ __ ${console_1.Colors.FgWhite} __
|
|
64
|
+
${console_1.Colors.Bright + console_1.Colors.FgCyan} \\ / /\\ | | /__\`${console_1.Colors.FgWhite} | /__\` ${console_1.Colors.Bright + console_1.Colors.FgCyan}Vatts${console_1.Colors.FgWhite}.js ${console_1.Colors.FgGray}(v${currentVersion}) - mfraz
|
|
65
|
+
${console_1.Colors.Bright + console_1.Colors.FgCyan} \\/ /~~\\ | | .__/ .${console_1.Colors.FgWhite} \\__/ .__/ ${message}
|
|
66
|
+
|
|
67
|
+
`);
|
|
68
|
+
}
|