@playlyfe/babel-loader
Version:
babel module loader for webpack
87 lines (63 loc) • 2.41 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 _chalk = _interopRequireDefault(require("chalk"));
var _genFileContentHash = _interopRequireDefault(require("./gen-file-content-hash"));
var _genPkgVersion = _interopRequireDefault(require("./gen-pkg-version"));
var _jsonString = require("../json-string");
var _log = _interopRequireDefault(require("../_log"));
var _default = (0, _memoize2.default)(options => {
const {
babelConfig,
isRelay
} = options;
const perfKey = `
generated cache-identifier
isRelay: '${_chalk.default.bold(isRelay.toString())}
`;
_log.default.time(perfKey);
const identifier = {
envName: babelConfig.envName,
root: babelConfig.root,
presets: mapConfigItems(babelConfig.presets, isRelay, babelConfig.root),
plugins: mapConfigItems(babelConfig.plugins, isRelay, babelConfig.root)
};
_log.default.clearLine();
_log.default.timeEnd(perfKey);
return (0, _jsonString.toJSONString)(identifier);
}, args => JSON.stringify(args));
exports.default = _default;
function mapConfigItems(items, isRelay, root) {
return items.map(item => {
const name = getConfigItemName(item);
if (isRelayPkg(name) && !isRelay) {
// only include relay pkg for relay files
return null;
}
const version = (0, _genPkgVersion.default)(name, root);
const options = Object.assign({}, item._descriptor.options);
if (isRelayPkg(name)) {
(0, _invariant.default)(typeof options === 'object' && options.schema, '[unexpected error] babel-plugin-relay: You should provide schema for relay plugin'); // add schemaVersion
options.schemaVersion = (0, _genFileContentHash.default)(options.schema);
}
return {
name,
version,
options
};
}).filter(Boolean);
}
function getConfigItemName(configItem) {
return configItem._descriptor.name || configItem._descriptor.file.request;
}
function isRelayPkg(pkg) {
// not a good check but ok for now
// we are using only babel-plugin-relay for all relay related
// transformation which contains relay so ok for now
return /relay/u.test(pkg);
}