Skip to content

Commit a71f1ef

Browse files
authored
Fix markdown handler module resolution (#769)
1 parent 8cff26c commit a71f1ef

2 files changed

Lines changed: 34 additions & 6 deletions

File tree

services/site/server/__tests__/markdown-negotiation.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// @vitest-environment node
2+
import { execa } from 'execa'
23
import { expect, test } from 'vitest'
34
import {
45
markdownContentType,
@@ -81,3 +82,17 @@ test('getSetCookieHeaders preserves multiple set-cookie headers', () => {
8182
'b=2; Path=/',
8283
])
8384
})
85+
86+
test('react-router markdown handler imports under node native typescript', async () => {
87+
const moduleUrl = new URL(
88+
'../react-router-express-with-markdown.ts',
89+
import.meta.url,
90+
).href
91+
const { stdout } = await execa('node', [
92+
'--input-type=module',
93+
'--eval',
94+
`const mod = await import(${JSON.stringify(moduleUrl)}); console.log(typeof mod.createRequestHandlerWithMarkdown)`,
95+
])
96+
97+
expect(stdout.trim()).toBe('function')
98+
})

services/site/server/react-router-express-with-markdown.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,16 @@ import {
1414
type ServerBuild,
1515
type UNSAFE_MiddlewareEnabled,
1616
} from 'react-router'
17-
import {
18-
maybeConvertHtmlResponseToMarkdown,
19-
requestPrefersMarkdown,
20-
} from './markdown-negotiation.js'
17+
18+
const localServerModuleExtension = import.meta.url.includes('/server-build/')
19+
? '.js'
20+
: '.ts'
21+
const markdownNegotiationSpecifier = `./markdown-negotiation${localServerModuleExtension}`
22+
23+
const { maybeConvertHtmlResponseToMarkdown, requestPrefersMarkdown } =
24+
(await import(
25+
markdownNegotiationSpecifier
26+
)) as typeof import('./markdown-negotiation.ts')
2127

2228
type MaybePromise<T> = T | Promise<T>
2329

@@ -85,7 +91,10 @@ function createRemixRequest(req: ExpressRequest, res: ExpressResponse) {
8591
return new Request(url.href, init)
8692
}
8793

88-
async function sendResponse(res: ExpressResponse, response: globalThis.Response) {
94+
async function sendResponse(
95+
res: ExpressResponse,
96+
response: globalThis.Response,
97+
) {
8998
res.statusMessage = response.statusText
9099
res.status(response.status)
91100

@@ -133,7 +142,11 @@ function createRequestHandlerWithMarkdown({
133142
}): ExpressRequestHandler {
134143
const handleRequest = createReactRouterRequestHandler(build, mode)
135144

136-
return async (req: ExpressRequest, res: ExpressResponse, next: NextFunction) => {
145+
return async (
146+
req: ExpressRequest,
147+
res: ExpressResponse,
148+
next: NextFunction,
149+
) => {
137150
try {
138151
const request = createRemixRequest(req, res)
139152
const loadContext = await getLoadContext?.(req, res)

0 commit comments

Comments
 (0)