File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11import type { AnyComponent } from "preact" ;
2- import type { HandlerByMethod , RouteHandler } from "./handlers.ts" ;
2+ import type { HandlerByMethod , HandlerFn , RouteHandler } from "./handlers.ts" ;
33import type { Middleware } from "./middlewares/mod.ts" ;
44import type { PageProps } from "./context.ts" ;
55
@@ -107,7 +107,9 @@ export interface Define<State> {
107107 page <
108108 // deno-lint-ignore no-explicit-any
109109 Handler extends RouteHandler < any , State > = never ,
110- Data = Handler extends HandlerByMethod < infer Data , State > ? Data : never ,
110+ Data = Handler extends HandlerFn < infer Data , State > ? Data
111+ : Handler extends HandlerByMethod < infer Data , State > ? Data
112+ : never ,
111113 > ( render : AnyComponent < PageProps < Data , State > > ) : typeof render ;
112114
113115 /**
Original file line number Diff line number Diff line change 1+ import { expect } from "@std/expect" ;
2+ import { createDefine } from "./define.ts" ;
3+ import { page } from "./handlers.ts" ;
4+
5+ Deno . test . ignore ( "createDefine" , ( ) => {
6+ const define = createDefine < { foo : number } > ( ) ;
7+
8+ // Testing the types
9+ const handlerFn = define . handlers ( ( ctx ) => {
10+ ctx . state . foo satisfies number ;
11+ return page ( { bar : true } ) ;
12+ } ) ;
13+ const handlerObj = define . handlers ( {
14+ GET ( ctx ) {
15+ ctx . state . foo satisfies number ;
16+ return page ( { bar : [ 1 , 2 , 3 ] } ) ;
17+ } ,
18+ POST : ( ) => {
19+ return page ( { baz : "hello" } ) ;
20+ } ,
21+ } ) ;
22+
23+ define . page < typeof handlerFn > ( ( { data } ) => {
24+ data . bar satisfies boolean ;
25+ return "page" ;
26+ } ) ;
27+
28+ define . page < typeof handlerObj > ( ( { data } ) => {
29+ if ( "baz" in data ) {
30+ data . baz satisfies string ;
31+ } else {
32+ data . bar satisfies number [ ] ;
33+ }
34+ return "page" ;
35+ } ) ;
36+
37+ define . middleware ( ( ctx ) => {
38+ ctx . state . foo satisfies number ;
39+ return new Response ( "Hello" ) ;
40+ } ) ;
41+
42+ expect ( typeof define . page ) . toBe ( "function" ) ;
43+ expect ( typeof define . handlers ) . toBe ( "function" ) ;
44+ expect ( typeof define . middleware ) . toBe ( "function" ) ;
45+ } ) ;
You can’t perform that action at this time.
0 commit comments