@lovrozagar/flare 0.5.0 → 0.5.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lovrozagar/flare",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Solid meta-framework. Server-driven, NDJSON streaming, renderToStream.",
5
5
  "keywords": [
6
6
  "flare",
@@ -1210,7 +1210,7 @@ export function generateRouteRegistry(
1210
1210
  }
1211
1211
 
1212
1212
  if (hasServer) {
1213
- lines.push(`\t\tenv: Parameters<typeof _FlareHandler["fetch"]>[1]`);
1213
+ lines.push(`\t\tenv: NonNullable<(typeof _FlareHandler)["~flare"]>["env"]`);
1214
1214
  lines.push(`\t\tserverContext: NonNullable<(typeof _FlareHandler)["~flare"]>["serverContext"]`);
1215
1215
  }
1216
1216
  if (hasQueryClient) {
@@ -43,53 +43,54 @@ export interface ServerBuilder<
43
43
  TExcluded extends string = never,
44
44
  TAuth = unknown,
45
45
  TServerContext = Record<string, unknown>,
46
+ TEnv = unknown,
46
47
  > {
47
- /** Type-only: what `.authenticateFn()` and `.serverContext()` resolve to. Generated route types read it. */
48
- readonly "~flare"?: { auth: TAuth; serverContext: TServerContext };
48
+ /** Type-only: what `.authenticateFn()`, `.serverContext()`, and `createServer<TEnv>()` resolve to. Generated route types read it. */
49
+ readonly "~flare"?: { auth: TAuth; env: TEnv; serverContext: TServerContext };
49
50
  authenticateFn: "authenticateFn" extends TExcluded
50
51
  ? never
51
52
  : <TNewAuth>(
52
53
  fn: (ctx: {
53
54
  callerData?: unknown[];
54
- env: unknown;
55
+ env: TEnv;
55
56
  request: Request;
56
57
  serverContext: Record<string, unknown>;
57
58
  url: URL;
58
59
  }) => TNewAuth | null | Promise<TNewAuth | null>,
59
- ) => ServerBuilder<TExcluded | "authenticateFn", TNewAuth, TServerContext>;
60
+ ) => ServerBuilder<TExcluded | "authenticateFn", TNewAuth, TServerContext, TEnv>;
60
61
  cache: "cache" extends TExcluded
61
62
  ? never
62
- : (config: HandlerCacheConfig) => ServerBuilder<TExcluded | "cache", TAuth, TServerContext>;
63
- fetch(request: Request, env?: unknown, ctx?: { waitUntil?: (p: Promise<unknown>) => void }): Promise<Response>;
63
+ : (config: HandlerCacheConfig) => ServerBuilder<TExcluded | "cache", TAuth, TServerContext, TEnv>;
64
+ fetch(request: Request, env?: TEnv, ctx?: { waitUntil?: (p: Promise<unknown>) => void }): Promise<Response>;
64
65
  getStaticParams(): Promise<StaticParamsMap>;
65
66
  keepalive: "keepalive" extends TExcluded
66
67
  ? never
67
- : (config: KeepaliveConfig) => ServerBuilder<TExcluded | "keepalive", TAuth, TServerContext>;
68
- mount(prefix: string, target: MountTarget): ServerBuilder<TExcluded, TAuth, TServerContext>;
68
+ : (config: KeepaliveConfig) => ServerBuilder<TExcluded | "keepalive", TAuth, TServerContext, TEnv>;
69
+ mount(prefix: string, target: MountTarget): ServerBuilder<TExcluded, TAuth, TServerContext, TEnv>;
69
70
  security: "security" extends TExcluded
70
71
  ? never
71
72
  : (
72
73
  config:
73
74
  | SecurityConfig
74
75
  | ((ctx: {
75
- env: unknown;
76
+ env: TEnv;
76
77
  nonce: string;
77
78
  request: Request;
78
79
  serverContext: Record<string, unknown>;
79
80
  }) => SecurityConfig),
80
- ) => ServerBuilder<TExcluded | "security", TAuth, TServerContext>;
81
+ ) => ServerBuilder<TExcluded | "security", TAuth, TServerContext, TEnv>;
81
82
  serverContext: "serverContext" extends TExcluded
82
83
  ? never
83
84
  : <T extends Record<string, unknown>>(
84
- fn: (ctx: { env: unknown; request: Request }) => T | Promise<T>,
85
- ) => ServerBuilder<TExcluded | "serverContext", TAuth, T>;
85
+ fn: (ctx: { env: TEnv; request: Request }) => T | Promise<T>,
86
+ ) => ServerBuilder<TExcluded | "serverContext", TAuth, T, TEnv>;
86
87
  sitemap: "sitemap" extends TExcluded
87
88
  ? never
88
- : (config: SitemapSubmitConfig) => ServerBuilder<TExcluded | "sitemap", TAuth, TServerContext>;
89
+ : (config: SitemapSubmitConfig) => ServerBuilder<TExcluded | "sitemap", TAuth, TServerContext, TEnv>;
89
90
  tracing: "tracing" extends TExcluded
90
91
  ? never
91
- : (config: TracingConfig) => ServerBuilder<TExcluded | "tracing", TAuth, TServerContext>;
92
- use(...args: (FlareMiddleware | PathMatcher | string)[]): ServerBuilder<TExcluded, TAuth, TServerContext>;
92
+ : (config: TracingConfig) => ServerBuilder<TExcluded | "tracing", TAuth, TServerContext, TEnv>;
93
+ use(...args: (FlareMiddleware | PathMatcher | string)[]): ServerBuilder<TExcluded, TAuth, TServerContext, TEnv>;
93
94
  }
94
95
 
95
96
  /* Internal implementation type — no exclusion tracking */
@@ -155,7 +156,10 @@ function bindWaitUntil(ctx?: {
155
156
  };
156
157
  }
157
158
 
158
- export function createServer(router: MarkedRouterConfig): ServerBuilder {
159
+ /** `TEnv` is the worker env (`createServer<Cloudflare.Env>(router)`); it types `ctx.env` here and in every route. */
160
+ export function createServer<TEnv = unknown>(
161
+ router: MarkedRouterConfig,
162
+ ): ServerBuilder<never, unknown, Record<string, unknown>, TEnv> {
159
163
  const middlewareEntries: MiddlewareEntry[] = [];
160
164
  const mountConfigs: MountConfig[] = [];
161
165
  let authenticateFn: ServerHandlerConfig["authenticateFn"];
@@ -293,5 +297,5 @@ export function createServer(router: MarkedRouterConfig): ServerBuilder {
293
297
  },
294
298
  };
295
299
 
296
- return builder as ServerBuilder;
300
+ return builder as ServerBuilder<never, unknown, Record<string, unknown>, TEnv>;
297
301
  }