Skip to content

Commit 23024b9

Browse files
committed
fix: display correct relative path on windows with hot-hook
1 parent 4da3fc7 commit 23024b9

File tree

3 files changed

+50
-7
lines changed

3 files changed

+50
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"del-cli": "^5.1.0",
5454
"eslint": "^8.57.0",
5555
"github-label-sync": "^2.3.1",
56-
"hot-hook": "^0.1.9",
56+
"hot-hook": "^0.2.1",
5757
"husky": "^9.0.11",
5858
"np": "^10.0.3",
5959
"p-event": "^6.0.1",

src/dev_server.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import picomatch from 'picomatch'
1111
import { relative } from 'node:path'
1212
import type tsStatic from 'typescript'
1313
import prettyHrtime from 'pretty-hrtime'
14+
import { fileURLToPath } from 'node:url'
1415
import { type ExecaChildProcess } from 'execa'
1516
import { cliui, type Logger } from '@poppinss/cliui'
1617
import type { Watcher } from '@poppinss/chokidar-ts'
@@ -168,7 +169,7 @@ export class DevServer {
168169
* Starts the HTTP server
169170
*/
170171
#startHTTPServer(port: string, mode: 'blocking' | 'nonblocking') {
171-
const hooksArgs = { colors: ui.colors, logger: this.#logger }
172+
const hooksArgs = { colors: this.#colors, logger: this.#logger }
172173
this.#httpServer = runNode(this.#cwd, {
173174
script: this.#scriptFile,
174175
env: { PORT: port, ...this.#options.env },
@@ -185,16 +186,16 @@ export class DevServer {
185186
* Handle Hot-Hook messages
186187
*/
187188
if (this.#isHotHookMessage(message)) {
188-
const path = relative(this.#cwd.pathname, message.path || message.paths?.[0]!)
189+
const path = relative(fileURLToPath(this.#cwd), message.path || message.paths?.[0]!)
189190
this.#hooks.onSourceFileChanged(hooksArgs, path)
190191

191192
if (message.type === 'hot-hook:full-reload') {
192193
this.#clearScreen()
193-
this.#logger.log(`${ui.colors.green('full-reload')} ${path}`)
194+
this.#logger.log(`${this.#colors.green('full-reload')} ${path}`)
194195
this.#restartHTTPServer(port)
195196
this.#hooks.onDevServerStarted(hooksArgs)
196197
} else if (message.type === 'hot-hook:invalidated') {
197-
this.#logger.log(`${ui.colors.green('invalidated')} ${path}`)
198+
this.#logger.log(`${this.#colors.green('invalidated')} ${path}`)
198199
}
199200
}
200201

@@ -296,7 +297,6 @@ export class DevServer {
296297
* Handles TypeScript source file change
297298
*/
298299
async #handleSourceFileChange(action: string, port: string, relativePath: string) {
299-
console.log({ relativePath })
300300
await this.#hooks.onSourceFileChanged({ colors: ui.colors, logger: this.#logger }, relativePath)
301301

302302
this.#clearScreen()

tests/dev_server.spec.ts

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import ts from 'typescript'
1111
import { test } from '@japa/runner'
1212
import { cliui } from '@poppinss/cliui'
13+
import { relative, resolve } from 'node:path'
1314
import { setTimeout as sleep } from 'node:timers/promises'
1415

1516
import { DevServer } from '../index.js'
@@ -92,7 +93,7 @@ test.group('DevServer', () => {
9293
await devServer.startAndWatch(ts)
9394
cleanup(() => devServer.close())
9495

95-
await sleep(100)
96+
await sleep(1000)
9697
await fs.create('index.ts', 'foo')
9798
}).waitForDone()
9899

@@ -281,4 +282,46 @@ test.group('DevServer', () => {
281282
assert.isTrue(onDevServerStartedCalled)
282283
assert.isTrue(onSourceFileChangedCalled)
283284
})
285+
286+
test('should correctly display a relative path when a hot-hook message is received', async ({
287+
assert,
288+
fs,
289+
}) => {
290+
await fs.createJson('tsconfig.json', { include: ['**/*'], exclude: [] })
291+
await fs.createJson('package.json', { type: 'module', hotHook: { boundaries: ['./app/**'] } })
292+
await fs.create('app/controllers/app_controller.ts', 'console.log("foo")')
293+
await fs.create(
294+
'bin/server.js',
295+
`
296+
import { resolve } from 'path';
297+
import '../app/controllers/app_controller.js';
298+
`
299+
)
300+
await fs.create('.env', 'PORT=3334')
301+
302+
const { logger } = cliui({ mode: 'raw' })
303+
const devServer = new DevServer(fs.baseUrl, {
304+
hmr: true,
305+
nodeArgs: [],
306+
scriptArgs: [],
307+
}).setLogger(logger)
308+
309+
await devServer.start()
310+
await sleep(2000)
311+
await fs.create('app/controllers/app_controller.ts', 'console.log("bar")')
312+
await sleep(2000)
313+
await devServer.close()
314+
315+
const logMessages = logger.getLogs().map(({ message }) => message)
316+
317+
const relativePath = relative(
318+
fs.basePath,
319+
resolve(fs.basePath, 'app/controllers/app_controller.ts')
320+
)
321+
322+
console.log({ relativePath })
323+
console.log(logMessages)
324+
const expectedMessage = `green(invalidated) ${relativePath}`
325+
assert.isAtLeast(logMessages.filter((message) => message.includes(expectedMessage)).length, 1)
326+
}).timeout(10_000)
284327
})

0 commit comments

Comments
 (0)