UNPKG

5.4 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../../lib/has-necessary-dependencies.ts"],"names":["requiredTSPackages","file","pkg","requiredLintPackages","hasNecessaryDependencies","baseDir","checkTSDeps","checkESLintDeps","lintDuringBuild","resolved","undefined","resolutions","Map","requiredPackages","missingPackages","filter","p","set","require","resolve","paths","_","length","packagesHuman","map","packagesCli","join","yarnLockFile","isYarn","catch","removalTSMsg","chalk","bold","cyan","removalLintMsg","removalMsg","FatalError","red"],"mappings":"+FAAA,oDACA,0BAEA,yCACA,oDACA,yC,mFAEA,KAAMA,CAAAA,kBAAkB,CAAG,CACzB,CAAEC,IAAI,CAAE,YAAR,CAAsBC,GAAG,CAAE,YAA3B,CADyB,CAEzB,CAAED,IAAI,CAAE,yBAAR,CAAmCC,GAAG,CAAE,cAAxC,CAFyB,CAGzB,CAAED,IAAI,CAAE,wBAAR,CAAkCC,GAAG,CAAE,aAAvC,CAHyB,CAA3B,CAMA,KAAMC,CAAAA,oBAAoB,CAAG,CAC3B,CAAEF,IAAI,CAAE,mBAAR,CAA6BC,GAAG,CAAE,QAAlC,CAD2B,CAE3B,CAAED,IAAI,CAAE,oBAAR,CAA8BC,GAAG,CAAE,oBAAnC,CAF2B,CAA7B,CASO,cAAeE,CAAAA,wBAAf,CACLC,OADK,CAELC,WAFK,CAGLC,eAHK,CAILC,eAAwB,CAAG,KAJtB,CAK2B,CAChC,GAAI,CAACF,WAAD,EAAgB,CAACC,eAArB,CAAsC,CACpC,MAAO,CAAEE,QAAQ,CAAEC,SAAZ,CAAP,CACD,CAED,GAAIC,CAAAA,WAAW,CAAG,GAAIC,CAAAA,GAAJ,EAAlB,CACA,GAAIC,CAAAA,gBAAgB,CAAGN,eAAe,CAClCJ,oBADkC,CAElCH,kBAFJ,CAIA,KAAMc,CAAAA,eAAe,CAAGD,gBAAgB,CAACE,MAAjB,CAAyBC,CAAD,EAAO,CACrD,GAAI,CACFL,WAAW,CAACM,GAAZ,CAAgBD,CAAC,CAACd,GAAlB,CAAuBgB,OAAO,CAACC,OAAR,CAAgBH,CAAC,CAACf,IAAlB,CAAwB,CAAEmB,KAAK,CAAE,CAACf,OAAD,CAAT,CAAxB,CAAvB,EACA,MAAO,MAAP,CACD,CAAC,MAAOgB,CAAP,CAAU,CACV,MAAO,KAAP,CACD,CACF,CAPuB,CAAxB,CASA,GAAIP,eAAe,CAACQ,MAAhB,CAAyB,CAA7B,CAAgC,CAC9B,MAAO,CACLb,QAAQ,CAAEE,WADL,CAAP,CAGD,CAED,KAAMY,CAAAA,aAAa,CAAG,wCAAmBT,eAAe,CAACU,GAAhB,CAAqBR,CAAD,EAAOA,CAAC,CAACd,GAA7B,CAAnB,CAAtB,CACA,KAAMuB,CAAAA,WAAW,CAAGX,eAAe,CAACU,GAAhB,CAAqBR,CAAD,EAAOA,CAAC,CAACd,GAA7B,EAAkCwB,IAAlC,CAAuC,GAAvC,CAApB,CAEA,KAAMC,CAAAA,YAAY,CAAG,eAAKtB,OAAL,CAAc,WAAd,CAArB,CACA,KAAMuB,CAAAA,MAAM,CAAG,KAAM,2BAAWD,YAAX,EAAyBE,KAAzB,CAA+B,IAAM,KAArC,CAArB,CAEA,KAAMC,CAAAA,YAAY,CAChB,OACAC,eAAMC,IAAN,CACE,8DACED,eAAME,IAAN,CAAW,eAAX,CADF,CAEE,kFAHJ,CAFF,CAOA,KAAMC,CAAAA,cAAc,CACjB,MAAD,EACC1B,eAAe,CACX,wJADW,CAEX,uBAAsBuB,eAAMC,IAAN,CAAWC,IAAX,CAAgB,WAAhB,CAA6B,SAHxD,CADF,CAKA,KAAME,CAAAA,UAAU,CAAG7B,WAAW,CAAGwB,YAAH,CAAkBI,cAAhD,CAEA,KAAM,IAAIE,uBAAJ,CACJL,eAAMC,IAAN,CAAWK,GAAX,CACE/B,WAAW,CACN,kGADM,CAEN,kEAHP,EAKE,MALF,CAMEyB,eAAMC,IAAN,CAAY,kBAAiBD,eAAMC,IAAN,CAAWT,aAAX,CAA0B,cAAvD,CANF,CAOE,MAPF,CAQG,KAAIQ,eAAMC,IAAN,CAAWC,IAAX,CACH,CAACL,MAAM,CAAG,gBAAH,CAAsB,wBAA7B,EACE,GADF,CAEEH,WAHC,CAIH,EAZJ,CAaEU,UAbF,CAcE,IAfE,CAAN,CAiBD","sourcesContent":["import chalk from 'chalk'\nimport { join } from 'path'\n\nimport { fileExists } from './file-exists'\nimport { getOxfordCommaList } from './oxford-comma-list'\nimport { FatalError } from './fatal-error'\n\nconst requiredTSPackages = [\n { file: 'typescript', pkg: 'typescript' },\n { file: '@types/react/index.d.ts', pkg: '@types/react' },\n { file: '@types/node/index.d.ts', pkg: '@types/node' },\n]\n\nconst requiredLintPackages = [\n { file: 'eslint/lib/api.js', pkg: 'eslint' },\n { file: 'eslint-config-next', pkg: 'eslint-config-next' },\n]\n\nexport type NecessaryDependencies = {\n resolved: Map<string, string>\n}\n\nexport async function hasNecessaryDependencies(\n baseDir: string,\n checkTSDeps: boolean,\n checkESLintDeps: boolean,\n lintDuringBuild: boolean = false\n): Promise<NecessaryDependencies> {\n if (!checkTSDeps && !checkESLintDeps) {\n return { resolved: undefined! }\n }\n\n let resolutions = new Map<string, string>()\n let requiredPackages = checkESLintDeps\n ? requiredLintPackages\n : requiredTSPackages\n\n const missingPackages = requiredPackages.filter((p) => {\n try {\n resolutions.set(p.pkg, require.resolve(p.file, { paths: [baseDir] }))\n return false\n } catch (_) {\n return true\n }\n })\n\n if (missingPackages.length < 1) {\n return {\n resolved: resolutions,\n }\n }\n\n const packagesHuman = getOxfordCommaList(missingPackages.map((p) => p.pkg))\n const packagesCli = missingPackages.map((p) => p.pkg).join(' ')\n\n const yarnLockFile = join(baseDir, 'yarn.lock')\n const isYarn = await fileExists(yarnLockFile).catch(() => false)\n\n const removalTSMsg =\n '\\n\\n' +\n chalk.bold(\n 'If you are not trying to use TypeScript, please remove the ' +\n chalk.cyan('tsconfig.json') +\n ' file from your package root (and any TypeScript files in your pages directory).'\n )\n const removalLintMsg =\n `\\n\\n` +\n (lintDuringBuild\n ? `If you do not want to run ESLint during builds, disable it in next.config.js. See https://nextjs.org/docs/api-reference/next.config.js/ignoring-eslint`\n : `Once installed, run ${chalk.bold.cyan('next lint')} again.`)\n const removalMsg = checkTSDeps ? removalTSMsg : removalLintMsg\n\n throw new FatalError(\n chalk.bold.red(\n checkTSDeps\n ? `It looks like you're trying to use TypeScript but do not have the required package(s) installed.`\n : `To use ESLint, additional required package(s) must be installed.`\n ) +\n '\\n\\n' +\n chalk.bold(`Please install ${chalk.bold(packagesHuman)} by running:`) +\n '\\n\\n' +\n `\\t${chalk.bold.cyan(\n (isYarn ? 'yarn add --dev' : 'npm install --save-dev') +\n ' ' +\n packagesCli\n )}` +\n removalMsg +\n '\\n'\n )\n}\n"]}
\No newline at end of file