dit
This commit is contained in:
Vendored
+139
@@ -0,0 +1,139 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
|
||||
var _fs = _interopRequireDefault(require("fs"));
|
||||
|
||||
var _path = _interopRequireDefault(require("path"));
|
||||
|
||||
var _lodash = _interopRequireDefault(require("lodash"));
|
||||
|
||||
var _hasIndex = _interopRequireDefault(require("./hasIndex"));
|
||||
|
||||
var _validateTargetDirectory = _interopRequireDefault(require("./validateTargetDirectory"));
|
||||
|
||||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
||||
|
||||
const hasNoExtension = fileName => {
|
||||
const matches = fileName.match(/\./g);
|
||||
return !matches;
|
||||
};
|
||||
|
||||
const hasMultipleExtensions = fileName => {
|
||||
const matches = fileName.match(/\./g);
|
||||
return matches && matches.length > 1;
|
||||
};
|
||||
|
||||
const isSafeName = fileName => {
|
||||
return /^[_a-z][\w.]*$/i.test(fileName);
|
||||
};
|
||||
|
||||
const stripExtension = fileName => {
|
||||
const pos = fileName.lastIndexOf('.');
|
||||
|
||||
if (pos === -1) {
|
||||
return fileName;
|
||||
}
|
||||
|
||||
return fileName.slice(0, Math.max(0, pos));
|
||||
};
|
||||
|
||||
const removeDuplicates = (files, preferredExtension) => {
|
||||
return _lodash.default.filter(files, fileName => {
|
||||
const withoutExtension = stripExtension(fileName);
|
||||
const mainAlternative = withoutExtension + '.' + preferredExtension;
|
||||
|
||||
if (mainAlternative === fileName) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return !_lodash.default.includes(files, mainAlternative);
|
||||
});
|
||||
};
|
||||
|
||||
const removeIgnoredFiles = function (files) {
|
||||
let ignorePatterns = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
||||
|
||||
if (ignorePatterns.length === 0) {
|
||||
return files;
|
||||
}
|
||||
|
||||
const patterns = ignorePatterns.map(pattern => {
|
||||
if (_lodash.default.startsWith(pattern, '/') && _lodash.default.endsWith(pattern, '/')) {
|
||||
const patternWithoutSlashes = pattern.slice(1, -1);
|
||||
return new RegExp(patternWithoutSlashes);
|
||||
}
|
||||
|
||||
return new RegExp(pattern);
|
||||
});
|
||||
return _lodash.default.filter(files, fileName => {
|
||||
let pattern;
|
||||
|
||||
for (pattern of patterns) {
|
||||
if (fileName.match(pattern) !== null) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
};
|
||||
|
||||
var _default = function _default(directoryPath) {
|
||||
let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
||||
|
||||
if (!(0, _validateTargetDirectory.default)(directoryPath, options)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const _options$extensions = options.extensions,
|
||||
extensions = _options$extensions === void 0 ? ['js'] : _options$extensions,
|
||||
_options$config = options.config,
|
||||
config = _options$config === void 0 ? {} : _options$config,
|
||||
_options$ignoreDirect = options.ignoreDirectories,
|
||||
ignoreDirectories = _options$ignoreDirect === void 0 ? false : _options$ignoreDirect;
|
||||
let children;
|
||||
children = _fs.default.readdirSync(directoryPath);
|
||||
children = _lodash.default.filter(children, fileName => {
|
||||
const absolutePath = _path.default.resolve(directoryPath, fileName);
|
||||
|
||||
const isDirectory = _fs.default.statSync(absolutePath).isDirectory();
|
||||
|
||||
if (!isSafeName(fileName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasNoExtension(fileName) && !isDirectory) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hasMultipleExtensions(fileName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (_lodash.default.startsWith(fileName, options.outputFile || 'index.js')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!isDirectory && !extensions.some(extension => {
|
||||
return _lodash.default.endsWith(fileName, '.' + extension);
|
||||
})) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (isDirectory && (!(0, _hasIndex.default)(absolutePath, options) || ignoreDirectories)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
children = removeDuplicates(children, extensions[0]);
|
||||
children = removeIgnoredFiles(children, config.ignore);
|
||||
return children.sort();
|
||||
};
|
||||
|
||||
exports.default = _default;
|
||||
//# sourceMappingURL=readDirectory.js.map
|
||||
Reference in New Issue
Block a user