| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 | "use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports.default = preProcessPattern;var _path = _interopRequireDefault(require("path"));var _isGlob = _interopRequireDefault(require("is-glob"));var _globParent = _interopRequireDefault(require("glob-parent"));var _normalize = _interopRequireDefault(require("./utils/normalize"));var _isTemplateLike = _interopRequireDefault(require("./utils/isTemplateLike"));var _isObject = _interopRequireDefault(require("./utils/isObject"));var _promisify = require("./utils/promisify");function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }/* eslint-disable no-param-reassign */function preProcessPattern(globalRef, pattern) {  const {    logger,    context,    inputFileSystem,    fileDependencies,    contextDependencies,    compilation  } = globalRef;  pattern = typeof pattern === 'string' ? {    from: pattern  } : Object.assign({}, pattern);  pattern.to = pattern.to || '';  pattern.context = pattern.context || context;  if (!_path.default.isAbsolute(pattern.context)) {    pattern.context = _path.default.join(context, pattern.context);  }  const isFromGlobPatten = (0, _isObject.default)(pattern.from) && pattern.from.glob || pattern.globOptions; // Todo remove this in next major  const isToDirectory = _path.default.extname(pattern.to) === '' || pattern.to.slice(-1) === _path.default.sep; // Normalize paths  pattern.from = isFromGlobPatten ? pattern.from : _path.default.normalize(pattern.from);  pattern.context = _path.default.normalize(pattern.context);  pattern.to = _path.default.normalize(pattern.to);  pattern.ignore = globalRef.ignore.concat(pattern.ignore || []);  logger.debug(`processing from: '${pattern.from}' to: '${pattern.to}'`);  switch (true) {    // if toType already exists    case !!pattern.toType:      break;    case (0, _isTemplateLike.default)(pattern.to):      pattern.toType = 'template';      break;    case isToDirectory:      pattern.toType = 'dir';      break;    default:      pattern.toType = 'file';  } // If we know it's a glob, then bail early  if (isFromGlobPatten) {    logger.debug(`determined '${pattern.absoluteFrom}' is a glob`);    pattern.fromType = 'glob';    const globOptions = Object.assign({}, pattern.globOptions ? pattern.globOptions : pattern.from);    delete globOptions.glob;    pattern.absoluteFrom = _path.default.resolve(pattern.context, pattern.globOptions ? pattern.from : pattern.from.glob);    pattern.glob = (0, _normalize.default)(pattern.context, pattern.globOptions ? pattern.from : pattern.from.glob);    pattern.globOptions = globOptions;    return Promise.resolve(pattern);  }  if (_path.default.isAbsolute(pattern.from)) {    pattern.absoluteFrom = pattern.from;  } else {    pattern.absoluteFrom = _path.default.resolve(pattern.context, pattern.from);  }  logger.debug(`determined '${pattern.from}' to be read from '${pattern.absoluteFrom}'`);  const noStatsHandler = () => {    // If from doesn't appear to be a glob, then log a warning    if ((0, _isGlob.default)(pattern.from) || pattern.from.includes('*')) {      logger.debug(`determined '${pattern.absoluteFrom}' is a glob`);      pattern.fromType = 'glob';      pattern.glob = (0, _normalize.default)(pattern.context, pattern.from); // We need to add context directory as dependencies to avoid problems when new files added in directories      // when we already in watch mode and this directories are not in context dependencies      // `glob-parent` always return `/` we need normalize path      contextDependencies.add(_path.default.normalize((0, _globParent.default)(pattern.absoluteFrom)));    } else {      const newWarning = new Error(`unable to locate '${pattern.from}' at '${pattern.absoluteFrom}'`);      const hasWarning = compilation.warnings.some( // eslint-disable-next-line no-shadow      warning => warning.message === newWarning.message); // Only display the same message once      if (!hasWarning) {        logger.warn(newWarning.message);        compilation.warnings.push(newWarning);      }      pattern.fromType = 'nonexistent';    }  };  logger.debug(`getting stats for '${pattern.absoluteFrom}' to determinate 'fromType'`);  return (0, _promisify.stat)(inputFileSystem, pattern.absoluteFrom).catch(() => noStatsHandler()).then(stats => {    if (!stats) {      noStatsHandler();      return pattern;    }    if (stats.isDirectory()) {      logger.debug(`determined '${pattern.absoluteFrom}' is a directory`);      contextDependencies.add(pattern.absoluteFrom);      pattern.fromType = 'dir';      pattern.context = pattern.absoluteFrom;      pattern.glob = (0, _normalize.default)(pattern.absoluteFrom, '**/*');      pattern.absoluteFrom = _path.default.join(pattern.absoluteFrom, '**/*');      pattern.globOptions = {        dot: true      };    } else if (stats.isFile()) {      logger.debug(`determined '${pattern.absoluteFrom}' is a file`);      fileDependencies.add(pattern.absoluteFrom);      pattern.stats = stats;      pattern.fromType = 'file';      pattern.context = _path.default.dirname(pattern.absoluteFrom);      pattern.glob = (0, _normalize.default)(pattern.absoluteFrom);      pattern.globOptions = {        dot: true      };    } else if (!pattern.fromType) {      logger.warn(`unrecognized file type for ${pattern.from}`);    }    return pattern;  });}
 |