@boon4681/giri 0.0.2-alpha-2 → 0.0.2-alpha-4

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/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { M as Middleware, C as Context, H as HandlerResponse, V as ValidatedInput, S as Services, c as StatusCode, R as ResponseFormat, T as TypedResponse, d as MiddlewareOptions, B as BodyContentType, a as GiriBodySchema, b as GiriInputSchema, i as inputSchemaBrand, e as RouteInput, f as HttpMethod, g as GiriConfig, h as GiriPaths, j as SecurityRequirement } from './types-C4J1_iLZ.js';
2
- export { G as GiriAdapter, k as GiriFetchHandler, l as GiriRequest, m as GiriRouteRegistration, n as GiriServeOptions, o as GiriServer, p as GiriServerInfo, q as Handle, I as Infer, r as InferStackVars, s as InputValidationResult, J as JsonSchema, t as MergeStack, u as MiddlewareOpenApi, v as MiddlewareVarsOf, N as Next, w as RouteInputOf, x as RouteOpenApi, y as RouteOpenApiConfig, z as ValidBody, A as ValidQuery, D as VarsOf } from './types-C4J1_iLZ.js';
1
+ import { M as Middleware, C as Context, H as HandlerResponse, V as ValidatedInput, S as Services, c as CookieJarFactory, d as StatusCode, R as ResponseFormat, T as TypedResponse, e as MiddlewareOptions, B as BodyContentType, a as GiriBodySchema, b as GiriInputSchema, i as inputSchemaBrand, f as RouteInput, g as HttpMethod, h as GiriConfig, j as GiriPaths, k as SecurityRequirement } from './types-NVvedshc.js';
2
+ export { l as CookieJar, m as CookieOptions, n as CookieSink, G as GiriAdapter, o as GiriFetchHandler, p as GiriRequest, q as GiriRouteRegistration, r as GiriServeOptions, s as GiriServer, t as GiriServerInfo, u as Handle, I as Infer, v as InferStackVars, w as InputValidationResult, J as JsonSchema, x as MergeStack, y as MiddlewareOpenApi, z as MiddlewareVarsOf, N as Next, A as RouteInputOf, D as RouteOpenApi, E as RouteOpenApiConfig, F as ValidBody, K as ValidQuery, L as VarsOf } from './types-NVvedshc.js';
3
3
 
4
4
  interface CreateContextOptions<Params extends Record<string, string> = Record<string, string>, Input extends ValidatedInput = ValidatedInput> {
5
5
  request: Request;
@@ -8,6 +8,10 @@ interface CreateContextOptions<Params extends Record<string, string> = Record<st
8
8
  app?: Services;
9
9
  /** The adapter's native per-request context, stashed for backend-specific bridges. */
10
10
  native?: unknown;
11
+ /** Secret for `c.signedCookie` / `c.req.signedCookie` (from `config.cookieSecret`). */
12
+ cookieSecret?: string;
13
+ /** The adapter's cookie jar, built from its runtime's native helpers. */
14
+ cookies?: CookieJarFactory;
11
15
  }
12
16
  declare function createTypedResponse<T, S extends StatusCode, F extends ResponseFormat>(data: T, status: S, format: F, headers?: HeadersInit): TypedResponse<T, S, F>;
13
17
  declare function isTypedResponse(value: unknown): value is TypedResponse<unknown>;
@@ -168,4 +172,4 @@ declare function runInit(lifecycle: GiriLifecycle): Promise<Services>;
168
172
 
169
173
  declare function defineConfig<App>(config: GiriConfig<App>): GiriConfig<App>;
170
174
 
171
- export { BodyContentType, Context, GiriBodySchema, GiriConfig, GiriInputSchema, type GiriLifecycle, GiriPaths, HandlerResponse, HttpMethod, Middleware, MiddlewareOptions, RouteInput, SecurityRequirement, Services, StatusCode, TypedResponse, ValidatedInput, buildGiriApp, composeMiddleware, createContext, createTypedResponse, defineBodySchema, defineConfig, defineInputSchema, defineMiddleware, isGiriBodySchema, isGiriInputSchema, isTypedResponse, loadLifecycle, prepareRequestInput, resolveGiriPaths, runInit, scanRoutes, stack, syncProject, toResponse, typedResponseToResponse };
175
+ export { BodyContentType, Context, CookieJarFactory, GiriBodySchema, GiriConfig, GiriInputSchema, type GiriLifecycle, GiriPaths, HandlerResponse, HttpMethod, Middleware, MiddlewareOptions, RouteInput, SecurityRequirement, Services, StatusCode, TypedResponse, ValidatedInput, buildGiriApp, composeMiddleware, createContext, createTypedResponse, defineBodySchema, defineConfig, defineInputSchema, defineMiddleware, isGiriBodySchema, isGiriInputSchema, isTypedResponse, loadLifecycle, prepareRequestInput, resolveGiriPaths, runInit, scanRoutes, stack, syncProject, toResponse, typedResponseToResponse };
package/dist/index.js CHANGED
@@ -429,6 +429,17 @@ var pendingResponseBrand = /* @__PURE__ */ Symbol("giri.pending-response");
429
429
  function getPending(context) {
430
430
  return context[pendingResponseBrand];
431
431
  }
432
+ var unsupportedCookieJar = {
433
+ get: cookiesUnsupported,
434
+ all: cookiesUnsupported,
435
+ set: cookiesUnsupported,
436
+ delete: cookiesUnsupported,
437
+ getSigned: cookiesUnsupported,
438
+ setSigned: cookiesUnsupported
439
+ };
440
+ function cookiesUnsupported() {
441
+ throw new Error("The active adapter does not support cookies.");
442
+ }
432
443
  function createTypedResponse(data, status, format, headers) {
433
444
  return {
434
445
  [typedResponseBrand]: { data, status, format },
@@ -447,6 +458,11 @@ function createContext(options) {
447
458
  const validated = options.validated ?? {};
448
459
  const pending = { headers: new Headers() };
449
460
  const defaultStatus = () => pending.status ?? 200;
461
+ const cookies = options.cookies ? options.cookies({
462
+ request: options.request,
463
+ append: (header) => pending.headers.append("set-cookie", header),
464
+ secret: options.cookieSecret
465
+ }) : unsupportedCookieJar;
450
466
  const context = {
451
467
  params: options.params ?? {},
452
468
  app: options.app ?? {},
@@ -464,7 +480,10 @@ function createContext(options) {
464
480
  throw new Error(`No validated ${String(key)} data is available for this route.`);
465
481
  }
466
482
  return validated[key];
467
- }
483
+ },
484
+ cookie: (name) => cookies.get(name),
485
+ cookies: () => cookies.all(),
486
+ signedCookie: (name) => cookies.getSigned(name)
468
487
  },
469
488
  set: (key, value) => {
470
489
  store.set(key, value);
@@ -488,7 +507,15 @@ function createContext(options) {
488
507
  },
489
508
  status: (code) => {
490
509
  pending.status = code;
491
- }
510
+ },
511
+ cookie: (name, value, options2) => {
512
+ if (value === null) {
513
+ cookies.delete(name, options2);
514
+ } else {
515
+ cookies.set(name, value, options2);
516
+ }
517
+ },
518
+ signedCookie: (name, value, options2) => cookies.setSigned(name, value, options2)
492
519
  };
493
520
  context[nativeContextBrand] = options.native;
494
521
  context[pendingResponseBrand] = pending;
@@ -526,10 +553,16 @@ function toResponse(response, context) {
526
553
  }
527
554
  const headers = new Headers(base.headers);
528
555
  pending.headers.forEach((value, key) => {
556
+ if (key === "set-cookie") {
557
+ return;
558
+ }
529
559
  if (!headers.has(key)) {
530
560
  headers.set(key, value);
531
561
  }
532
562
  });
563
+ for (const cookie of pending.headers.getSetCookie?.() ?? []) {
564
+ headers.append("set-cookie", cookie);
565
+ }
533
566
  return new Response(base.body, { status: base.status, statusText: base.statusText, headers });
534
567
  }
535
568
  async function composeMiddleware(middleware, handle, context) {
@@ -731,7 +764,8 @@ var configSchema = import_typebox.Type.Object({
731
764
  port: import_typebox.Type.Optional(import_typebox.Type.Number()),
732
765
  hostname: import_typebox.Type.Optional(import_typebox.Type.String())
733
766
  }, { additionalProperties: false })),
734
- errorSchema: import_typebox.Type.Optional(import_typebox.Type.Any())
767
+ errorSchema: import_typebox.Type.Optional(import_typebox.Type.Any()),
768
+ cookieSecret: import_typebox.Type.Optional(import_typebox.Type.String())
735
769
  }, { additionalProperties: false });
736
770
 
737
771
  // src/loader/loader.ts
@@ -1075,7 +1109,8 @@ async function buildGiriApp(config, options = {}) {
1075
1109
  handle: routeModule.handle,
1076
1110
  middleware: [...folderMiddleware, ...verbMiddleware],
1077
1111
  input: routeInput(routeModule, route.file),
1078
- services: options.services
1112
+ services: options.services,
1113
+ cookieSecret: config.cookieSecret
1079
1114
  });
1080
1115
  }
1081
1116
  } finally {