diff --git a/deno.json b/deno.json index d1c113d93e..91210aca98 100644 --- a/deno.json +++ b/deno.json @@ -1,6 +1,6 @@ { "name": "@hono/do-not-use-this", - "version": "0.0.3", + "version": "0.0.6", "compilerOptions": { "lib": [ "dom", @@ -12,10 +12,66 @@ "sloppy-imports" ], "exports": { - ".": "./src/mod.ts", - "./middleware": "./src/middleware.ts", - "./helper": "./src/helper.ts", - "./jsx/jsx-runtime": "./src/jsx/jsx-runtime.ts" + ".": "./src/index.ts", + "./types": "./src/types.ts", + "./hono-base": "./src/hono-base.ts", + "./tiny": "./src/preset/tiny.ts", + "./quick": "./src/preset/quick.ts", + "./http-exception": "./src/http-exception.ts", + "./basic-auth": "./src/middleware/basic-auth/index.ts", + "./bearer-auth": "./src/middleware/bearer-auth/index.ts", + "./body-limit": "./src/middleware/body-limit/index.ts", + "./cache": "./src/middleware/cache/index.ts", + "./cookie": "./src/helper/cookie/index.ts", + "./accepts": "./src/helper/accepts/index.ts", + "./compress": "./src/middleware/compress/index.ts", + "./cors": "./src/middleware/cors/index.ts", + "./csrf": "./src/middleware/csrf/index.ts", + "./etag": "./src/middleware/etag/index.ts", + "./trailing-slash": "./src/middleware/trailing-slash/index.ts", + "./html": "./src/helper/html/index.ts", + "./css": "./src/helper/css/index.ts", + "./jsx": "./src/jsx/index.ts", + "./jsx/jsx-dev-runtime": "./src/jsx/jsx-dev-runtime.ts", + "./jsx/jsx-runtime": "./src/jsx/jsx-runtime.ts", + "./jsx/streaming": "./src/jsx/streaming.ts", + "./jsx-renderer": "./src/middleware/jsx-renderer/index.ts", + "./jsx/dom": "./src/jsx/dom/index.ts", + "./jsx/dom/jsx-dev-runtime": "./src/jsx/dom/jsx-dev-runtime.ts", + "./jsx/dom/jsx-runtime": "./src/jsx/dom/jsx-runtime.ts", + "./jsx/dom/css": "./src/jsx/dom/css.ts", + "./jwt": "./src/middleware/jwt/jwt.ts", + "./timing": "./src/middleware/timing/timing.ts", + "./logger": "./src/middleware/logger/index.ts", + "./method-override": "./src/middleware/method-override/index.ts", + "./powered-by": "./src/middleware/powered-by/index.ts", + "./pretty-json": "./src/middleware/pretty-json/index.ts", + "./secure-headers": "./src/middleware/secure-headers/secure-headers.ts", + "./ssg": "./src/helper/ssg/index.ts", + "./streaming": "./src/helper/streaming/index.ts", + "./validator": "./src/validator/index.ts", + "./router": "./src/router.ts", + "./router/reg-exp-router": "./src/router/reg-exp-router/index.ts", + "./router/smart-router": "./src/router/smart-router/index.ts", + "./router/trie-router": "./src/router/trie-router/index.ts", + "./router/pattern-router": "./src/router/pattern-router/index.ts", + "./router/linear-router": "./src/router/linear-router/index.ts", + "./utils/jwt": "./src/utils/jwt/index.ts", + "./client": "./src/client/index.ts", + "./adapter": "./src/helper/adapter/index.ts", + "./factory": "./src/helper/factory/index.ts", + "./serve-static": "./src/middleware/serve-static/index.ts", + "./cloudflare-workers": "./src/adapter/cloudflare-workers/index.ts", + "./cloudflare-pages": "./src/adapter/cloudflare-pages/index.ts", + "./deno": "./src/adapter/deno/index.ts", + "./bun": "./src/adapter/bun/index.ts", + "./aws-lambda": "./src/adapter/aws-lambda/index.ts", + "./vercel": "./src/adapter/vercel/index.ts", + "./netlify": "./src/adapter/netlify/index.ts", + "./lambda-edge": "./src/adapter/lambda-edge/index.ts", + "./testing": "./src/helper/testing/index.ts", + "./dev": "./src/helper/dev/index.ts", + "./ws": "./src/helper/websocket/index.ts" }, "publish": { "include": [ @@ -25,15 +81,6 @@ "src/**/*.ts" ], "exclude": [ - "src/index.ts", - "src/adapter/aws-lambda/**/*.ts", - "src/adapter/bun/**/*.ts", - "src/adapter/cloudflare-pages/**/*.ts", - "src/adapter/cloudflare-workers/**/*.ts", - "src/adapter/lambda-edge/**/*.ts", - "src/adapter/netlify/**/*.ts", - "src/adapter/vercel/**/*.ts", - "src/test-utils/**/*.ts", "src/**/*.test.ts", "src/**/*.test.tsx" ] diff --git a/src/adapter/aws-lambda/awslambda.d.ts b/src/adapter/aws-lambda/awslambda.d.ts deleted file mode 100644 index 0154fb3ab2..0000000000 --- a/src/adapter/aws-lambda/awslambda.d.ts +++ /dev/null @@ -1,23 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ - -import type { LambdaContext, Handler } from './types' - -declare global { - namespace awslambda { - // Note: Anticipated logic for AWS - // https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/main/src/HttpResponseStream.js - export class HttpResponseStream { - static from( - underlyingStream: NodeJS.WritableStream, - prelude: Record - ): NodeJS.WritableStream - } - function streamifyResponse( - f: ( - event: any, - responseStream: NodeJS.WritableStream, - context: LambdaContext - ) => Promise - ): Handler - } -} diff --git a/src/adapter/aws-lambda/awslambda.ts b/src/adapter/aws-lambda/awslambda.ts new file mode 100644 index 0000000000..d671765df6 --- /dev/null +++ b/src/adapter/aws-lambda/awslambda.ts @@ -0,0 +1,20 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import type { LambdaContext, Handler } from './types' + +// eslint-disable-next-line @typescript-eslint/no-namespace +export namespace awslambda { + // Note: Anticipated logic for AWS + // https://github.com/aws/aws-lambda-nodejs-runtime-interface-client/blob/main/src/HttpResponseStream.js + export class HttpResponseStream { + // @ts-expect-error it should throw a type error + static from( + underlyingStream: NodeJS.WritableStream, + prelude: Record + ): NodeJS.WritableStream + } + // @ts-expect-error it should throw a type error + export function streamifyResponse( + f: (event: any, responseStream: NodeJS.WritableStream, context: LambdaContext) => Promise + ): Handler +} diff --git a/src/adapter/aws-lambda/handler.ts b/src/adapter/aws-lambda/handler.ts index 460a30e338..182744a53b 100644 --- a/src/adapter/aws-lambda/handler.ts +++ b/src/adapter/aws-lambda/handler.ts @@ -1,14 +1,14 @@ -import crypto from 'crypto' +import crypto from 'node:crypto' import type { Hono } from '../../hono' import type { Env, Schema } from '../../types' - -import { encodeBase64 } from '../../utils/encode' +import { decodeBase64, encodeBase64 } from '../../utils/encode' +import { awslambda } from './awslambda' import type { ApiGatewayRequestContext, ApiGatewayRequestContextV2, ALBRequestContext, } from './custom-context' -import type { LambdaContext } from './types' +import type { Handler, LambdaContext } from './types' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -108,7 +108,7 @@ export const streamHandle = < BasePath extends string = '/' >( app: Hono -) => { +): Handler => { return awslambda.streamifyResponse( async (event: LambdaEvent, responseStream: NodeJS.WritableStream, context: LambdaContext) => { const processor = getProcessor(event) @@ -151,11 +151,8 @@ export const streamHandle = < */ export const handle = ( app: Hono -) => { - return async ( - event: LambdaEvent, - lambdaContext?: LambdaContext - ): Promise => { +): ((event: LambdaEvent, lambdaContext?: LambdaContext) => Promise) => { + return async (event, lambdaContext?) => { const processor = getProcessor(event) const req = processor.createRequest(event) @@ -218,7 +215,7 @@ abstract class EventProcessor { } if (event.body) { - requestInit.body = event.isBase64Encoded ? Buffer.from(event.body, 'base64') : event.body + requestInit.body = event.isBase64Encoded ? decodeBase64(event.body) : event.body } return new Request(url, requestInit) @@ -261,7 +258,7 @@ abstract class EventProcessor { } } -const v2Processor = new (class EventV2Processor extends EventProcessor { +class EventV2Processor extends EventProcessor { protected getPath(event: APIGatewayProxyEventV2): string { return event.rawPath } @@ -283,11 +280,11 @@ const v2Processor = new (class EventV2Processor extends EventProcessor -> { +const v2Processor: EventV2Processor = new EventV2Processor() + +class EventV1Processor extends EventProcessor> { protected getPath(event: Exclude): string { return event.path } @@ -317,7 +314,9 @@ const v1Processor = new (class EventV1Processor extends EventProcessor< 'set-cookie': cookies, } } -})() +} + +const v1Processor: EventV1Processor = new EventV1Processor() export const getProcessor = (event: LambdaEvent): EventProcessor => { if (isProxyEventV2(event)) { diff --git a/src/adapter/bun/websocket.ts b/src/adapter/bun/websocket.ts index 58d0ce8776..063d995fde 100644 --- a/src/adapter/bun/websocket.ts +++ b/src/adapter/bun/websocket.ts @@ -23,7 +23,7 @@ interface BunServer { interface BunWebSocketHandler { open(ws: BunServerWebSocket): void close(ws: BunServerWebSocket, code?: number, reason?: string): void - message(ws: BunServerWebSocket, message: string | Buffer): void + message(ws: BunServerWebSocket, message: string | Uint8Array): void } interface CreateWebSocket { (): { diff --git a/src/adapter/cloudflare-workers/serve-static-module.ts b/src/adapter/cloudflare-workers/serve-static-module.ts index 7fe14530a8..bbd8c01e69 100644 --- a/src/adapter/cloudflare-workers/serve-static-module.ts +++ b/src/adapter/cloudflare-workers/serve-static-module.ts @@ -1,9 +1,11 @@ // For ES module mode -import type { Env } from '../../types' +import type { Env, MiddlewareHandler } from '../../types' import type { ServeStaticOptions } from './serve-static' import { serveStatic } from './serve-static' -const module = (options: Omit, 'namespace'>) => { +const module = ( + options: Omit, 'namespace'> +): MiddlewareHandler => { return serveStatic(options) } diff --git a/src/adapter/cloudflare-workers/websocket.ts b/src/adapter/cloudflare-workers/websocket.ts index f40eab971c..7896ead55d 100644 --- a/src/adapter/cloudflare-workers/websocket.ts +++ b/src/adapter/cloudflare-workers/websocket.ts @@ -37,31 +37,31 @@ export const upgradeWebSocket: UpgradeWebSocket = (createEvents) => async (c, ne if (events.onOpen) { server.addEventListener( 'open', - (evt) => events.onOpen && events.onOpen(evt as Event, wsContext) + (evt: unknown) => events.onOpen && events.onOpen(evt as Event, wsContext) ) } if (events.onClose) { server.addEventListener( 'close', - (evt) => events.onClose && events.onClose(evt as CloseEvent, wsContext) + (evt: unknown) => events.onClose && events.onClose(evt as CloseEvent, wsContext) ) } if (events.onMessage) { server.addEventListener( 'message', - (evt) => events.onMessage && events.onMessage(evt as MessageEvent, wsContext) + (evt: unknown) => events.onMessage && events.onMessage(evt as MessageEvent, wsContext) ) } if (events.onError) { server.addEventListener( 'error', - (evt) => events.onError && events.onError(evt as ErrorEvent as Event, wsContext) + (evt: unknown) => events.onError && events.onError(evt as ErrorEvent as Event, wsContext) ) } server.accept() return new Response(null, { status: 101, - // @ts-expect-error Cloudflare Workers API + // @ts-ignore webSocket: client, }) } diff --git a/src/adapter/lambda-edge/handler.ts b/src/adapter/lambda-edge/handler.ts index cb7d2a8d80..12e58ccdf8 100644 --- a/src/adapter/lambda-edge/handler.ts +++ b/src/adapter/lambda-edge/handler.ts @@ -1,7 +1,7 @@ -import crypto from 'crypto' +import crypto from 'node:crypto' import type { Hono } from '../../hono' -import { encodeBase64 } from '../../utils/encode' +import { decodeBase64, encodeBase64 } from '../../utils/encode' // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -110,13 +110,15 @@ const convertHeaders = (headers: Headers): CloudFrontHeaders => { return cfHeaders } -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const handle = (app: Hono) => { - return async ( - event: CloudFrontEdgeEvent, - context?: CloudFrontContext, - callback?: Callback - ): Promise => { +export const handle = ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + app: Hono +): (( + event: CloudFrontEdgeEvent, + context?: CloudFrontContext, + callback?: Callback +) => Promise) => { + return async (event, context?, callback?) => { const res = await app.fetch(createRequest(event), { event, context, @@ -143,7 +145,7 @@ const createResult = async (res: Response): Promise => { } } -const createRequest = (event: CloudFrontEdgeEvent) => { +const createRequest = (event: CloudFrontEdgeEvent): Request => { const queryString = event.Records[0].cf.request.querystring const urlPath = `https://${event.Records[0].cf.config.distributionDomainName}${event.Records[0].cf.request.uri}` const url = queryString ? `${urlPath}?${queryString}` : urlPath @@ -164,7 +166,10 @@ const createRequest = (event: CloudFrontEdgeEvent) => { }) } -export const createBody = (method: string, requestBody: CloudFrontRequest['body']) => { +export const createBody = ( + method: string, + requestBody: CloudFrontRequest['body'] +): string | Uint8Array | undefined => { if (!requestBody || !requestBody.data) { return undefined } @@ -172,12 +177,12 @@ export const createBody = (method: string, requestBody: CloudFrontRequest['body' return undefined } if (requestBody.encoding === 'base64') { - return Buffer.from(requestBody.data, 'base64') + return decodeBase64(requestBody.data) } return requestBody.data } -export const isContentTypeBinary = (contentType: string) => { +export const isContentTypeBinary = (contentType: string): boolean => { return !/^(text\/(plain|html|css|javascript|csv).*|application\/(.*json|.*xml).*|image\/svg\+xml.*)$/.test( contentType ) diff --git a/src/adapter/netlify/handler.ts b/src/adapter/netlify/handler.ts index ba9b2b3963..a69eb5d378 100644 --- a/src/adapter/netlify/handler.ts +++ b/src/adapter/netlify/handler.ts @@ -1,17 +1,10 @@ -// eslint-disable-next-line @typescript-eslint/ban-ts-comment -// @ts-ignore -import type { Context } from 'https://edge.netlify.com/' +/* eslint-disable @typescript-eslint/no-explicit-any */ import type { Hono } from '../../hono' -export type Env = { - Bindings: { - context: Context - } -} - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const handle = (app: Hono) => { - return (req: Request, context: Context) => { +export const handle = ( + app: Hono +): ((req: Request, context: any) => Response | Promise) => { + return (req: Request, context: any) => { return app.fetch(req, { context }) } } diff --git a/src/adapter/netlify/mod.ts b/src/adapter/netlify/mod.ts index d171345a9f..0151182848 100644 --- a/src/adapter/netlify/mod.ts +++ b/src/adapter/netlify/mod.ts @@ -1,2 +1 @@ export { handle } from './handler' -export type { Env } from './handler' diff --git a/src/adapter/vercel/handler.ts b/src/adapter/vercel/handler.ts index 2cfacd7b3a..26f70e03f8 100644 --- a/src/adapter/vercel/handler.ts +++ b/src/adapter/vercel/handler.ts @@ -3,6 +3,7 @@ import type { Hono } from '../../hono' import type { FetchEventLike } from '../../types' export const handle = - (app: Hono) => (req: Request, requestContext: FetchEventLike) => { + (app: Hono) => + (req: Request, requestContext: FetchEventLike): Response | Promise => { return app.fetch(req, {}, requestContext as any) } diff --git a/src/helper/ssg/ssg.ts b/src/helper/ssg/ssg.ts index 1071244ad5..75562fbe12 100644 --- a/src/helper/ssg/ssg.ts +++ b/src/helper/ssg/ssg.ts @@ -35,7 +35,7 @@ const generateFilePath = ( outDir: string, mimeType: string, extensionMap?: Record -) => { +): string => { const extension = determineExtension(mimeType, extensionMap) if (routePath.endsWith(`.${extension}`)) { diff --git a/src/helper/ssg/utils.ts b/src/helper/ssg/utils.ts index 39da9bd35a..227204b264 100644 --- a/src/helper/ssg/utils.ts +++ b/src/helper/ssg/utils.ts @@ -8,16 +8,16 @@ import { findTargetHandler, isMiddleware } from '../../utils/handler' * @param path File Path * @returns Parent dir path */ -export const dirname = (path: string) => { +export const dirname = (path: string): string => { const splittedPath = path.split(/[\/\\]/) return splittedPath.slice(0, -1).join('/') // Windows supports slash path } -const normalizePath = (path: string) => { +const normalizePath = (path: string): string => { return path.replace(/(\\)/g, '/').replace(/\/$/g, '') } -const handleDotDot = (resultPaths: string[]) => { +const handleDotDot = (resultPaths: string[]): void => { if (resultPaths.length === 0) { resultPaths.push('..') } else { @@ -25,14 +25,14 @@ const handleDotDot = (resultPaths: string[]) => { } } -const handleNonDot = (path: string, resultPaths: string[]) => { +const handleNonDot = (path: string, resultPaths: string[]): void => { path = path.replace(/^\.(?!.)/, '') if (path !== '') { resultPaths.push(path) } } -const handleSegments = (paths: string[], resultPaths: string[]) => { +const handleSegments = (paths: string[], resultPaths: string[]): void => { for (const path of paths) { // Handle `..` or `../` if (path === '..') { @@ -44,7 +44,7 @@ const handleSegments = (paths: string[], resultPaths: string[]) => { } } -export const joinPaths = (...paths: string[]) => { +export const joinPaths = (...paths: string[]): string => { paths = paths.map(normalizePath) const resultPaths: string[] = [] handleSegments(paths.join('/').split('/'), resultPaths) diff --git a/src/hono-base.ts b/src/hono-base.ts index 673fe58d8a..f15ee2fd59 100644 --- a/src/hono-base.ts +++ b/src/hono-base.ts @@ -415,7 +415,8 @@ class Hono< * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/ */ fire = () => { - // @ts-expect-error `event` is not the type expected by addEventListener + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore addEventListener('fetch', (event: FetchEventLike): void => { event.respondWith(this.dispatch(event.request, event, undefined, event.request.method)) }) diff --git a/src/jsx/dom/css.ts b/src/jsx/dom/css.ts index d8dc1cc193..6e5ab84d86 100644 --- a/src/jsx/dom/css.ts +++ b/src/jsx/dom/css.ts @@ -133,12 +133,38 @@ export const createCssJsxDomObjects: CreateCssJsxDomObjectsType = ({ id }) => { return [cssObject, Style] as const } +interface CssType { + (strings: TemplateStringsArray, ...values: CssVariableType[]): string +} + +interface CxType { + (...args: (string | boolean | null | undefined)[]): string +} + +interface KeyframesType { + (strings: TemplateStringsArray, ...values: CssVariableType[]): CssClassName +} + +interface ViewTransitionType { + (strings: TemplateStringsArray, ...values: CssVariableType[]): string + (content: string): string + (): string +} + +interface DefaultContextType { + css: CssType + cx: CxType + keyframes: KeyframesType + viewTransition: ViewTransitionType + Style: FC> +} + /** * @experimental * `createCssContext` is an experimental feature. * The API might be changed. */ -export const createCssContext = ({ id }: { id: Readonly }) => { +export const createCssContext = ({ id }: { id: Readonly }): DefaultContextType => { const [cssObject, Style] = createCssJsxDomObjects({ id }) const newCssClassNameObject = (cssClassName: CssClassName): string => { @@ -147,24 +173,19 @@ export const createCssContext = ({ id }: { id: Readonly }) => { return cssClassName as unknown as string } - const css = (strings: TemplateStringsArray, ...values: CssVariableType[]): string => { + const css: CssType = (strings, ...values) => { return newCssClassNameObject(cssCommon(strings, values)) } - const cx = (...args: (string | boolean | null | undefined)[]): string => { + const cx: CxType = (...args) => { // eslint-disable-next-line @typescript-eslint/no-explicit-any args = cxCommon(args as any) as any // eslint-disable-next-line @typescript-eslint/no-explicit-any return css(Array(args.length).fill('') as any, ...args) } - const keyframes = keyframesCommon + const keyframes: KeyframesType = keyframesCommon - type ViewTransitionType = { - (strings: TemplateStringsArray, ...values: CssVariableType[]): string - (content: string): string - (): string - } const viewTransition: ViewTransitionType = (( strings: TemplateStringsArray | string | undefined, ...values: CssVariableType[] @@ -182,7 +203,7 @@ export const createCssContext = ({ id }: { id: Readonly }) => { } } -const defaultContext = createCssContext({ id: DEFAULT_STYLE_ID }) +const defaultContext: DefaultContextType = createCssContext({ id: DEFAULT_STYLE_ID }) /** * @experimental diff --git a/src/jsx/dom/render.ts b/src/jsx/dom/render.ts index 35ea01d177..41191139a9 100644 --- a/src/jsx/dom/render.ts +++ b/src/jsx/dom/render.ts @@ -21,7 +21,7 @@ const nameSpaceMap: Record = { math: 'http://www.w3.org/1998/Math/MathML', } as const -const skipProps = new Set(['children']) +const skipProps: Set = new Set(['children']) // eslint-disable-next-line @typescript-eslint/no-explicit-any export type HasRenderToDom = FC & { [DOM_RENDERER]: FC } @@ -143,15 +143,15 @@ const applyProps = (container: SupportedElement, attributes: Props, oldAttribute const nodeName = container.nodeName if (key === 'value') { if (nodeName === 'INPUT' || nodeName === 'TEXTAREA' || nodeName === 'SELECT') { - ;(container as HTMLInputElement).value = + ;(container as unknown as HTMLInputElement).value = value === null || value === undefined || value === false ? null : value if (nodeName === 'TEXTAREA') { container.textContent = value continue } else if (nodeName === 'SELECT') { - if ((container as HTMLSelectElement).selectedIndex === -1) { - ;(container as HTMLSelectElement).selectedIndex = 0 + if ((container as unknown as HTMLSelectElement).selectedIndex === -1) { + ;(container as unknown as HTMLSelectElement).selectedIndex = 0 } continue } @@ -245,7 +245,7 @@ const getNextChildren = ( }) } -const findInsertBefore = (node: Node | undefined): ChildNode | null => { +const findInsertBefore = (node: Node | undefined): SupportedElement | Text | null => { if (!node) { return null } else if (node.e) { @@ -324,8 +324,10 @@ const applyNodeObject = (node: NodeObject, container: Container) => { const childNodes = container.childNodes let offset = - findChildNodeIndex(childNodes, findInsertBefore(node.nN)) ?? - findChildNodeIndex(childNodes, next.find((n) => n.e)?.e) ?? + // eslint-disable-next-line @typescript-eslint/no-explicit-any + findChildNodeIndex(childNodes, findInsertBefore(node.nN) as any) ?? + // eslint-disable-next-line @typescript-eslint/no-explicit-any + findChildNodeIndex(childNodes, next.find((n) => n.e)?.e as any) ?? childNodes.length for (let i = 0, len = next.length; i < len; i++, offset++) { @@ -360,10 +362,10 @@ const applyNodeObject = (node: NodeObject, container: Container) => { }) } -const fallbackUpdateFnArrayMap = new WeakMap< +const fallbackUpdateFnArrayMap: WeakMap< NodeObject, Array<() => Promise> ->() +> = new WeakMap Promise>>() export const build = ( context: Context, node: NodeObject, @@ -528,7 +530,10 @@ const updateSync = (context: Context, node: NodeObject) => { } type UpdateMapResolve = (node: NodeObject | undefined) => void -const updateMap = new WeakMap() +const updateMap: WeakMap = new WeakMap< + NodeObject, + [UpdateMapResolve, Function] +>() const currentUpdateSets: Set[] = [] export const update = async ( context: Context, diff --git a/src/middleware.ts b/src/middleware.ts index 4e44a8e04b..e7aa5f6280 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -10,6 +10,7 @@ export * from './middleware/etag' export * from './jsx' export * from './middleware/jsx-renderer' export { jwt } from './middleware/jwt/jwt' +export type { JwtVariables } from './middleware/jwt/jwt' export * from './middleware/logger' export * from './middleware/method-override' export * from './middleware/powered-by' diff --git a/src/utils/filepath.ts b/src/utils/filepath.ts index 35c6159f7c..85ce9962cd 100644 --- a/src/utils/filepath.ts +++ b/src/utils/filepath.ts @@ -26,7 +26,7 @@ export const getFilePath = (options: FilePathOptions): string | undefined => { export const getFilePathWithoutDefaultDocument = ( options: Omit -) => { +): string | undefined => { let root = options.root || '' let filename = options.filename