123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = writeFile;
- var _loaderUtils = require('loader-utils');
- var _loaderUtils2 = _interopRequireDefault(_loaderUtils);
- var _path = require('path');
- var _path2 = _interopRequireDefault(_path);
- var _cacache = require('cacache');
- var _cacache2 = _interopRequireDefault(_cacache);
- var _serializeJavascript = require('serialize-javascript');
- var _serializeJavascript2 = _interopRequireDefault(_serializeJavascript);
- var _package = require('../package.json');
- var _findCacheDir = require('find-cache-dir');
- var _findCacheDir2 = _interopRequireDefault(_findCacheDir);
- var _promisify = require('./utils/promisify');
- var _crypto = require('crypto');
- var _crypto2 = _interopRequireDefault(_crypto);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function writeFile(globalRef, pattern, file) {
- var info = globalRef.info,
- debug = globalRef.debug,
- compilation = globalRef.compilation,
- fileDependencies = globalRef.fileDependencies,
- written = globalRef.written,
- inputFileSystem = globalRef.inputFileSystem,
- copyUnmodified = globalRef.copyUnmodified;
- return (0, _promisify.stat)(inputFileSystem, file.absoluteFrom).then(function (stat) {
- // We don't write empty directories
- if (stat.isDirectory()) {
- return;
- }
- // If this came from a glob, add it to the file watchlist
- if (pattern.fromType === 'glob') {
- fileDependencies.push(file.absoluteFrom);
- }
- info('reading ' + file.absoluteFrom + ' to write to assets');
- return (0, _promisify.readFile)(inputFileSystem, file.absoluteFrom).then(function (content) {
- if (pattern.transform) {
- var transform = function transform(content, absoluteFrom) {
- return pattern.transform(content, absoluteFrom);
- };
- if (pattern.cache) {
- if (!globalRef.cacheDir) {
- globalRef.cacheDir = (0, _findCacheDir2.default)({ name: 'copy-webpack-plugin' });
- }
- var cacheKey = pattern.cache.key ? pattern.cache.key : (0, _serializeJavascript2.default)({
- name: _package.name,
- version: _package.version,
- pattern: pattern,
- hash: _crypto2.default.createHash('md4').update(content).digest('hex')
- });
- return _cacache2.default.get(globalRef.cacheDir, cacheKey).then(function (result) {
- return result.data;
- }, function () {
- return Promise.resolve().then(function () {
- return transform(content, file.absoluteFrom);
- }).then(function (content) {
- return _cacache2.default.put(globalRef.cacheDir, cacheKey, content).then(function () {
- return content;
- });
- });
- });
- }
- content = transform(content, file.absoluteFrom);
- }
- return content;
- }).then(function (content) {
- if (pattern.toType === 'template') {
- info('interpolating template \'' + file.webpackTo + '\' for \'' + file.relativeFrom + '\'');
- // If it doesn't have an extension, remove it from the pattern
- // ie. [name].[ext] or [name][ext] both become [name]
- if (!_path2.default.extname(file.relativeFrom)) {
- file.webpackTo = file.webpackTo.replace(/\.?\[ext\]/g, '');
- }
- file.webpackTo = _loaderUtils2.default.interpolateName({ resourcePath: file.absoluteFrom }, file.webpackTo, {
- content: content,
- regExp: file.webpackToRegExp,
- context: pattern.context
- });
- }
- return content;
- }).then(function (content) {
- if (pattern.transformPath) {
- return Promise.resolve(pattern.transformPath(file.webpackTo, file.absoluteFrom)).then(function (newPath) {
- file.webpackTo = newPath;
- }).then(function () {
- return content;
- });
- }
- return content;
- }).then(function (content) {
- var hash = _loaderUtils2.default.getHashDigest(content);
- if (!copyUnmodified && written[file.absoluteFrom] && written[file.absoluteFrom]['hash'] === hash && written[file.absoluteFrom]['webpackTo'] === file.webpackTo) {
- info('skipping \'' + file.webpackTo + '\', because it hasn\'t changed');
- return;
- } else {
- debug('added ' + hash + ' to written tracking for \'' + file.absoluteFrom + '\'');
- written[file.absoluteFrom] = {
- hash: hash,
- webpackTo: file.webpackTo
- };
- }
- if (compilation.assets[file.webpackTo] && !file.force) {
- info('skipping \'' + file.webpackTo + '\', because it already exists');
- return;
- }
- info('writing \'' + file.webpackTo + '\' to compilation assets from \'' + file.absoluteFrom + '\'');
- compilation.assets[file.webpackTo] = {
- size: function size() {
- return stat.size;
- },
- source: function source() {
- return content;
- }
- };
- });
- });
- }
|