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 Typescript types for builds functions #5791

Merged
merged 5 commits into from Dec 3, 2018
Merged
Show file tree
Hide file tree
Changes from 2 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
7 changes: 5 additions & 2 deletions package.json
Expand Up @@ -13,14 +13,15 @@
"pretest": "npm run lint",
"test": "npm run testall || npm run testall",
"coveralls": "cat ./test/coverage/lcov.info | coveralls",
"lint": "standard",
"lint": "standard && standard --parser typescript-eslint-parser --plugin typescript packages/**/*.ts",
"prepublish": "lerna run prepublish",
"publish-canary": "lerna version prerelease --preid canary --force-publish",
"lint-staged": "lint-staged"
},
"pre-commit": "lint-staged",
"lint-staged": {
"*.js": "standard",
"*.js": "standard --fix",
"*.ts": "standard --parser typescript-eslint-parser --plugin typescript --fix",
"packages/**/bin/*": "standard"
},
"standard": {
Expand Down Expand Up @@ -48,6 +49,7 @@
"chromedriver": "2.42.0",
"clone": "2.1.1",
"coveralls": "3.0.2",
"eslint-plugin-typescript": "0.14.0",
"express": "4.16.3",
"fkill": "5.1.0",
"flatten": "1.0.2",
Expand All @@ -66,6 +68,7 @@
"rimraf": "2.6.2",
"standard": "11.0.1",
"taskr": "1.1.0",
"typescript-eslint-parser": "21.0.1",
"wait-port": "0.2.2",
"wd": "1.10.3",
"webpack-bundle-analyzer": "3.0.3"
Expand Down
1 change: 1 addition & 0 deletions packages/next/bin/next-build
Expand Up @@ -46,5 +46,6 @@ if (!existsSync(join(dir, 'pages'))) {

build(dir, null, lambdas)
.catch((err) => {
console.error('> Build error occured')
printAndExit(err)
})
8 changes: 4 additions & 4 deletions packages/next/build/babel/plugins/react-loadable-plugin.ts
Expand Up @@ -43,7 +43,7 @@ export default function ({ types: t }: {types: typeof BabelTypes}): PluginObj {
const bindingName = defaultSpecifier.node.local.name
const binding = path.scope.getBinding(bindingName)

if(!binding) {
if (!binding) {
return
}

Expand Down Expand Up @@ -106,22 +106,22 @@ export default function ({ types: t }: {types: typeof BabelTypes}): PluginObj {
loader = propertiesMap.modules.get('value')
}

if(!loader || Array.isArray(loader)) {
if (!loader || Array.isArray(loader)) {
return
}
const dynamicImports: BabelTypes.StringLiteral[] = []

loader.traverse({
Import (path) {
const args = path.parentPath.get('arguments')
if(!Array.isArray(args)) return
if (!Array.isArray(args)) return
const node: any = args[0].node
dynamicImports.push(node)
}
})

if (!dynamicImports.length) return

options.node.properties.push(t.objectProperty(
t.identifier('loadableGenerated'),
t.objectExpression([
Expand Down
47 changes: 13 additions & 34 deletions packages/next/build/index.js
@@ -1,50 +1,34 @@
import { join } from 'path'
import promisify from '../lib/promisify'
import fs from 'fs'
import webpack from 'webpack'
import nanoid from 'nanoid'
import loadConfig from 'next-server/next-config'
import { PHASE_PRODUCTION_BUILD, BUILD_ID_FILE } from 'next-server/constants'
import { PHASE_PRODUCTION_BUILD } from 'next-server/constants'
import getBaseWebpackConfig from './webpack'
import {generateBuildId} from './generate-build-id'
import {writeBuildId} from './write-build-id'
import {isWriteable} from './is-writeable'

const access = promisify(fs.access)
const writeFile = promisify(fs.writeFile)

async function ensureProjectDirectoryIsWriteAble (dir) {
try {
await access(dir, (fs.constants || fs).W_OK)
} catch (err) {
export default async function build (dir, conf = null, lambdas = false) {
if (!await isWriteable(dir)) {
throw new Error('Build directory is not writeable. https://err.sh/zeit/next.js/build-dir-not-writeable')
}
}

export default async function build (dir, conf = null, lambdas = false) {
const config = loadConfig(PHASE_PRODUCTION_BUILD, dir, conf)
const lambdasOption = config.lambdas ? config.lambdas : lambdas
const distDir = join(dir, config.distDir)
const buildId = await generateBuildId(config.generateBuildId, nanoid)
const configs = await Promise.all([
getBaseWebpackConfig(dir, { buildId, isServer: false, config, lambdas: lambdasOption }),
getBaseWebpackConfig(dir, { buildId, isServer: true, config, lambdas: lambdasOption })
])

await ensureProjectDirectoryIsWriteAble(dir)

try {
const configs = await Promise.all([
getBaseWebpackConfig(dir, { buildId, isServer: false, config, lambdas: lambdasOption }),
getBaseWebpackConfig(dir, { buildId, isServer: true, config, lambdas: lambdasOption })
])

await runCompiler(configs)

await writeBuildId(distDir, buildId)
} catch (err) {
console.error(`> Failed to build`)
throw err
}
await runCompiler(configs)
await writeBuildId(distDir, buildId)
}

function runCompiler (compiler) {
function runCompiler (config) {
return new Promise(async (resolve, reject) => {
const webpackCompiler = await webpack(await compiler)
const webpackCompiler = await webpack(config)
shuding marked this conversation as resolved.
Show resolved Hide resolved
webpackCompiler.run((err, stats) => {
if (err) {
console.log({...err})
Expand Down Expand Up @@ -73,8 +57,3 @@ function runCompiler (compiler) {
})
})
}

async function writeBuildId (distDir, buildId) {
const buildIdPath = join(distDir, BUILD_ID_FILE)
await writeFile(buildIdPath, buildId, 'utf8')
}
13 changes: 13 additions & 0 deletions packages/next/build/is-writeable.ts
@@ -0,0 +1,13 @@
import fs from 'fs'
import {promisify} from 'util'

const access = promisify(fs.access)

export async function isWriteable (directory: string): Promise<boolean> {
try {
await access(directory, (fs.constants || fs).W_OK)
return true
} catch (err) {
return false
}
}
11 changes: 11 additions & 0 deletions packages/next/build/write-build-id.ts
@@ -0,0 +1,11 @@
import fs from 'fs'
import {promisify} from 'util'
import {join} from 'path'
import {BUILD_ID_FILE} from 'next-server/constants'

const writeFile = promisify(fs.writeFile)

export async function writeBuildId (distDir: string, buildId: string): Promise<void> {
const buildIdPath = join(distDir, BUILD_ID_FILE)
await writeFile(buildIdPath, buildId, 'utf8')
}