Skip to content

Commit

Permalink
denoify
Browse files Browse the repository at this point in the history
  • Loading branch information
yusukebe committed Nov 28, 2023
1 parent 7b9ca6d commit bfdb28b
Show file tree
Hide file tree
Showing 3 changed files with 296 additions and 6 deletions.
298 changes: 294 additions & 4 deletions deno_dist/helper/factory/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,296 @@
import type { Env, Input, MiddlewareHandler } from '../../types.ts'
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { Env, Input, MiddlewareHandler, H, HandlerResponse } from '../../types.ts'

/**
* @experimental
* `Factory` class is an experimental feature.
* The API might be changed.
*/
export class Factory<E extends Env = any, P extends string = any> {
createMiddleware = <I extends Input = {}>(middleware: MiddlewareHandler<E, P, I>) => middleware

/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<I extends Input = {}>(handler1: H<E, P, I>): [H<E, P, I>]

// handler x2
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<I extends Input = {}, I2 extends Input = I, R extends HandlerResponse<any> = any>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>
): [H<E, P, I, R>, H<E, P, I2, R>]

// handler x3
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>
): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>]

// handler x4
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>
): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>]

// handler x5
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
I5 extends Input = I & I2 & I3 & I4,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>,
handler5: H<E, P, I5, R>
): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>]

// handler x6
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
I5 extends Input = I & I2 & I3 & I4,
I6 extends Input = I & I2 & I3 & I4 & I5,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>,
handler5: H<E, P, I5, R>,
handler6: H<E, P, I6, R>
): [H<E, P, I, R>, H<E, P, I2, R>, H<E, P, I3, R>, H<E, P, I4, R>, H<E, P, I5, R>, H<E, P, I6, R>]

// handler x7
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
I5 extends Input = I & I2 & I3 & I4,
I6 extends Input = I & I2 & I3 & I4 & I5,
I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>,
handler5: H<E, P, I5, R>,
handler6: H<E, P, I6, R>,
handler7: H<E, P, I7, R>
): [
H<E, P, I, R>,
H<E, P, I2, R>,
H<E, P, I3, R>,
H<E, P, I4, R>,
H<E, P, I5, R>,
H<E, P, I6, R>,
H<E, P, I7, R>
]

// handler x8
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
I5 extends Input = I & I2 & I3 & I4,
I6 extends Input = I & I2 & I3 & I4 & I5,
I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>,
handler5: H<E, P, I5, R>,
handler6: H<E, P, I6, R>,
handler7: H<E, P, I7, R>,
handler8: H<E, P, I8, R>
): [
H<E, P, I, R>,
H<E, P, I2, R>,
H<E, P, I3, R>,
H<E, P, I4, R>,
H<E, P, I5, R>,
H<E, P, I6, R>,
H<E, P, I7, R>,
H<E, P, I8, R>
]

// handler x9
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
I5 extends Input = I & I2 & I3 & I4,
I6 extends Input = I & I2 & I3 & I4 & I5,
I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>,
handler5: H<E, P, I5, R>,
handler6: H<E, P, I6, R>,
handler7: H<E, P, I7, R>,
handler8: H<E, P, I8, R>,
handler9: H<E, P, I9, R>
): [
H<E, P, I, R>,
H<E, P, I2, R>,
H<E, P, I3, R>,
H<E, P, I4, R>,
H<E, P, I5, R>,
H<E, P, I6, R>,
H<E, P, I7, R>,
H<E, P, I8, R>,
H<E, P, I9, R>
]

// handler x10
/**
* @experimental
* `createHandlers` is an experimental feature.
* The API might be changed.
*/
createHandlers<
I extends Input = {},
I2 extends Input = I,
I3 extends Input = I & I2,
I4 extends Input = I & I2 & I3,
I5 extends Input = I & I2 & I3 & I4,
I6 extends Input = I & I2 & I3 & I4 & I5,
I7 extends Input = I & I2 & I3 & I4 & I5 & I6,
I8 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7,
I9 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8,
I10 extends Input = I & I2 & I3 & I4 & I5 & I6 & I7 & I8 & I9,
R extends HandlerResponse<any> = any
>(
handler1: H<E, P, I, R>,
handler2: H<E, P, I2, R>,
handler3: H<E, P, I3, R>,
handler4: H<E, P, I4, R>,
handler5: H<E, P, I5, R>,
handler6: H<E, P, I6, R>,
handler7: H<E, P, I7, R>,
handler8: H<E, P, I8, R>,
handler9: H<E, P, I9, R>,
handler10: H<E, P, I10, R>
): [
H<E, P, I, R>,
H<E, P, I2, R>,
H<E, P, I3, R>,
H<E, P, I4, R>,
H<E, P, I5, R>,
H<E, P, I6, R>,
H<E, P, I7, R>,
H<E, P, I8, R>,
H<E, P, I9, R>,
H<E, P, I10, R>
]

createHandlers(
handler1: H,
handler2?: H,
handler3?: H,
handler4?: H,
handler5?: H,
handler6?: H,
handler7?: H,
handler8?: H,
handler9?: H,
handler10?: H
) {
return [
handler1,
handler2,
handler3,
handler4,
handler5,
handler6,
handler7,
handler8,
handler9,
handler10,
]
}
}

/**
* @experimental
* `createFactory` is an experimental feature.
* The API might be changed.
*/
export const createFactory = <E extends Env = any, P extends string = any>() => new Factory<E, P>()

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export const createMiddleware = <E extends Env = any, P extends string = any, I extends Input = {}>(
middleware: MiddlewareHandler<E, P, I>
) => middleware
middleware: MiddlewareHandler
) => createFactory<E, P>().createMiddleware<I>(middleware)
2 changes: 1 addition & 1 deletion deno_dist/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ export type Input = {
////// //////
////////////////////////////////////////

type HandlerResponse<O> = Response | TypedResponse<O> | Promise<Response | TypedResponse<O>>
export type HandlerResponse<O> = Response | TypedResponse<O> | Promise<Response | TypedResponse<O>>

export type Handler<
E extends Env = any,
Expand Down
2 changes: 1 addition & 1 deletion src/helper/factory/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ describe('createMiddleware', () => {
// A fake function for testing types.
// eslint-disable-next-line @typescript-eslint/no-unused-vars
function extractSchema<T = unknown>(_: T): ExtractSchema<T> {
return 0 as ExtractSchema<T>
return true as ExtractSchema<T>
}

describe('createHandler', () => {
Expand Down

0 comments on commit bfdb28b

Please sign in to comment.