hightjs 0.5.2 → 0.5.3
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/package.json +1 -1
- package/src/builder.js +8 -8
- package/src/hotReload.ts +4 -7
- package/src/router.ts +14 -26
- package/dist/adapters/express.d.ts +0 -7
- package/dist/adapters/express.js +0 -63
- package/dist/adapters/factory.d.ts +0 -23
- package/dist/adapters/factory.js +0 -122
- package/dist/adapters/fastify.d.ts +0 -25
- package/dist/adapters/fastify.js +0 -61
- package/dist/adapters/native.d.ts +0 -8
- package/dist/adapters/native.js +0 -198
- package/dist/api/console.d.ts +0 -94
- package/dist/api/console.js +0 -294
- package/dist/api/http.d.ts +0 -180
- package/dist/api/http.js +0 -469
- package/dist/bin/hightjs.d.ts +0 -2
- package/dist/bin/hightjs.js +0 -214
- package/dist/builder.d.ts +0 -32
- package/dist/builder.js +0 -581
- package/dist/client/DefaultNotFound.d.ts +0 -1
- package/dist/client/DefaultNotFound.js +0 -79
- package/dist/client/client.d.ts +0 -3
- package/dist/client/client.js +0 -24
- package/dist/client/clientRouter.d.ts +0 -58
- package/dist/client/clientRouter.js +0 -132
- package/dist/client/entry.client.d.ts +0 -1
- package/dist/client/entry.client.js +0 -455
- package/dist/components/Link.d.ts +0 -7
- package/dist/components/Link.js +0 -13
- package/dist/global/global.d.ts +0 -117
- package/dist/global/global.js +0 -17
- package/dist/helpers.d.ts +0 -20
- package/dist/helpers.js +0 -583
- package/dist/hotReload.d.ts +0 -32
- package/dist/hotReload.js +0 -548
- package/dist/index.d.ts +0 -18
- package/dist/index.js +0 -494
- package/dist/loaders.d.ts +0 -1
- package/dist/loaders.js +0 -46
- package/dist/renderer.d.ts +0 -14
- package/dist/renderer.js +0 -380
- package/dist/router.d.ts +0 -101
- package/dist/router.js +0 -667
- package/dist/types/framework.d.ts +0 -37
- package/dist/types/framework.js +0 -2
- package/dist/types.d.ts +0 -192
- package/dist/types.js +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hightjs",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "HightJS is a high-level framework for building web applications with ease and speed. It provides a robust set of tools and features to streamline development and enhance productivity.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
package/src/builder.js
CHANGED
|
@@ -409,7 +409,7 @@ async function buildWithChunks(entryPoint, outdir, isProduction = false) {
|
|
|
409
409
|
sourcemap: !isProduction,
|
|
410
410
|
platform: 'browser',
|
|
411
411
|
outdir: outdir,
|
|
412
|
-
loader: { '.js': '
|
|
412
|
+
loader: { '.js': 'js', '.ts': 'tsx' },
|
|
413
413
|
external: nodeBuiltIns,
|
|
414
414
|
plugins: [postcssPlugin, npmDependenciesPlugin, reactResolvePlugin, markdownPlugin, assetsPlugin],
|
|
415
415
|
format: 'esm', // ESM suporta melhor o code splitting
|
|
@@ -419,7 +419,7 @@ async function buildWithChunks(entryPoint, outdir, isProduction = false) {
|
|
|
419
419
|
},
|
|
420
420
|
conditions: ['development'],
|
|
421
421
|
mainFields: ['browser', 'module', 'main'],
|
|
422
|
-
resolveExtensions: ['.tsx', '.ts', '.
|
|
422
|
+
resolveExtensions: ['.tsx', '.ts', '.js'],
|
|
423
423
|
splitting: true,
|
|
424
424
|
chunkNames: 'chunks/[name]-[hash]',
|
|
425
425
|
// Força o nome do entry para main(.js) ou main-[hash].js em prod
|
|
@@ -471,7 +471,7 @@ async function watchWithChunks(entryPoint, outdir, hotReloadManager = null) {
|
|
|
471
471
|
sourcemap: true,
|
|
472
472
|
platform: 'browser',
|
|
473
473
|
outdir: outdir,
|
|
474
|
-
loader: { '.js': '
|
|
474
|
+
loader: { '.js': 'js', '.ts': 'tsx' },
|
|
475
475
|
external: nodeBuiltIns,
|
|
476
476
|
plugins: [postcssPlugin, npmDependenciesPlugin, reactResolvePlugin, hmrPlugin, buildCompletePlugin, markdownPlugin, assetsPlugin],
|
|
477
477
|
format: 'esm',
|
|
@@ -481,7 +481,7 @@ async function watchWithChunks(entryPoint, outdir, hotReloadManager = null) {
|
|
|
481
481
|
},
|
|
482
482
|
conditions: ['development'],
|
|
483
483
|
mainFields: ['browser', 'module', 'main'],
|
|
484
|
-
resolveExtensions: ['.tsx', '.ts', '.
|
|
484
|
+
resolveExtensions: ['.tsx', '.ts', '.js'],
|
|
485
485
|
splitting: true,
|
|
486
486
|
chunkNames: 'chunks/[name]-[hash]',
|
|
487
487
|
entryNames: 'main',
|
|
@@ -517,7 +517,7 @@ async function build(entryPoint, outfile, isProduction = false) {
|
|
|
517
517
|
sourcemap: !isProduction, // Só gera sourcemap em dev
|
|
518
518
|
platform: 'browser',
|
|
519
519
|
outfile: outfile,
|
|
520
|
-
loader: { '.js': '
|
|
520
|
+
loader: { '.js': 'js', '.ts': 'tsx' },
|
|
521
521
|
external: nodeBuiltIns,
|
|
522
522
|
plugins: [postcssPlugin, npmDependenciesPlugin, reactResolvePlugin, markdownPlugin, assetsPlugin],
|
|
523
523
|
format: 'iife',
|
|
@@ -529,7 +529,7 @@ async function build(entryPoint, outfile, isProduction = false) {
|
|
|
529
529
|
// Configurações específicas para React 19
|
|
530
530
|
conditions: ['development'],
|
|
531
531
|
mainFields: ['browser', 'module', 'main'],
|
|
532
|
-
resolveExtensions: ['.tsx', '.ts', '.
|
|
532
|
+
resolveExtensions: ['.tsx', '.ts', '.js'],
|
|
533
533
|
// Garante que não há duplicação de dependências
|
|
534
534
|
splitting: false,
|
|
535
535
|
// Preserva nomes de funções e comportamento
|
|
@@ -580,7 +580,7 @@ async function watch(entryPoint, outfile, hotReloadManager = null) {
|
|
|
580
580
|
sourcemap: true,
|
|
581
581
|
platform: 'browser',
|
|
582
582
|
outfile: outfile,
|
|
583
|
-
loader: { '.js': '
|
|
583
|
+
loader: { '.js': 'js', '.ts': 'tsx' },
|
|
584
584
|
external: nodeBuiltIns,
|
|
585
585
|
format: 'iife',
|
|
586
586
|
globalName: 'HwebApp',
|
|
@@ -591,7 +591,7 @@ async function watch(entryPoint, outfile, hotReloadManager = null) {
|
|
|
591
591
|
// Configurações específicas para React 19 (mesmo que no build)
|
|
592
592
|
conditions: ['development'],
|
|
593
593
|
mainFields: ['browser', 'module', 'main'],
|
|
594
|
-
resolveExtensions: ['.tsx', '.ts', '.
|
|
594
|
+
resolveExtensions: ['.tsx', '.ts', '.js'],
|
|
595
595
|
// Garante que não há duplicação de dependências
|
|
596
596
|
splitting: false,
|
|
597
597
|
// Preserva nomes de funções e comportamento
|
package/src/hotReload.ts
CHANGED
|
@@ -192,8 +192,7 @@ export class HotReloadManager {
|
|
|
192
192
|
filePath.includes(path.join('src', 'web', 'components')) ||
|
|
193
193
|
filePath.includes('layout.tsx') ||
|
|
194
194
|
filePath.includes('not-found.tsx') ||
|
|
195
|
-
filePath.endsWith('.tsx')
|
|
196
|
-
filePath.endsWith('.jsx');
|
|
195
|
+
filePath.endsWith('.tsx');
|
|
197
196
|
|
|
198
197
|
const isBackendFile = filePath.includes(path.join('src', 'backend')) && !isFrontendFile;
|
|
199
198
|
|
|
@@ -393,9 +392,7 @@ export class HotReloadManager {
|
|
|
393
392
|
// Mudanças que exigem reload completo
|
|
394
393
|
const needsFullReload =
|
|
395
394
|
file.includes('layout.tsx') ||
|
|
396
|
-
file.includes('layout.jsx') ||
|
|
397
395
|
file.includes('not-found.tsx') ||
|
|
398
|
-
file.includes('not-found.jsx') ||
|
|
399
396
|
file.endsWith('.css');
|
|
400
397
|
|
|
401
398
|
if (needsFullReload) {
|
|
@@ -405,15 +402,15 @@ export class HotReloadManager {
|
|
|
405
402
|
}
|
|
406
403
|
|
|
407
404
|
// Mudanças em rotas: tenta HMR
|
|
408
|
-
if (file.includes('/routes/') || file.includes('
|
|
405
|
+
if (file.includes('/routes/') || file.includes('routes')) {
|
|
409
406
|
console.log('⚡ Route component changed, hot reloading...');
|
|
410
|
-
|
|
407
|
+
|
|
411
408
|
// Dispara evento para forçar re-render
|
|
412
409
|
const event = new CustomEvent('hmr:component-update', {
|
|
413
410
|
detail: { file: data.file, timestamp: Date.now() }
|
|
414
411
|
});
|
|
415
412
|
window.dispatchEvent(event);
|
|
416
|
-
|
|
413
|
+
|
|
417
414
|
// Aguarda 500ms para ver se o HMR foi bem-sucedido
|
|
418
415
|
setTimeout(() => {
|
|
419
416
|
const hmrSuccess = window.__HMR_SUCCESS__;
|
package/src/router.ts
CHANGED
|
@@ -61,6 +61,8 @@ function clearRequireCache(filePath: string) {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
// Nota: Suporte apenas para TypeScript (.ts, .tsx). Não tratamos .jsx aqui.
|
|
65
|
+
|
|
64
66
|
/**
|
|
65
67
|
* Limpa todo o cache de rotas carregadas
|
|
66
68
|
*/
|
|
@@ -108,13 +110,8 @@ export function clearFileCache(changedFilePath: string) {
|
|
|
108
110
|
export function loadLayout(webDir: string): { componentPath: string; metadata?: any } | null {
|
|
109
111
|
const layoutPath = path.join(webDir, 'layout.tsx');
|
|
110
112
|
const layoutPathTs = path.join(webDir, 'layout.ts');
|
|
111
|
-
const layoutPathJsx = path.join(webDir, 'layout.jsx');
|
|
112
|
-
const layoutPathJs = path.join(webDir, 'layout.js');
|
|
113
|
-
|
|
114
113
|
const layoutFile = fs.existsSync(layoutPath) ? layoutPath :
|
|
115
|
-
fs.existsSync(layoutPathTs) ? layoutPathTs :
|
|
116
|
-
fs.existsSync(layoutPathJsx) ? layoutPathJsx :
|
|
117
|
-
fs.existsSync(layoutPathJs) ? layoutPathJs : null;
|
|
114
|
+
fs.existsSync(layoutPathTs) ? layoutPathTs : null;
|
|
118
115
|
|
|
119
116
|
if (layoutFile) {
|
|
120
117
|
const absolutePath = path.resolve(layoutFile);
|
|
@@ -128,8 +125,10 @@ export function loadLayout(webDir: string): { componentPath: string; metadata?:
|
|
|
128
125
|
.replace(/import\s+['"][^'"]*\.scss['"];?/g, '// SCSS import removido para servidor')
|
|
129
126
|
.replace(/import\s+['"][^'"]*\.sass['"];?/g, '// SASS import removido para servidor');
|
|
130
127
|
|
|
131
|
-
|
|
132
|
-
|
|
128
|
+
// Escreve um arquivo temporário .temp.tsx ou .temp.ts sem imports de CSS
|
|
129
|
+
const ext = path.extname(layoutFile).toLowerCase();
|
|
130
|
+
const tempFile = layoutFile.replace(/\.(tsx|ts)$/i, '.temp.$1');
|
|
131
|
+
fs.writeFileSync(tempFile, tempContent, 'utf8');
|
|
133
132
|
|
|
134
133
|
// Otimização: limpa cache apenas se existir
|
|
135
134
|
try {
|
|
@@ -142,7 +141,7 @@ export function loadLayout(webDir: string): { componentPath: string; metadata?:
|
|
|
142
141
|
const layoutModule = require(tempFile);
|
|
143
142
|
|
|
144
143
|
// Remove o arquivo temporário
|
|
145
|
-
fs.unlinkSync(tempFile);
|
|
144
|
+
try { fs.unlinkSync(tempFile); } catch {}
|
|
146
145
|
|
|
147
146
|
const metadata = layoutModule.metadata || null;
|
|
148
147
|
|
|
@@ -193,9 +192,8 @@ export function loadRoutes(routesDir: string): (RouteConfig & { componentPath: s
|
|
|
193
192
|
if (entry.name === 'backend') continue;
|
|
194
193
|
scanDirectory(path.join(dir, entry.name), relativePath);
|
|
195
194
|
} else if (entry.isFile()) {
|
|
196
|
-
// Filtra apenas arquivos .ts/.tsx
|
|
197
|
-
if (entry.name.endsWith('.ts') || entry.name.endsWith('.tsx')
|
|
198
|
-
entry.name.endsWith('.js') || entry.name.endsWith('.jsx')) {
|
|
195
|
+
// Filtra apenas arquivos .ts/.tsx
|
|
196
|
+
if (entry.name.endsWith('.ts') || entry.name.endsWith('.tsx')) {
|
|
199
197
|
routeFiles.push(relativePath);
|
|
200
198
|
}
|
|
201
199
|
}
|
|
@@ -288,16 +286,12 @@ let loadedMiddlewares: Map<string, HightMiddleware[]> = new Map();
|
|
|
288
286
|
function loadMiddlewareFromDirectory(dir: string): HightMiddleware[] {
|
|
289
287
|
const middlewares: HightMiddleware[] = [];
|
|
290
288
|
|
|
291
|
-
// Procura por middleware.ts, middleware.tsx
|
|
289
|
+
// Procura por middleware.ts, middleware.tsx
|
|
292
290
|
const middlewarePath = path.join(dir, 'middleware.ts');
|
|
293
291
|
const middlewarePathTsx = path.join(dir, 'middleware.tsx');
|
|
294
|
-
const middlewarePathJs = path.join(dir, 'middleware.js');
|
|
295
|
-
const middlewarePathJsx = path.join(dir, 'middleware.jsx');
|
|
296
292
|
|
|
297
293
|
const middlewareFile = fs.existsSync(middlewarePath) ? middlewarePath :
|
|
298
|
-
fs.existsSync(middlewarePathTsx) ? middlewarePathTsx :
|
|
299
|
-
fs.existsSync(middlewarePathJs) ? middlewarePathJs :
|
|
300
|
-
fs.existsSync(middlewarePathJsx) ? middlewarePathJsx : null;
|
|
294
|
+
fs.existsSync(middlewarePathTsx) ? middlewarePathTsx : null;
|
|
301
295
|
|
|
302
296
|
if (middlewareFile) {
|
|
303
297
|
try {
|
|
@@ -374,8 +368,7 @@ export function loadBackendRoutes(backendRoutesDir: string) {
|
|
|
374
368
|
if (entry.isDirectory()) {
|
|
375
369
|
scanDirectory(path.join(dir, entry.name), relativePath);
|
|
376
370
|
} else if (entry.isFile()) {
|
|
377
|
-
const isSupported = entry.name.endsWith('.ts') || entry.name.endsWith('.tsx')
|
|
378
|
-
entry.name.endsWith('.js') || entry.name.endsWith('.jsx');
|
|
371
|
+
const isSupported = entry.name.endsWith('.ts') || entry.name.endsWith('.tsx');
|
|
379
372
|
if (!isSupported) continue;
|
|
380
373
|
|
|
381
374
|
// Identifica middlewares durante o scan
|
|
@@ -498,13 +491,8 @@ export function findMatchingBackendRoute(pathname: string, method: string) {
|
|
|
498
491
|
export function loadNotFound(webDir: string): { componentPath: string } | null {
|
|
499
492
|
const notFoundPath = path.join(webDir, 'notFound.tsx');
|
|
500
493
|
const notFoundPathTs = path.join(webDir, 'notFound.ts');
|
|
501
|
-
const notFoundPathJsx = path.join(webDir, 'notFound.jsx');
|
|
502
|
-
const notFoundPathJs = path.join(webDir, 'notFound.js');
|
|
503
|
-
|
|
504
494
|
const notFoundFile = fs.existsSync(notFoundPath) ? notFoundPath :
|
|
505
|
-
fs.existsSync(notFoundPathTs) ? notFoundPathTs :
|
|
506
|
-
fs.existsSync(notFoundPathJsx) ? notFoundPathJsx :
|
|
507
|
-
fs.existsSync(notFoundPathJs) ? notFoundPathJs : null;
|
|
495
|
+
fs.existsSync(notFoundPathTs) ? notFoundPathTs : null;
|
|
508
496
|
|
|
509
497
|
if (notFoundFile) {
|
|
510
498
|
const absolutePath = path.resolve(notFoundFile);
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Request as ExpressRequest, Response as ExpressResponse } from 'express';
|
|
2
|
-
import { GenericRequest, GenericResponse, FrameworkAdapter } from '../types/framework';
|
|
3
|
-
export declare class ExpressAdapter implements FrameworkAdapter {
|
|
4
|
-
type: "express";
|
|
5
|
-
parseRequest(req: ExpressRequest): GenericRequest;
|
|
6
|
-
createResponse(res: ExpressResponse): GenericResponse;
|
|
7
|
-
}
|
package/dist/adapters/express.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ExpressAdapter = void 0;
|
|
4
|
-
class ExpressAdapter {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.type = 'express';
|
|
7
|
-
}
|
|
8
|
-
parseRequest(req) {
|
|
9
|
-
return {
|
|
10
|
-
method: req.method,
|
|
11
|
-
url: req.url,
|
|
12
|
-
headers: req.headers,
|
|
13
|
-
body: req.body,
|
|
14
|
-
query: req.query,
|
|
15
|
-
params: req.params,
|
|
16
|
-
cookies: req.cookies || {},
|
|
17
|
-
raw: req,
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
createResponse(res) {
|
|
21
|
-
return new ExpressResponseWrapper(res);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.ExpressAdapter = ExpressAdapter;
|
|
25
|
-
class ExpressResponseWrapper {
|
|
26
|
-
constructor(res) {
|
|
27
|
-
this.res = res;
|
|
28
|
-
}
|
|
29
|
-
get raw() {
|
|
30
|
-
return this.res;
|
|
31
|
-
}
|
|
32
|
-
status(code) {
|
|
33
|
-
this.res.status(code);
|
|
34
|
-
return this;
|
|
35
|
-
}
|
|
36
|
-
header(name, value) {
|
|
37
|
-
this.res.setHeader(name, value);
|
|
38
|
-
return this;
|
|
39
|
-
}
|
|
40
|
-
cookie(name, value, options) {
|
|
41
|
-
this.res.cookie(name, value, options || {});
|
|
42
|
-
return this;
|
|
43
|
-
}
|
|
44
|
-
clearCookie(name, options) {
|
|
45
|
-
// Filter out the deprecated 'expires' option to avoid Express deprecation warning
|
|
46
|
-
const { expires, ...filteredOptions } = options || {};
|
|
47
|
-
this.res.clearCookie(name, filteredOptions);
|
|
48
|
-
return this;
|
|
49
|
-
}
|
|
50
|
-
json(data) {
|
|
51
|
-
this.res.json(data);
|
|
52
|
-
}
|
|
53
|
-
text(data) {
|
|
54
|
-
this.res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
|
55
|
-
this.res.send(data);
|
|
56
|
-
}
|
|
57
|
-
send(data) {
|
|
58
|
-
this.res.send(data);
|
|
59
|
-
}
|
|
60
|
-
redirect(url) {
|
|
61
|
-
this.res.redirect(url);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { FrameworkAdapter } from '../types/framework';
|
|
2
|
-
/**
|
|
3
|
-
* Factory para criar o adapter correto baseado no framework detectado
|
|
4
|
-
*/
|
|
5
|
-
export declare class FrameworkAdapterFactory {
|
|
6
|
-
private static adapter;
|
|
7
|
-
/**
|
|
8
|
-
* Detecta automaticamente o framework baseado na requisição/resposta
|
|
9
|
-
*/
|
|
10
|
-
static detectFramework(req: any, res: any): FrameworkAdapter;
|
|
11
|
-
/**
|
|
12
|
-
* Força o uso de um framework específico
|
|
13
|
-
*/
|
|
14
|
-
static setFramework(framework: 'express' | 'fastify' | 'native'): void;
|
|
15
|
-
/**
|
|
16
|
-
* Reset do adapter (útil para testes)
|
|
17
|
-
*/
|
|
18
|
-
static reset(): void;
|
|
19
|
-
/**
|
|
20
|
-
* Retorna o adapter atual (se já foi detectado)
|
|
21
|
-
*/
|
|
22
|
-
static getCurrentAdapter(): FrameworkAdapter | null;
|
|
23
|
-
}
|
package/dist/adapters/factory.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
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.FrameworkAdapterFactory = void 0;
|
|
37
|
-
const express_1 = require("./express");
|
|
38
|
-
const fastify_1 = require("./fastify");
|
|
39
|
-
const native_1 = require("./native");
|
|
40
|
-
const console_1 = __importStar(require("../api/console"));
|
|
41
|
-
/**
|
|
42
|
-
* Factory para criar o adapter correto baseado no framework detectado
|
|
43
|
-
*/
|
|
44
|
-
class FrameworkAdapterFactory {
|
|
45
|
-
/**
|
|
46
|
-
* Detecta automaticamente o framework baseado na requisição/resposta
|
|
47
|
-
*/
|
|
48
|
-
static detectFramework(req, res) {
|
|
49
|
-
// Se já detectamos antes, retorna o mesmo adapter
|
|
50
|
-
if (this.adapter) {
|
|
51
|
-
return this.adapter;
|
|
52
|
-
}
|
|
53
|
-
const msg = console_1.default.dynamicLine(` ${console_1.Colors.FgYellow}● ${console_1.Colors.Reset}Detecting web framework...`);
|
|
54
|
-
// Detecta Express
|
|
55
|
-
if (req.app && req.route && res.locals !== undefined) {
|
|
56
|
-
msg.end(` ${console_1.Colors.FgGreen}● ${console_1.Colors.Reset}Framework detected: Express`);
|
|
57
|
-
this.adapter = new express_1.ExpressAdapter();
|
|
58
|
-
return this.adapter;
|
|
59
|
-
}
|
|
60
|
-
// Detecta Fastify
|
|
61
|
-
if (req.server && req.routerPath !== undefined && res.request) {
|
|
62
|
-
msg.end(` ${console_1.Colors.FgGreen}● ${console_1.Colors.Reset}Framework detected: Fastify`);
|
|
63
|
-
this.adapter = new fastify_1.FastifyAdapter();
|
|
64
|
-
return this.adapter;
|
|
65
|
-
}
|
|
66
|
-
// Detecta HTTP nativo do Node.js
|
|
67
|
-
if (req.method !== undefined && req.url !== undefined && req.headers !== undefined &&
|
|
68
|
-
res.statusCode !== undefined && res.setHeader !== undefined && res.end !== undefined) {
|
|
69
|
-
msg.end(` ${console_1.Colors.FgGreen}● ${console_1.Colors.Reset}Framework detected: HightJS Native (HTTP)`);
|
|
70
|
-
this.adapter = new native_1.NativeAdapter();
|
|
71
|
-
return this.adapter;
|
|
72
|
-
}
|
|
73
|
-
// Fallback mais específico para Express
|
|
74
|
-
if (res.status && res.send && res.json && res.cookie) {
|
|
75
|
-
msg.end(` ${console_1.Colors.FgGreen}● ${console_1.Colors.Reset}Framework detected: Express (fallback)`);
|
|
76
|
-
this.adapter = new express_1.ExpressAdapter();
|
|
77
|
-
return this.adapter;
|
|
78
|
-
}
|
|
79
|
-
// Fallback mais específico para Fastify
|
|
80
|
-
if (res.code && res.send && res.type && res.setCookie) {
|
|
81
|
-
msg.end(` ${console_1.Colors.FgGreen}● ${console_1.Colors.Reset}Framework detected: Fastify (fallback)`);
|
|
82
|
-
this.adapter = new fastify_1.FastifyAdapter();
|
|
83
|
-
return this.adapter;
|
|
84
|
-
}
|
|
85
|
-
// Default para HightJS Native se não conseguir detectar
|
|
86
|
-
msg.end(` ${console_1.Colors.FgYellow}● ${console_1.Colors.Reset}Unable to detect framework. Using HightJS Native as default.`);
|
|
87
|
-
this.adapter = new native_1.NativeAdapter();
|
|
88
|
-
return this.adapter;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Força o uso de um framework específico
|
|
92
|
-
*/
|
|
93
|
-
static setFramework(framework) {
|
|
94
|
-
switch (framework) {
|
|
95
|
-
case 'express':
|
|
96
|
-
this.adapter = new express_1.ExpressAdapter();
|
|
97
|
-
break;
|
|
98
|
-
case 'fastify':
|
|
99
|
-
this.adapter = new fastify_1.FastifyAdapter();
|
|
100
|
-
break;
|
|
101
|
-
case 'native':
|
|
102
|
-
this.adapter = new native_1.NativeAdapter();
|
|
103
|
-
break;
|
|
104
|
-
default:
|
|
105
|
-
throw new Error(`Unsupported framework: ${framework}`);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Reset do adapter (útil para testes)
|
|
110
|
-
*/
|
|
111
|
-
static reset() {
|
|
112
|
-
this.adapter = null;
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Retorna o adapter atual (se já foi detectado)
|
|
116
|
-
*/
|
|
117
|
-
static getCurrentAdapter() {
|
|
118
|
-
return this.adapter;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
exports.FrameworkAdapterFactory = FrameworkAdapterFactory;
|
|
122
|
-
FrameworkAdapterFactory.adapter = null;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
interface FastifyRequest {
|
|
2
|
-
method: string;
|
|
3
|
-
url: string;
|
|
4
|
-
headers: Record<string, string | string[]>;
|
|
5
|
-
body?: any;
|
|
6
|
-
query?: Record<string, any>;
|
|
7
|
-
params?: Record<string, string>;
|
|
8
|
-
cookies?: Record<string, string>;
|
|
9
|
-
}
|
|
10
|
-
interface FastifyReply {
|
|
11
|
-
status(code: number): FastifyReply;
|
|
12
|
-
header(name: string, value: string): FastifyReply;
|
|
13
|
-
setCookie(name: string, value: string, options?: any): FastifyReply;
|
|
14
|
-
clearCookie(name: string, options?: any): FastifyReply;
|
|
15
|
-
type(contentType: string): FastifyReply;
|
|
16
|
-
send(data: any): void;
|
|
17
|
-
redirect(url: string): void;
|
|
18
|
-
}
|
|
19
|
-
import { GenericRequest, GenericResponse, FrameworkAdapter } from '../types/framework';
|
|
20
|
-
export declare class FastifyAdapter implements FrameworkAdapter {
|
|
21
|
-
type: "fastify";
|
|
22
|
-
parseRequest(req: FastifyRequest): GenericRequest;
|
|
23
|
-
createResponse(reply: FastifyReply): GenericResponse;
|
|
24
|
-
}
|
|
25
|
-
export {};
|
package/dist/adapters/fastify.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FastifyAdapter = void 0;
|
|
4
|
-
class FastifyAdapter {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.type = 'fastify';
|
|
7
|
-
}
|
|
8
|
-
parseRequest(req) {
|
|
9
|
-
return {
|
|
10
|
-
method: req.method,
|
|
11
|
-
url: req.url,
|
|
12
|
-
headers: req.headers,
|
|
13
|
-
body: req.body,
|
|
14
|
-
query: req.query,
|
|
15
|
-
params: req.params,
|
|
16
|
-
cookies: req.cookies || {},
|
|
17
|
-
raw: req
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
createResponse(reply) {
|
|
21
|
-
return new FastifyResponseWrapper(reply);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.FastifyAdapter = FastifyAdapter;
|
|
25
|
-
class FastifyResponseWrapper {
|
|
26
|
-
constructor(reply) {
|
|
27
|
-
this.reply = reply;
|
|
28
|
-
}
|
|
29
|
-
get raw() {
|
|
30
|
-
return this.reply;
|
|
31
|
-
}
|
|
32
|
-
status(code) {
|
|
33
|
-
this.reply.status(code);
|
|
34
|
-
return this;
|
|
35
|
-
}
|
|
36
|
-
header(name, value) {
|
|
37
|
-
this.reply.header(name, value);
|
|
38
|
-
return this;
|
|
39
|
-
}
|
|
40
|
-
cookie(name, value, options) {
|
|
41
|
-
this.reply.setCookie(name, value, options);
|
|
42
|
-
return this;
|
|
43
|
-
}
|
|
44
|
-
clearCookie(name, options) {
|
|
45
|
-
this.reply.clearCookie(name, options);
|
|
46
|
-
return this;
|
|
47
|
-
}
|
|
48
|
-
json(data) {
|
|
49
|
-
this.reply.send(data);
|
|
50
|
-
}
|
|
51
|
-
text(data) {
|
|
52
|
-
this.reply.type('text/plain; charset=utf-8');
|
|
53
|
-
this.reply.send(data);
|
|
54
|
-
}
|
|
55
|
-
send(data) {
|
|
56
|
-
this.reply.send(data);
|
|
57
|
-
}
|
|
58
|
-
redirect(url) {
|
|
59
|
-
this.reply.redirect(url);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { IncomingMessage, ServerResponse } from 'http';
|
|
2
|
-
import { GenericRequest, GenericResponse, FrameworkAdapter } from '../types/framework';
|
|
3
|
-
export declare class NativeAdapter implements FrameworkAdapter {
|
|
4
|
-
type: "native";
|
|
5
|
-
parseRequest(req: IncomingMessage): GenericRequest;
|
|
6
|
-
createResponse(res: ServerResponse): GenericResponse;
|
|
7
|
-
private parseCookies;
|
|
8
|
-
}
|