@playlyfe/babel-loader
Version:
babel module loader for webpack
91 lines (69 loc) • 2.32 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _memoize2 = _interopRequireDefault(require("lodash/memoize"));
var _invariant = _interopRequireDefault(require("invariant"));
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
var _findUp = _interopRequireDefault(require("find-up"));
var _isBuiltinModule = _interopRequireDefault(require("is-builtin-module"));
var _genHash = _interopRequireDefault(require("./gen-hash"));
var _findFileImports = _interopRequireDefault(require("./find-file-imports"));
var _path = _interopRequireDefault(require("path"));
var _fsExtra = require("fs-extra");
const genPkgVersion = (0, _memoize2.default)((pkg, cwd) => {
const pkgPath = (0, _resolveFrom.default)(cwd, pkg);
let version = null;
if (!pkgPath) {
throw pkgMissingError(pkg);
}
if (isNodeModule(pkgPath)) {
// eslint-disable-next-line no-use-before-define
version = getNodeModuleVersion(pkgPath);
} else {
version = getLocalFileVersion(pkgPath);
}
return version;
}, (a, b) => `${a}-${b}`);
var _default = genPkgVersion;
exports.default = _default;
const getNodeModuleVersion = (0, _memoize2.default)(pkgPath => {
if ((0, _isBuiltinModule.default)(pkgPath)) {
return getCurrentNodeVersion();
}
const {
version
} = readPkgUp(pkgPath);
return version;
});
function getLocalFileVersion(filePath) {
const {
code,
imports
} = (0, _findFileImports.default)(filePath);
return {
imports: imports.reduce((acc, pkg) => {
acc[pkg] = genPkgVersion(pkg, _path.default.dirname(filePath));
return acc;
}, {}),
hash: (0, _genHash.default)(code)
};
}
function pkgMissingError(pkg) {
return new Error(`couldn't find package '${pkg}'`);
}
function isNodeModule(pkgPath) {
return /node_modules/u.test(pkgPath) || (0, _isBuiltinModule.default)(pkgPath);
}
function readPkgUp(cwd) {
const pkgJSONPath = _findUp.default.sync('package.json', {
cwd
});
(0, _invariant.default)(pkgJSONPath, `[unexpected error] pakage.json not found for '${cwd}'`);
return (0, _fsExtra.readJSONSync)(pkgJSONPath);
}
function getCurrentNodeVersion() {
return process.version;
}