aem-clientlib-webpack-plugin
Version:
A webpack plugin to generate clientlib structure based a clientlib.config.js file
94 lines (65 loc) • 3.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
require('babel-core/register');
require('babel-polyfill');
var _crypto = require('crypto');
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _filesize = require('filesize');
var _filesize2 = _interopRequireDefault(_filesize);
var _fsExtra = require('fs-extra');
var _fsExtra2 = _interopRequireDefault(_fsExtra);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _loggerFactory = require('./logger-factory');
var _loggerFactory2 = _interopRequireDefault(_loggerFactory);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var assetSourceHashIndex = {};
var isMemoryFileSystem = function isMemoryFileSystem(outputFileSystem) {
return outputFileSystem.constructor.name === 'MemoryFileSystem';
};
class Builder {
constructor(_options) {
this.options = _options;
this.logger = _loggerFactory2.default.getInstance(this.options.logLevel || 'info');
}
build(compilation, compiler) {
var _this = this;
this.logger.verbose(`writeCompiledFiles ${new Date().toLocaleTimeString()}`);
this.options.build = _lodash2.default.assign({}, this.options.build);
var outputPath = _lodash2.default.has(compiler, 'options.output.path') && compiler.options.output.path !== '/' ? compiler.options.output.path : _path2.default.resolve(process.cwd(), 'build');
if (!isMemoryFileSystem(compiler.outputFileSystem) && !this.options.build.force) {
this.logger.verbose(`----- ${!isMemoryFileSystem(compiler.outputFileSystem)} - ${!this.options.build.force}`);
return false;
}
_lodash2.default.forEach(compilation.assets, function (asset, assetPath) {
var outputFilePath = _path2.default.isAbsolute(assetPath) ? assetPath : _path2.default.join(outputPath, assetPath);
var relativeOutputPath = _path2.default.relative(process.cwd(), outputFilePath);
var targetDefinition = `asset: ${_chalk2.default.cyan(`./${assetPath}`)}; destination: ${_chalk2.default.cyan(`./${relativeOutputPath}`)}`;
var assetSize = asset.size();
var assetSource = Array.isArray(asset.source()) ? asset.source().join('\n') : asset.source();
if (_this.options.build.useHashIndex) {
var assetSourceHash = (0, _crypto.createHash)('sha256').update(assetSource).digest('hex');
if (assetSourceHashIndex[assetPath] && assetSourceHashIndex[assetPath] === assetSourceHash) {
_this.logger.verbose(targetDefinition, _chalk2.default.yellow('[skipped; matched hash index]'));
return;
}
assetSourceHashIndex[assetPath] = assetSourceHash;
}
_fsExtra2.default.ensureDirSync(_path2.default.dirname(relativeOutputPath));
try {
_fsExtra2.default.writeFileSync(relativeOutputPath.split('?')[0], assetSource);
_this.logger.verbose(targetDefinition, _chalk2.default.green('[written]'), _chalk2.default.magenta(`(${(0, _filesize2.default)(assetSize)})`));
} catch (exp) {
_this.logger.verbose(targetDefinition, _chalk2.default.bold.red('[is not written]'), _chalk2.default.magenta(`(${(0, _filesize2.default)(assetSize)})`));
_this.logger.verbose(_chalk2.default.bold.bgRed('Exception:'), _chalk2.default.bold.red(exp.message));
}
});
return true;
}
}
exports.default = Builder;