| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- 'use strict';
- const concat = require('../utils').concat;
- function isRelative (module) {
- return module.startsWith('./') || module.startsWith('../');
- }
- function formatFileList (files) {
- const length = files.length;
- if (!length) return '';
- return ` in ${files[0]}${files[1] ? `, ${files[1]}` : ''}${length > 2 ? ` and ${length - 2} other${length === 3 ? '' : 's'}` : ''}`;
- }
- function formatGroup (group) {
- const files = group.errors.map(e => e.file).filter(Boolean);
- return `* ${group.module}${formatFileList(files)}`;
- }
- function forgetToInstall (missingDependencies) {
- const moduleNames = missingDependencies.map(missingDependency => missingDependency.module);
- if (missingDependencies.length === 1) {
- return `To install it, you can run: npm install --save ${moduleNames.join(' ')}`;
- }
- return `To install them, you can run: npm install --save ${moduleNames.join(' ')}`;
- }
- function dependenciesNotFound (dependencies) {
- if (dependencies.length === 0) return;
- return concat(
- dependencies.length === 1 ? 'This dependency was not found:' : 'These dependencies were not found:',
- '',
- dependencies.map(formatGroup),
- '',
- forgetToInstall(dependencies)
- );
- }
- function relativeModulesNotFound (modules) {
- if (modules.length === 0) return;
- return concat(
- modules.length === 1 ? 'This relative module was not found:' : 'These relative modules were not found:',
- '',
- modules.map(formatGroup)
- );
- }
- function groupModules (errors) {
- const missingModule = new Map();
- errors.forEach((error) => {
- if (!missingModule.has(error.module)) {
- missingModule.set(error.module, [])
- }
- missingModule.get(error.module).push(error);
- });
- return Array.from(missingModule.keys()).map(module => ({
- module: module,
- relative: isRelative(module),
- errors: missingModule.get(module),
- }));
- }
- function formatErrors (errors) {
- if (errors.length === 0) {
- return [];
- }
- const groups = groupModules(errors);
- const dependencies = groups.filter(group => !group.relative);
- const relativeModules = groups.filter(group => group.relative);
- return concat(
- dependenciesNotFound(dependencies),
- dependencies.length && relativeModules.length ? ['', ''] : null,
- relativeModulesNotFound(relativeModules)
- );
- }
- function format (errors) {
- return formatErrors(errors.filter((e) => (
- e.type === 'module-not-found'
- )));
- }
- module.exports = format;
|