Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new diagnostics #41429

Merged
merged 3 commits into from Oct 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 9 additions & 0 deletions packages/next/build/swc/index.js
Expand Up @@ -207,6 +207,11 @@ async function loadWasm(importPath = '') {
getTargetTriple() {
return undefined
},
diagnostics: {
startDiagnostics: () => {
Log.error('Wasm binding does not support --diagnostics yet')
},
},
}
return wasmBindings
} catch (e) {
Expand Down Expand Up @@ -333,6 +338,10 @@ function loadNative() {
initCustomTraceSubscriber: bindings.initCustomTraceSubscriber,
teardownTraceSubscriber: bindings.teardownTraceSubscriber,
teardownCrashReporter: bindings.teardownCrashReporter,
diagnostics: {
startDiagnostics: (options) =>
bindings.startDiagnostics(toBuffer(options)),
},
}
return nativeBindings
}
Expand Down
77 changes: 49 additions & 28 deletions packages/next/cli/next-dev.ts
Expand Up @@ -10,13 +10,15 @@ import isError from '../lib/is-error'
import { getProjectDir } from '../lib/get-project-dir'
import { CONFIG_FILES } from '../shared/lib/constants'
import path from 'path'
import { loadBindings } from '../build/swc'

const nextDev: cliCommand = (argv) => {
const validArgs: arg.Spec = {
// Types
'--help': Boolean,
'--port': Number,
'--hostname': String,
'--diagnostics': Boolean,

// Aliases
'-h': '--help',
Expand Down Expand Up @@ -85,46 +87,65 @@ const nextDev: cliCommand = (argv) => {
// some set-ups that rely on listening on other interfaces
const host = args['--hostname']

startServer({
const devServerOptions = {
allowRetry,
dev: true,
dir,
hostname: host,
isNextDevCommand: true,
port,
})
.then(async (app) => {
const appUrl = `http://${app.hostname}:${app.port}`
startedDevelopmentServer(appUrl, `${host || '0.0.0.0'}:${app.port}`)
}

if (args['--diagnostics']) {
Log.warn('running diagnostics...')

loadBindings().then((bindings: any) => {
const packagePath = require('next/dist/compiled/find-up').sync(
'package.json'
)
let r = bindings.diagnostics.startDiagnostics({
...devServerOptions,
rootDir: path.dirname(packagePath),
})
// Start preflight after server is listening and ignore errors:
preflight().catch(() => {})
// Finalize server bootup:
await app.prepare()
return r
})
.catch((err) => {
if (err.code === 'EADDRINUSE') {
let errorMessage = `Port ${port} is already in use.`
const pkgAppPath = require('next/dist/compiled/find-up').sync(
'package.json',
{
cwd: dir,
}
)
const appPackage = require(pkgAppPath)
if (appPackage.scripts) {
const nextScript = Object.entries(appPackage.scripts).find(
(scriptLine) => scriptLine[1] === 'next'
} else {
startServer(devServerOptions)
.then(async (app) => {
const appUrl = `http://${app.hostname}:${app.port}`
startedDevelopmentServer(appUrl, `${host || '0.0.0.0'}:${app.port}`)
// Start preflight after server is listening and ignore errors:
preflight().catch(() => {})
// Finalize server bootup:
await app.prepare()
})
.catch((err) => {
if (err.code === 'EADDRINUSE') {
let errorMessage = `Port ${port} is already in use.`
const pkgAppPath = require('next/dist/compiled/find-up').sync(
'package.json',
{
cwd: dir,
}
)
if (nextScript) {
errorMessage += `\nUse \`npm run ${nextScript[0]} -- -p <some other port>\`.`
const appPackage = require(pkgAppPath)
if (appPackage.scripts) {
const nextScript = Object.entries(appPackage.scripts).find(
(scriptLine) => scriptLine[1] === 'next'
)
if (nextScript) {
errorMessage += `\nUse \`npm run ${nextScript[0]} -- -p <some other port>\`.`
}
}
console.error(errorMessage)
} else {
console.error(err)
}
console.error(errorMessage)
} else {
console.error(err)
}
process.nextTick(() => process.exit(1))
})
process.nextTick(() => process.exit(1))
})
}

for (const CONFIG_FILE of CONFIG_FILES) {
watchFile(path.join(dir, CONFIG_FILE), (cur: any, prev: any) => {
Expand Down