import fs from 'fs-extra' ; import chalk from 'chalk' ; import path from 'path' ; import { BuildFailedError } from '@fab/cli' ; export async function preflightChecks ( dir ) { const next_config_path = `${ dir }/next.config.js` ; if ( ! ( await fs . pathExists ( next_config_path ) ) ) { throw new BuildFailedError ( `next.config.js doesn't exist!
      You must have a ${ chalk . yellow ( 'next.config.js' ) } file in order to specify ${ chalk . yellow ( `target: 'serverless'` ) }
    ` ) ; } const next_config_at_path = require ( next_config_path ) ; const next_config = typeof next_config_at_path === 'function' ? next_config_at_path ( '' , { } ) : next_config_at_path ; if ( next_config . target !== 'serverless' ) { throw new BuildFailedError ( `Not serverless build
      NextJS project needs to be set to ${ chalk . yellow ( 'target: serverless' ) }
      You'll need to update your ${ chalk . yellow ( 'next.config.js' ) } file. 
      (https://fab.dev/guides/known-project-types#nextjs-9-dynamic-serverless)
    ` ) ; } const notBuilt = ( reason ) => { throw new BuildFailedError ( `${ reason }
      The path may be incorrect, or you haven't run 'npm run build' on this project yet.
    ` ) ; } ; const next_dir_name = next_config . distDir || '.next' ; const next_dir = path . join ( dir , next_dir_name ) ; if ( ! ( await fs . pathExists ( next_dir ) ) ) { notBuilt ( `Directory ${ chalk . yellow ( path . relative ( process . cwd ( ) , next_dir ) ) } doesn't exist!` ) ; } const manifest_path = path . join ( next_dir , 'build-manifest.json' ) ; if ( ! ( await fs . pathExists ( manifest_path ) ) ) { notBuilt ( `Missing build manifest in ${ chalk . yellow ( path . relative ( process . cwd ( ) , manifest_path ) ) }` ) ; } const asset_prefix = next_config . assetPrefix || '' ; return { next_dir_name , next_dir , asset_prefix } ; }