Skip to content

Commit

Permalink
cleaned up global request type
Browse files Browse the repository at this point in the history
  • Loading branch information
kwhitley committed Apr 14, 2024
1 parent f067cd1 commit f56e2f9
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 15 deletions.
3 changes: 1 addition & 2 deletions examples/types/additional-arguments.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,12 @@ router
// before middleware
.get('/', (request, env) => {
request.user = 'kevin' // invalid (strict)
env.whatever = 123 // valid (any)
env.age = 123 // valid
})

// route-level overrides
.get<IRequest, Args>('/', (request, env) => {
request.foo = 'bar' // invalid
request.foo = 'bar' // valid
env.whatever = 123 // invalid
env.age = 123 // valid
})
Expand Down
33 changes: 33 additions & 0 deletions examples/types/generics-router-stages.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import { error } from 'console'
import { Router } from '../../src/Router'
import { withParams } from '../../src/withParams'
import { IRequest, IRequestStrict, RequestHandler } from '../../src/types'

// we define our environment
type Environment = { age: number }
type Pet = { name: string }

// and now both args combined (that Workers send to the .fetch())
type Args = [Environment]
type AlternativeArgs = [Pet]

const router = Router<IRequestStrict, Args, Response>({
before: [
(request, env) => {
env.age = 123 // valid
env.foo // invalid
request.foo // invalid
request.body // valid
},
withParams,
],
catch: error,
finally: [
(response, request, env) => {
response.whatever // valid (any)
env.age = 123 // valid
env.foo // invalid
request.foo // invalid
},
]
})
51 changes: 51 additions & 0 deletions examples/types/ittyrouter-generics.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import { IttyRouter } from '../../src/IttyRouter'
import { IRequest, IRequestStrict, RequestHandler } from '../../src/types'

// we define our environment
type Environment = { age: number }
type Pet = { name: string }

// and now both args combined (that Workers send to the .fetch())
type Args = [Environment]
type AlternativeArgs = [Pet]

// creating some middleware that needs access to CF variables
export const withUser: RequestHandler<IRequest, Args> =
(request, env) => {
request.user = 'Kevin'
env.age = 123
env.name = 'Kevin' // invalid
}

const router = IttyRouter<IRequestStrict, Args>()

router
// before middleware
.get('/', (request, env) => {
request.user = 'kevin' // invalid (strict)
env.age = 123 // valid
})

// route-level overrides
.get<IRequest, Args>('/', (request, env) => {
request.foo = 'bar' // valid
env.whatever = 123 // invalid
env.age = 123 // valid
})
// route-level overrides
.get<IRequest, AlternativeArgs>('/', (request, env) => {
request.foo = 'bar' // valid
env.age = 123 // invalid
env.name = 'Mittens' // valid
})

// after middleware
.get('/', withUser, (request, env) => {
request.user = 'Kevin'
env.age = 123 // valid
env.whatever = 123 // invalid
})

.get('/', (request, env) => {
env.age = 'foo' // invalid
})
5 changes: 2 additions & 3 deletions src/IttyRouter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,13 @@ export const IttyRouter = <
RequestType extends IRequest = IRequest,
Args extends any[] = any[],
ResponseType = any,
GlobalRequestType = RequestType,
>({ base = '', routes = [], ...other }: IttyRouterOptions = {}): IttyRouterType<RequestType, Args, ResponseType, GlobalRequestType> =>
>({ base = '', routes = [], ...other }: IttyRouterOptions = {}): IttyRouterType<RequestType, Args, ResponseType> =>
// @ts-ignore
({
__proto__: new Proxy({}, {
// @ts-expect-error (we're adding an expected prop "path" to the get)
get: (target: any, prop: string, receiver: object, path: string) =>
(route: string, ...handlers: RequestHandler<GlobalRequestType, Args>[]) =>
(route: string, ...handlers: RequestHandler<RequestType, Args>[]) =>
routes.push(
[
prop.toUpperCase(),
Expand Down
19 changes: 9 additions & 10 deletions src/types/IttyRouterType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,16 @@ export type IttyRouterType<
RequestType = IRequest,
Args extends any[] = any[],
ResponseType = any,
GlobalRequestType = RequestType,
> = {
__proto__: IttyRouterType<RequestType, Args, ResponseType>
routes: RouteEntry[]
fetch: <A extends any[] = Args>(request: RequestLike, ...extra: A) => Promise<ResponseType>
all: Route<GlobalRequestType, Args>
delete: Route<GlobalRequestType, Args>
get: Route<GlobalRequestType, Args>
head: Route<GlobalRequestType, Args>
options: Route<GlobalRequestType, Args>
patch: Route<GlobalRequestType, Args>
post: Route<GlobalRequestType, Args>
put: Route<GlobalRequestType, Args>
} & CustomRoutes<Route<GlobalRequestType, Args>> & GenericTraps
all: Route<RequestType, Args>
delete: Route<RequestType, Args>
get: Route<RequestType, Args>
head: Route<RequestType, Args>
options: Route<RequestType, Args>
patch: Route<RequestType, Args>
post: Route<RequestType, Args>
put: Route<RequestType, Args>
} & CustomRoutes<Route<RequestType, Args>> & GenericTraps

0 comments on commit f56e2f9

Please sign in to comment.