sashiko 0.12.2 → 0.13.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.
Files changed (74) hide show
  1. package/dist/core/app/core.d.ts +23 -0
  2. package/dist/core/app/core.d.ts.map +1 -0
  3. package/dist/core/app/core.js +2 -0
  4. package/dist/core/app/core.js.map +1 -0
  5. package/dist/core/app/options.d.ts +109 -0
  6. package/dist/core/app/options.d.ts.map +1 -0
  7. package/dist/core/app/options.js +2 -0
  8. package/dist/core/app/options.js.map +1 -0
  9. package/dist/core/app.d.ts +20 -177
  10. package/dist/core/app.d.ts.map +1 -1
  11. package/dist/core/app.js +63 -510
  12. package/dist/core/app.js.map +1 -1
  13. package/dist/core/body-parser.d.ts +6 -3
  14. package/dist/core/body-parser.d.ts.map +1 -1
  15. package/dist/core/body-parser.js +8 -6
  16. package/dist/core/body-parser.js.map +1 -1
  17. package/dist/core/compose.d.ts +7 -0
  18. package/dist/core/compose.d.ts.map +1 -1
  19. package/dist/core/compose.js +25 -0
  20. package/dist/core/compose.js.map +1 -1
  21. package/dist/core/context.d.ts +31 -45
  22. package/dist/core/context.d.ts.map +1 -1
  23. package/dist/core/context.js +99 -159
  24. package/dist/core/context.js.map +1 -1
  25. package/dist/core/health.js +1 -1
  26. package/dist/core/index.d.ts +1 -1
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/logger.d.ts.map +1 -1
  29. package/dist/core/logger.js +41 -14
  30. package/dist/core/logger.js.map +1 -1
  31. package/dist/core/registry/framework-routes.d.ts +28 -0
  32. package/dist/core/registry/framework-routes.d.ts.map +1 -0
  33. package/dist/core/registry/framework-routes.js +83 -0
  34. package/dist/core/registry/framework-routes.js.map +1 -0
  35. package/dist/core/registry/registry.d.ts +53 -0
  36. package/dist/core/registry/registry.d.ts.map +1 -0
  37. package/dist/core/registry/registry.js +156 -0
  38. package/dist/core/registry/registry.js.map +1 -0
  39. package/dist/core/registry/route-program.d.ts +14 -0
  40. package/dist/core/registry/route-program.d.ts.map +1 -0
  41. package/dist/core/registry/route-program.js +29 -0
  42. package/dist/core/registry/route-program.js.map +1 -0
  43. package/dist/core/response/pipeline.d.ts +51 -0
  44. package/dist/core/response/pipeline.d.ts.map +1 -0
  45. package/dist/core/response/pipeline.js +171 -0
  46. package/dist/core/response/pipeline.js.map +1 -0
  47. package/dist/core/route-table.d.ts +5 -1
  48. package/dist/core/route-table.d.ts.map +1 -1
  49. package/dist/core/route-table.js +1 -1
  50. package/dist/core/route-table.js.map +1 -1
  51. package/dist/core/runtime/request-handler.d.ts +42 -0
  52. package/dist/core/runtime/request-handler.d.ts.map +1 -0
  53. package/dist/core/runtime/request-handler.js +187 -0
  54. package/dist/core/runtime/request-handler.js.map +1 -0
  55. package/dist/core/runtime/server.d.ts +41 -0
  56. package/dist/core/runtime/server.d.ts.map +1 -0
  57. package/dist/core/runtime/server.js +155 -0
  58. package/dist/core/runtime/server.js.map +1 -0
  59. package/dist/core/streaming/sse.d.ts +35 -0
  60. package/dist/core/streaming/sse.d.ts.map +1 -0
  61. package/dist/core/streaming/sse.js +121 -0
  62. package/dist/core/streaming/sse.js.map +1 -0
  63. package/dist/core/symbols.d.ts +14 -0
  64. package/dist/core/symbols.d.ts.map +1 -0
  65. package/dist/core/symbols.js +14 -0
  66. package/dist/core/symbols.js.map +1 -0
  67. package/dist/server/static.d.ts +1 -1
  68. package/dist/server/static.d.ts.map +1 -1
  69. package/dist/server/static.js +1 -1
  70. package/dist/server/static.js.map +1 -1
  71. package/dist/utils/content-type.d.ts.map +1 -1
  72. package/dist/utils/content-type.js +26 -6
  73. package/dist/utils/content-type.js.map +1 -1
  74. package/package.json +1 -1
@@ -5,50 +5,15 @@ import { parseQuery } from '../utils/query.js';
5
5
  import { parseCookies, serializeCookie } from '../utils/cookie.js';
6
6
  import { hostnameOf, isValidHost, parseRequestTarget, pickForwarded } from '../utils/request-target.js';
7
7
  import { silentLogger } from './logger.js';
8
- import { sendResult } from './response.js';
8
+ import { sendResult } from './response/pipeline.js';
9
+ import { kAbort, kBindResponse, kPendingSend, kRawSend } from './symbols.js';
9
10
  import { sendFile } from '../server/static.js';
10
- /** @internal Envio cru, sem pipeline: usado pelo próprio pipeline, por erros e por 404/405. */
11
- export const kRawSend = Symbol('sashiko.rawSend');
12
- /** @internal Cancela o `ctx.signal` (encerramento do app) (F-13). */
13
- export const kAbort = Symbol('sashiko.abort');
14
- /** @internal Envio de arquivo em andamento, que o app aguarda mesmo sem `await` no handler (F-13). */
15
- export const kPendingSend = Symbol('sashiko.pendingSend');
16
- /** @internal Liga o contexto aos schemas de resposta da rota, antes do handler (F-32). */
17
- export const kBindResponse = Symbol('sashiko.bindResponse');
18
- /**
19
- * Campos de uma linha SSE não podem ter quebra de linha (seria injeção de evento); `id` também não pode
20
- * ter U+0000, que faz o navegador ignorar o campo.
21
- */
22
- const sseField = (name, value) => {
23
- if (/[\r\n]/.test(value))
24
- throw new Error(`[sashiko] ctx.sse(): "${name}" cannot contain line breaks.`);
25
- if (name === 'id' && value.includes('\0'))
26
- throw new Error('[sashiko] ctx.sse(): "id" cannot contain U+0000.');
27
- return `${name}: ${value}\n`;
28
- };
29
- /** Maior intervalo dos timers do Node; acima disso, ele usa 1 ms (heartbeat contínuo). */
30
- const MAX_TIMER_MS = 2_147_483_647;
31
- /** `retry` e `heartbeatMs`: inteiro não negativo, como o protocolo exige, e dentro do limite dos timers. */
32
- const nonNegativeInt = (name, value) => {
33
- if (!Number.isInteger(value) || value < 0 || value > MAX_TIMER_MS) {
34
- throw new Error(`[sashiko] ctx.sse(): "${name}" must be an integer between 0 and ${MAX_TIMER_MS} (got ${value}).`);
35
- }
36
- return value;
37
- };
38
- /** `data` do evento: strings como estão; o resto em JSON. Valor que não vira JSON gera erro claro, sem escrever nada. */
39
- function sseData(data) {
40
- if (typeof data === 'string')
41
- return data;
42
- let text;
43
- try {
44
- text = JSON.stringify(data);
45
- }
46
- catch (err) {
47
- throw new Error(`[sashiko] ctx.sse(): "data" is not JSON-serializable (${err.message}).`, { cause: err });
48
- }
49
- if (text === undefined)
50
- throw new Error(`[sashiko] ctx.sse(): "data" of type ${typeof data} is not JSON-serializable.`);
51
- return text;
11
+ import { openSse } from './streaming/sse.js';
12
+ export { kAbort, kBindResponse, kPendingSend, kRawSend } from './symbols.js';
13
+ /** Erros de stream que só significam que o cliente foi embora (P-12). */
14
+ const CLIENT_GONE = new Set(['ECONNRESET', 'EPIPE', 'ERR_STREAM_PREMATURE_CLOSE', 'ERR_STREAM_UNABLE_TO_PIPE', 'ERR_STREAM_DESTROYED']);
15
+ function isClientDisconnect(err) {
16
+ return typeof err === 'object' && err !== null && CLIENT_GONE.has(err.code ?? '');
52
17
  }
53
18
  /**
54
19
  * Contexto da requisição. Passe os schemas da rota no genérico para tipar
@@ -65,15 +30,39 @@ export class Context {
65
30
  res;
66
31
  method;
67
32
  path;
68
- url;
69
33
  /** Id da requisição, também enviado no header `X-Request-Id` (F-06). */
70
34
  id;
71
- /** Logger da requisição, já com `reqId` (F-06). */
72
- log;
73
35
  /** Parâmetros de rota; tipados pelo schema `params` quando informado em `Context<S>`. */
74
36
  params = {};
75
- /** Query string; tipada pelo schema `query` (já com coerção e defaults aplicados). */
76
- query;
37
+ /** Query string; tipada pelo schema `query` (já com coerção e defaults aplicados). Lida no primeiro acesso. */
38
+ get query() {
39
+ this.parsedQuery ??= parseQuery(this.target.searchParams, this.queryMaxKeys);
40
+ return this.parsedQuery;
41
+ }
42
+ set query(value) {
43
+ this.parsedQuery = value;
44
+ }
45
+ /** URL completa da requisição, com o host validado (S-09). Criada no primeiro acesso. */
46
+ get url() {
47
+ this.fullUrl ??= new URL(`${this.protocol}://${this.host || 'localhost'}${this.target.pathname}${this.target.search}`);
48
+ return this.fullUrl;
49
+ }
50
+ /** Logger da requisição, já com `reqId` (F-06). Criado no primeiro acesso. */
51
+ get log() {
52
+ this.requestLog ??= this.baseLogger.child({ reqId: this.id });
53
+ return this.requestLog;
54
+ }
55
+ // Campos preguiçosos (F-39, fase 2): calculados no primeiro acesso e guardados. Dependem só da
56
+ // requisição e da configuração do app, que não mudam durante a requisição.
57
+ target;
58
+ queryMaxKeys;
59
+ baseLogger;
60
+ parsedQuery;
61
+ fullUrl;
62
+ requestLog;
63
+ memoHost;
64
+ memoHostname;
65
+ memoProtocol;
77
66
  /** Body; tipado pelo schema `body`. */
78
67
  body = undefined;
79
68
  state = {};
@@ -126,88 +115,9 @@ export class Context {
126
115
  * ```
127
116
  */
128
117
  sse(opts = {}) {
129
- if (this.sent)
130
- throw new Error('[sashiko] ctx.sse(): the response was already sent.');
131
- // Valida antes de abrir a resposta: um erro aqui ainda vira um 500 normal.
132
- const heartbeatMs = nonNegativeInt('heartbeatMs', opts.heartbeatMs ?? 15_000);
133
- if (opts.retry !== undefined)
134
- nonNegativeInt('retry', opts.retry);
135
- const res = this.res;
136
- this.streaming = true;
137
- res.statusCode = 200;
138
- res.setHeader('Content-Type', 'text/event-stream; charset=utf-8');
139
- res.setHeader('Cache-Control', 'no-cache, no-transform');
140
- res.setHeader('X-Accel-Buffering', 'no');
141
- res.removeHeader('Content-Length');
142
- res.flushHeaders();
143
- const listeners = [];
144
- let closed = false;
145
- const finish = () => {
146
- if (closed)
147
- return;
148
- closed = true;
149
- clearInterval(heartbeat);
150
- for (const l of listeners.splice(0)) {
151
- try {
152
- l();
153
- }
154
- catch (err) {
155
- this.log.error({ err }, 'sse onClose listener failed');
156
- }
157
- }
158
- };
159
- const write = (chunk) => {
160
- if (!closed && !res.writableEnded)
161
- res.write(chunk);
162
- };
163
- const heartbeat = setInterval(() => write(': ping\n\n'), heartbeatMs || 2 ** 31 - 1);
164
- heartbeat.unref();
165
- if (!heartbeatMs)
166
- clearInterval(heartbeat);
167
- res.once('close', finish);
168
- const signal = this.signal;
169
- signal.addEventListener('abort', () => stream.close(), { once: true });
170
- if (opts.retry !== undefined)
171
- write(`retry: ${opts.retry}\n\n`);
172
- const stream = {
173
- send: (event) => {
174
- const e = typeof event === 'string' ? { data: event } : event;
175
- let out = '';
176
- if (e.event !== undefined)
177
- out += sseField('event', e.event);
178
- if (e.id !== undefined)
179
- out += sseField('id', e.id);
180
- if (e.retry !== undefined)
181
- out += `retry: ${nonNegativeInt('retry', e.retry)}\n`;
182
- if (e.data === undefined)
183
- throw new Error('[sashiko] ctx.sse(): "data" is required; use "" for an empty event.');
184
- const text = sseData(e.data);
185
- for (const line of text.split(/\r\n|\r|\n/))
186
- out += `data: ${line}\n`;
187
- write(`${out}\n`);
188
- },
189
- comment: (text) => write(`: ${text.replace(/[\r\n]+/g, ' ')}\n\n`),
190
- close: () => {
191
- if (!res.writableEnded)
192
- res.end();
193
- finish();
194
- },
195
- onClose: (listener) => {
196
- if (closed)
197
- listener();
198
- else
199
- listeners.push(listener);
200
- },
201
- get closed() {
202
- return closed;
203
- },
204
- lastEventId: this.get('last-event-id'),
205
- };
206
- // O cliente pode ter desconectado antes do `ctx.sse()` (num `await` anterior): o 'close' e o 'abort' já
207
- // passaram, e os listeners acima nunca rodariam. Encerra já, limpando o heartbeat e chamando `onClose`.
208
- if (signal.aborted)
209
- stream.close();
210
- return stream;
118
+ return openSse(this, opts, () => {
119
+ this.streaming = true;
120
+ });
211
121
  }
212
122
  /**
213
123
  * Envia um arquivo com `Content-Type`, `ETag`/`Last-Modified` (304) e `Range` (206), em stream (F-13).
@@ -228,23 +138,38 @@ export class Context {
228
138
  * Corpo exatamente como foi escrito (F-04), depois do envio. Fica `undefined` em streams e em
229
139
  * respostas sem corpo. Útil para cache: `await next(); store.set(key, ctx.sentBody)`.
230
140
  */
231
- sentBody;
141
+ get sentBody() {
142
+ // Convertido só se alguém ler (F-39): antes, toda resposta copiava o corpo para um Buffer.
143
+ if (this.sentBuffer === undefined && this.sentRaw !== undefined) {
144
+ this.sentBuffer = typeof this.sentRaw === 'string' ? Buffer.from(this.sentRaw) : Buffer.from(this.sentRaw);
145
+ }
146
+ return this.sentBuffer;
147
+ }
148
+ set sentBody(value) {
149
+ this.sentBuffer = value;
150
+ this.sentRaw = undefined;
151
+ }
152
+ sentRaw;
153
+ sentBuffer;
232
154
  /** `Content-Type` da resposta enviada, junto com `sentBody`. */
233
155
  sentType;
234
156
  bound;
235
- constructor(req, res, opts = {}) {
157
+ /**
158
+ * @param opts configuração; o app passa **o mesmo objeto** para todas as requisições (Flyweight), e o
159
+ * que muda por requisição (`id`) vem à parte.
160
+ */
161
+ constructor(req, res, opts = {}, id) {
236
162
  this.req = req;
237
163
  this.res = res;
238
164
  this.method = req.method ?? 'GET';
239
165
  this.trustProxy = opts.trustProxy ?? false;
240
166
  this.onSendHooks = opts.onSend ?? [];
167
+ this.queryMaxKeys = opts.queryMaxKeys;
168
+ this.baseLogger = opts.logger ?? silentLogger;
241
169
  // S-09: o path vem do request-target com base fixa; o host do cliente nunca entra no parsing.
242
- const target = parseRequestTarget(req.url);
243
- this.path = target.pathname;
244
- this.query = parseQuery(target.searchParams, opts.queryMaxKeys);
245
- this.url = new URL(`${this.protocol}://${this.host || 'localhost'}${target.pathname}${target.search}`);
246
- this.id = opts.id ?? '';
247
- this.log = (opts.logger ?? silentLogger).child({ reqId: this.id });
170
+ this.target = parseRequestTarget(req.url);
171
+ this.path = this.target.pathname;
172
+ this.id = id ?? opts.id ?? '';
248
173
  }
249
174
  trustProxy;
250
175
  /**
@@ -260,22 +185,30 @@ export class Context {
260
185
  * configurada em vez do host pedido pelo cliente (S-09).
261
186
  */
262
187
  get host() {
263
- const forwarded = pickForwarded(this.req.headers['x-forwarded-host'], this.trustProxy);
264
- if (forwarded !== undefined)
265
- return isValidHost(forwarded) ? forwarded : '';
266
- const host = this.req.headers.host;
267
- return isValidHost(host) ? host : '';
188
+ if (this.memoHost === undefined) {
189
+ const forwarded = pickForwarded(this.req.headers['x-forwarded-host'], this.trustProxy);
190
+ const raw = forwarded !== undefined ? forwarded : this.req.headers.host;
191
+ this.memoHost = isValidHost(raw) ? raw : '';
192
+ }
193
+ return this.memoHost;
268
194
  }
269
195
  /** `host` sem a porta. */
270
196
  get hostname() {
271
- return this.host ? hostnameOf(this.host) : '';
197
+ this.memoHostname ??= this.host ? hostnameOf(this.host) : '';
198
+ return this.memoHostname;
272
199
  }
273
200
  /** `https` se a conexão for TLS ou, com `trustProxy`, se o `X-Forwarded-Proto` disser; senão `http`. */
274
201
  get protocol() {
275
- const forwarded = pickForwarded(this.req.headers['x-forwarded-proto'], this.trustProxy)?.toLowerCase();
276
- if (forwarded === 'https' || forwarded === 'http')
277
- return forwarded;
278
- return this.req.socket.encrypted ? 'https' : 'http';
202
+ if (this.memoProtocol === undefined) {
203
+ const forwarded = pickForwarded(this.req.headers['x-forwarded-proto'], this.trustProxy)?.toLowerCase();
204
+ this.memoProtocol =
205
+ forwarded === 'https' || forwarded === 'http'
206
+ ? forwarded
207
+ : this.req.socket.encrypted
208
+ ? 'https'
209
+ : 'http';
210
+ }
211
+ return this.memoProtocol;
279
212
  }
280
213
  /**
281
214
  * Define o status. Com schemas de resposta, aceita só os status declarados e o encadeamento tipa o
@@ -347,34 +280,41 @@ export class Context {
347
280
  if (this.sent)
348
281
  return this;
349
282
  // Antes do handler (middlewares, guards) não há schema ligado: vale só o tipo do conteúdo.
350
- sendResult(this, this.bound?.response, body, this.bound?.serializers, mode);
283
+ const plan = this.bound;
284
+ if (plan)
285
+ sendResult(this, plan.response, body, plan.serializers, mode, plan.defaultStatus);
286
+ else
287
+ sendResult(this, undefined, body, undefined, mode);
351
288
  return this;
352
289
  }
353
290
  /** @internal Liga os schemas de resposta da rota (o app chama antes do handler). */
354
- [kBindResponse](response, serializers) {
355
- this.bound = { response, serializers };
291
+ [kBindResponse](plan) {
292
+ this.bound = plan;
356
293
  }
357
294
  /** @internal Envio cru, sem schema: string, bytes ou stream. */
358
295
  [kRawSend](body, contentType) {
359
296
  if (this.sent)
360
297
  return this;
361
- if (contentType)
362
- this.res.setHeader('Content-Type', contentType);
363
- else if (!this.res.hasHeader('Content-Type'))
364
- this.res.setHeader('Content-Type', 'application/octet-stream');
298
+ const type = contentType ?? this.res.getHeader('Content-Type') ?? 'application/octet-stream';
365
299
  if (body instanceof Readable) {
300
+ this.res.setHeader('Content-Type', type);
366
301
  this.streaming = true;
367
302
  pipeline(body, this.res).catch((err) => {
368
- this.log.error({ err, method: this.method, path: this.path }, 'stream failed');
303
+ // P-12: o cliente desistir (fechar a conexão) é normal e não é erro do servidor.
304
+ // Pelo código do erro: o pipeline já destruiu a resposta aqui, então `res.destroyed` não distingue.
305
+ const clientGone = isClientDisconnect(err);
306
+ this.log[clientGone ? 'debug' : 'error']({ err, method: this.method, path: this.path }, clientGone ? 'client disconnected during stream' : 'stream failed');
369
307
  this.res.destroy(err);
370
308
  });
371
309
  return this;
372
310
  }
373
- const payload = this.runOnSend({ body, contentType: String(this.res.getHeader('Content-Type')) });
311
+ // Content-Type escrito uma vez só, depois do onSend (antes: duas vezes por resposta).
312
+ const payload = this.onSendHooks.length > 0 ? this.runOnSend({ body, contentType: type }) : { body, contentType: type };
374
313
  this.res.setHeader('Content-Type', payload.contentType);
375
- this.sentBody = Buffer.from(payload.body);
314
+ this.sentRaw = payload.body;
315
+ this.sentBuffer = undefined;
376
316
  this.sentType = payload.contentType;
377
- this.res.end(this.sentBody);
317
+ this.res.end(payload.body);
378
318
  return this;
379
319
  }
380
320
  /** Aplica os `onSend`; se algum lançar, loga e envia o payload original (F-04). */
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { compose } from './compose.js';
2
- import { kRawSend } from './context.js';
2
+ import { kRawSend } from './symbols.js';
3
3
  import { guardsMiddleware } from './guard.js';
4
4
  import { canonicalPath } from '../utils/path.js';
5
5
  function withTimeout(check, ms) {
@@ -8,7 +8,7 @@ export type { Guard } from './guard.ts';
8
8
  export type { CheckParams, InferBody, InferHeaders, InferParams, InferQuery, InferResponse, InferSchema, ParamsOf, PathParams, } from './infer.ts';
9
9
  export type { ShutdownOptions } from './shutdown.ts';
10
10
  export type { HealthCheck, HealthOptions } from './health.ts';
11
- export type { Serializer } from './response.ts';
11
+ export type { Serializer } from './response/pipeline.ts';
12
12
  export type { CookieOptions } from '../utils/cookie.ts';
13
13
  export type { TlsCertificate, TlsOptions } from '../server/tls.ts';
14
14
  export type { FileOptions, SendFileOptions, StaticOptions } from '../server/static.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AAErC,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5I,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACX,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EACP,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,6BAA6B,CAAC;AAErC,OAAO,EACL,SAAS,EACT,UAAU,EACV,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACjE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC5I,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,KAAK,oBAAoB,EACzB,KAAK,MAAM,EACX,KAAK,QAAQ,GACd,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,OAAO,EACP,KAAK,OAAO,EACZ,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,aAAa,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAItE,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC5B;AAoBD,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAehD,CAAC;AAKF,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,kBAAwB,EAAE,KAAK,SAAI,GAAG,OAAO,CAWvH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,oBAAyB,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAqB7G;AAED,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,MAM1B,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;CAClD;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAItE,MAAM,WAAW,oBAAoB;IACnC,sBAAsB;IACtB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC5B;AAoBD,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAehD,CAAC;AAKF,oGAAoG;AACpG,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,kBAAwB,EAAE,KAAK,SAAI,GAAG,OAAO,CAWvH;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,GAAE,oBAAyB,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,MAAM,CAE7G;AAyDD,iEAAiE;AACjE,eAAO,MAAM,YAAY,EAAE,MAM1B,CAAC"}
@@ -61,28 +61,55 @@ export function redactValue(value, keys, seen = new WeakSet(), depth = 0) {
61
61
  * `cookie`, `password`, `token` e afins saem como `[REDACTED]` (S-11).
62
62
  */
63
63
  export function consoleLogger(opts = {}, bindings = {}) {
64
- const min = LEVELS[opts.level ?? 'info'];
65
- const keys = opts.redact === false ? undefined : new Set([...DEFAULT_REDACT_KEYS, ...(opts.redact ?? [])].map(normalizeKey));
66
- const emit = (level) => (objOrMsg, msg) => {
67
- if (LEVELS[level] < min)
64
+ return new ConsoleLogger(compileConsoleConfig(opts), bindings);
65
+ }
66
+ function compileConsoleConfig(opts) {
67
+ return {
68
+ min: LEVELS[opts.level ?? 'info'],
69
+ keys: opts.redact === false ? undefined : new Set([...DEFAULT_REDACT_KEYS, ...(opts.redact ?? [])].map(normalizeKey)),
70
+ json: opts.format === 'json',
71
+ };
72
+ }
73
+ /**
74
+ * Um `child()` por requisição custa só este objeto com as bindings: os métodos ficam no protótipo e a
75
+ * configuração (nível, `Set` do redact, formato) é a mesma do logger pai.
76
+ */
77
+ class ConsoleLogger {
78
+ cfg;
79
+ bindings;
80
+ constructor(cfg, bindings) {
81
+ this.cfg = cfg;
82
+ this.bindings = bindings;
83
+ }
84
+ debug(objOrMsg, msg) {
85
+ this.emit('debug', objOrMsg, msg);
86
+ }
87
+ info(objOrMsg, msg) {
88
+ this.emit('info', objOrMsg, msg);
89
+ }
90
+ warn(objOrMsg, msg) {
91
+ this.emit('warn', objOrMsg, msg);
92
+ }
93
+ error(objOrMsg, msg) {
94
+ this.emit('error', objOrMsg, msg);
95
+ }
96
+ child(extra) {
97
+ return new ConsoleLogger(this.cfg, { ...this.bindings, ...extra });
98
+ }
99
+ emit(level, objOrMsg, msg) {
100
+ if (LEVELS[level] < this.cfg.min)
68
101
  return;
69
102
  const [data, text] = typeof objOrMsg === 'string' ? [{}, objOrMsg] : [objOrMsg, msg ?? ''];
70
- const merged = { ...bindings, ...data };
103
+ const merged = { ...this.bindings, ...data };
104
+ const keys = this.cfg.keys;
71
105
  const safe = (keys ? redactValue(merged, keys) : merged);
72
- if (opts.format === 'json') {
106
+ if (this.cfg.json) {
73
107
  console[level](toJsonLine({ level, time: new Date().toISOString(), msg: text, ...safe }));
74
108
  }
75
109
  else {
76
110
  console[level](`[sashiko] ${text}`, safe);
77
111
  }
78
- };
79
- return {
80
- debug: emit('debug'),
81
- info: emit('info'),
82
- warn: emit('warn'),
83
- error: emit('error'),
84
- child: (extra) => consoleLogger(opts, { ...bindings, ...extra }),
85
- };
112
+ }
86
113
  }
87
114
  /** Logger que descarta tudo (`createApp({ logger: false })`). */
88
115
  export const silentLogger = {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAkBA,MAAM,MAAM,GAA6B,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAkBlG,0GAA0G;AAC1G,SAAS,UAAU,CAAC,MAA+B;IACjD,MAAM,IAAI,GAAG,IAAI,OAAO,EAAU,CAAC;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,KAAc,EAAE,EAAE;QACrD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,GAAG,GAA4B,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YACtG,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACvD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO,YAAY,CAAC;YACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,eAAe;IACf,qBAAqB;IACrB,QAAQ;IACR,YAAY;IACZ,WAAW;IACX,SAAS;IACT,UAAU;IACV,QAAQ;IACR,QAAQ;IACR,eAAe;IACf,OAAO;IACP,cAAc;IACd,eAAe;IACf,UAAU;CACX,CAAC;AAEF,MAAM,QAAQ,GAAG,YAAY,CAAC;AAC9B,MAAM,YAAY,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AAElF,oGAAoG;AACpG,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,IAAyB,EAAE,IAAI,GAAG,IAAI,OAAO,EAAU,EAAE,KAAK,GAAG,CAAC;IAC5G,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5E,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,YAAY,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACzF,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAI,GAAyB,EAAE,EAAE,QAAQ,GAA4B,EAAE;IACnG,OAAO,IAAI,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjE,CAAC;AASD,SAAS,oBAAoB,CAAC,IAA0B;IACtD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,mBAAmB,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACrH,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,aAAa;IAEE,GAAG;IACH,QAAQ;IAF3B,YACmB,GAAkB,EAClB,QAAiC;mBADjC,GAAG;wBACH,QAAQ;IACxB,CAAC;IAEJ,KAAK,CAAC,QAAyB,EAAE,GAAY;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,CAAC,QAAyB,EAAE,GAAY;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAAC,QAAyB,EAAE,GAAY;QAC1C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,KAAK,CAAC,QAAyB,EAAE,GAAY;QAC3C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,KAAK,CAAC,KAA8B;QAClC,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IAEO,IAAI,CAAC,KAAkC,EAAE,QAAyB,EAAE,GAAY;QACtF,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG;YAAE,OAAO;QACzC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAA4B,CAAC;QACpF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,KAAK,KAAI,CAAC;IACV,IAAI,KAAI,CAAC;IACT,IAAI,KAAI,CAAC;IACT,KAAK,KAAI,CAAC;IACV,KAAK,EAAE,GAAG,EAAE,CAAC,YAAY;CAC1B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { AppCore } from '../app/core.ts';
2
+ import { type Middleware } from '../compose.ts';
3
+ import type { Context } from '../context.ts';
4
+ import type { HealthConfig } from '../health.ts';
5
+ import { type OpenAPIOptions } from '../../openapi/generate.ts';
6
+ import type { RouteRegistry } from './registry.ts';
7
+ export type OpenAPIConfig = {
8
+ opts: OpenAPIOptions;
9
+ path: string;
10
+ docs: string | false;
11
+ pipeline: Middleware[];
12
+ cache: Map<string, string>;
13
+ };
14
+ /** Rotas servidas pelo próprio app: healthchecks e OpenAPI (documento e página). */
15
+ export declare class FrameworkRoutes {
16
+ private readonly core;
17
+ private readonly registry;
18
+ health: HealthConfig | undefined;
19
+ openapi: OpenAPIConfig | undefined;
20
+ constructor(core: AppCore, registry: RouteRegistry);
21
+ /** Paths servidos pelo próprio app (`health()`, `openapi()`), que encobririam uma rota GET do usuário. */
22
+ reservedPaths(except?: 'health' | 'openapi'): Map<string, string>;
23
+ /** Um path do framework não pode coincidir com uma rota GET/HEAD registrada nem com outro do framework. */
24
+ assertFreePaths(where: string, paths: readonly string[], kind: 'health' | 'openapi'): void;
25
+ /** Se a requisição é para `/openapi.json` ou `/docs` (quando ligados), responde e devolve `true`. */
26
+ serveOpenAPI(ctx: Context): Promise<boolean>;
27
+ }
28
+ //# sourceMappingURL=framework-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"framework-routes.d.ts","sourceRoot":"","sources":["../../../src/core/registry/framework-routes.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5B,CAAC;AAEF,oFAAoF;AACpF,qBAAa,eAAe;IAKxB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,MAAM,EAAE,YAAY,GAAG,SAAS,CAAC;IACjC,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IAEnC,YACmB,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,aAAa,EACtC;IAEJ,0GAA0G;IAC1G,aAAa,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAShE;IAED,2GAA2G;IAC3G,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CAiBzF;IAED,qGAAqG;IAC/F,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BjD;CACF"}
@@ -0,0 +1,83 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { compose } from '../compose.js';
3
+ import { kRawSend } from '../symbols.js';
4
+ import { docsPage, generateOpenAPI } from '../../openapi/generate.js';
5
+ import { canonicalPath } from '../../utils/path.js';
6
+ /** Rotas servidas pelo próprio app: healthchecks e OpenAPI (documento e página). */
7
+ export class FrameworkRoutes {
8
+ core;
9
+ registry;
10
+ health;
11
+ openapi;
12
+ constructor(core, registry) {
13
+ this.core = core;
14
+ this.registry = registry;
15
+ }
16
+ /** Paths servidos pelo próprio app (`health()`, `openapi()`), que encobririam uma rota GET do usuário. */
17
+ reservedPaths(except) {
18
+ const out = new Map();
19
+ if (except !== 'health')
20
+ for (const p of this.health?.paths ?? [])
21
+ out.set(p, 'app.health()');
22
+ const cfg = this.openapi;
23
+ if (cfg && except !== 'openapi') {
24
+ out.set(canonicalPath(cfg.path), 'app.openapi()');
25
+ if (cfg.docs)
26
+ out.set(canonicalPath(cfg.docs), 'app.openapi({ docs })');
27
+ }
28
+ return out;
29
+ }
30
+ /** Um path do framework não pode coincidir com uma rota GET/HEAD registrada nem com outro do framework. */
31
+ assertFreePaths(where, paths, kind) {
32
+ // `health()`/`openapi()` configuram o app, não o grupo: dentro de um `group()` em andamento, a
33
+ // configuração sobreviveria a um grupo desfeito e não enxergaria as rotas ainda pendentes.
34
+ if (this.registry.pending !== undefined) {
35
+ throw new Error(`[sashiko] ${where}: cannot be called inside an app.group() callback; call it on the app, outside the group.`);
36
+ }
37
+ const reserved = this.reservedPaths(kind);
38
+ for (const path of paths) {
39
+ const other = reserved.get(path);
40
+ if (other)
41
+ throw new Error(`[sashiko] ${where}: path "${path}" is already used by ${other}.`);
42
+ const route = this.registry.routes.find((r) => (r.method === 'GET' || r.method === 'HEAD') && canonicalPath(r.path) === path);
43
+ if (route) {
44
+ throw new Error(`[sashiko] ${where}: path "${path}" would shadow ${route.owner}.${route.handlerName} (GET ${route.path}); choose another path.`);
45
+ }
46
+ }
47
+ }
48
+ /** Se a requisição é para `/openapi.json` ou `/docs` (quando ligados), responde e devolve `true`. */
49
+ async serveOpenAPI(ctx) {
50
+ const cfg = this.openapi;
51
+ if (!cfg || (ctx.method !== 'GET' && ctx.method !== 'HEAD'))
52
+ return false;
53
+ const path = canonicalPath(ctx.path);
54
+ const isSpec = path === canonicalPath(cfg.path);
55
+ if (!isSpec && !(cfg.docs && path === canonicalPath(cfg.docs)))
56
+ return false;
57
+ await compose(ctx, [
58
+ ...cfg.pipeline,
59
+ () => {
60
+ if (isSpec) {
61
+ // Um documento por conjunto de rotas visíveis no host da requisição (F-35); a chave não usa o
62
+ // hostname em si, então hosts arbitrários não fazem o cache crescer.
63
+ const visible = this.registry.routesFor(ctx.hostname.toLowerCase());
64
+ const key = visible.map((r) => this.registry.routes.indexOf(r)).join(',');
65
+ let doc = cfg.cache.get(key);
66
+ if (doc === undefined) {
67
+ doc = JSON.stringify(generateOpenAPI(visible, cfg.opts, !this.core.opts.formatError));
68
+ cfg.cache.set(key, doc);
69
+ }
70
+ ctx[kRawSend](doc, 'application/json; charset=utf-8');
71
+ return;
72
+ }
73
+ const nonce = randomBytes(16).toString('base64');
74
+ const { html, csp } = docsPage(cfg.path, cfg.opts.info?.title ?? 'API', nonce);
75
+ ctx.res.setHeader('Content-Security-Policy', csp);
76
+ ctx.res.setHeader('Cache-Control', 'no-store');
77
+ ctx[kRawSend](html, 'text/html; charset=utf-8');
78
+ },
79
+ ]);
80
+ return true;
81
+ }
82
+ }
83
+ //# sourceMappingURL=framework-routes.js.map