Skip to content

Commit

Permalink
emit vscode config
Browse files Browse the repository at this point in the history
  • Loading branch information
shuding committed Oct 24, 2022
1 parent a9d1452 commit e17715c
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 2 deletions.
4 changes: 2 additions & 2 deletions packages/next/build/webpack/plugins/flight-types-plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ interface LayoutProps {
params?: PageParams
}
type PageComponent = (props: PageProps) => React.ReactNode | null
type LayoutComponent = (props: LayoutProps) => React.ReactNode | null
type PageComponent = (props: PageProps) => React.ReactNode | null | Promise<React.ReactNode | null>
type LayoutComponent = (props: LayoutProps) => React.ReactNode | null | Promise<React.ReactNode | null>
interface IEntry {
${
Expand Down
50 changes: 50 additions & 0 deletions packages/next/lib/typescript/writeVscodeConfigurations.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import path from 'path'
import { promises as fs } from 'fs'

// Write .vscode settings to enable Next.js typescript plugin.
export async function writeVscodeConfigurations(
baseDir: string
): Promise<void> {
const vscodeSettings = path.join(baseDir, '.vscode', 'settings.json')
let settings: any = {}
let currentContent: string = ''

try {
currentContent = await fs.readFile(vscodeSettings, 'utf8')
settings = JSON.parse(currentContent)
} catch (err) {}

const libPath =
'.' + path.sep + path.join('node_modules', 'typescript', 'lib')
if (
settings['typescript.tsdk'] === libPath &&
settings['typescript.enablePromptUseWorkspaceTsdk']
) {
return
}

settings['typescript.tsdk'] = libPath
settings['typescript.enablePromptUseWorkspaceTsdk'] = true

const content = JSON.stringify(settings, null, 2)

const vscodeFolder = path.join(baseDir, '.vscode')
try {
await fs.lstat(vscodeFolder)
} catch (e) {
await fs.mkdir(vscodeFolder, { recursive: true })
}

await fs.writeFile(vscodeSettings, content)

// Write to .gitignore if it exists
const gitIgnore = path.join(baseDir, '.gitignore')
try {
const gitIgnoreContent = await fs.readFile(gitIgnore, 'utf8')
if (!gitIgnoreContent.includes('.vscode')) {
await fs.writeFile(gitIgnore, `${gitIgnoreContent}\n.vscode\n`)
}
} catch (e) {
await fs.writeFile(gitIgnore, `vscode\n`)
}
}
5 changes: 5 additions & 0 deletions packages/next/lib/verifyTypeScriptSetup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import { writeConfigurationDefaults } from './typescript/writeConfigurationDefau
import { installDependencies } from './install-dependencies'
import { isCI } from '../telemetry/ci-info'
import { missingDepsError } from './typescript/missingDependencyError'
import { writeVscodeConfigurations } from './typescript/writeVscodeConfigurations'

const requiredPackages = [
{
Expand Down Expand Up @@ -123,6 +124,10 @@ export async function verifyTypeScriptSetup({
// Next.js' types:
await writeAppTypeDeclarations(dir, !disableStaticImages)

if (isAppDirEnabled) {
await writeVscodeConfigurations(dir)
}

let result
if (typeCheckPreflight) {
const { runTypeCheck } = require('./typescript/runTypeCheck')
Expand Down

0 comments on commit e17715c

Please sign in to comment.