<commit_before>/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author <NAME> @sokra
*/
var path = require("path");
var fs = require("fs");
var loaderUtils = require("loader-utils");
var jsesc = require("jsesc");
var NodeTemplatePlugin = require("webpack/lib/node/NodeTemplatePlugin");
var NodeTargetPlugin = require("webpack/lib/node/NodeTargetPlugin");
var LibraryTemplatePlugin = require("webpack/lib/LibraryTemplatePlugin");
var SingleEntryPlugin = require("webpack/lib/SingleEntryPlugin");
var LimitChunkCountPlugin = require("webpack/lib/optimize/LimitChunkCountPlugin");

var NS = fs.realpathSync(__dirname);

module.exports = function(source) {
	if (process.env.NODE_ENV !== 'development') return source

	// We need to always require hotModuleReplacement.js for HMR to work in a wierd scenario
	// where only one css file is imported. Otherwise HMR breaks when modules are disposed.
	return `${source}
require(${loaderUtils.stringifyRequest(this, path.join(__dirname, "hotModuleReplacement.js"))})`;
};

module.exports.pitch = function(request) {
	var self = this;
	var remainingRequest = request;
	if(this.cacheable) this.cacheable();
	var query = loaderUtils.getOptions(this) || {};
	var loaders = this.loaders.slice(this.loaderIndex + 1);
	this.addDependency(this.resourcePath);
	// We already in child compiler, return empty bundle
	if(this[NS] === undefined) {
		throw new Error(
			'"extract-text-webpack-plugin" loader is used without the corresponding plugin, ' +
			'refer to https://github.com/webpack/extract-text-webpack-plugin for the usage example'
		);
	} else if(this[NS] === false) {
		return "";
	} else if(this[NS](null, query)) {
		if(query.omit) {
			this.loaderIndex += +query.omit + 1;
			request = request.split("!").slice(+query.omit).join("!");
			loaders = loaders.slice(+query.omit);
		}
		var resultSource;
		if(query.remove) {
			resultSource = "// removed by extract-text-webpack-plugin";
		} else {
			resultSource = undefined;
		}

		var childFilename = "extract-text-webpack-plugin-output-filename"; // eslint-disable-line no-path-concat
		var publicPath = typeof query.publicPath === "string" ? query.publicPath : this._compilation.outputOptions.publicPath;
		var outputOptions = {
			filename: childFilename,
			publicPath: publicPath
		};
		var childCompiler = this._compilation.createChildCompiler("extract-text-webpack-plugin", outputOptions);
		childCompiler.apply(new NodeTemplatePlugin(outputOptions));
		childCompiler.apply(new LibraryTemplatePlugin(null, "commonjs2"));
		childCompiler.apply(new NodeTargetPlugin());
		childCompiler.apply(new SingleEntryPlugin(this.context, "!!" + request));
		childCompiler.apply(new LimitChunkCountPlugin({ maxChunks: 1 }));
		var subCache = "subcache " + NS + " " + request; // eslint-disable-line no-path-concat
		childCompiler.plugin("compilation", function(compilation) {
			if(compilation.cache) {
				if(!compilation.cache[subCache])
					compilation.cache[subCache] = {};
				compilation.cache = compilation.cache[subCache];
			}
		});
		// We set loaderContext[NS] = false to indicate we already in
		// a child compiler so we don't spawn another child compilers from there.
		childCompiler.plugin("this-compilation", function(compilation) {
			compilation.plugin("normal-module-loader", function(loaderContext, module) {
				loaderContext[NS] = false;
				if (module.request === request) {
					module.loaders = loaders.map(function(loader) {
						return {
							loader: loader.path,
							options: loader.options
						};
					});
				}
			});
		});

		var source;
		childCompiler.plugin("after-compile", function(compilation, callback) {
			source = compilation.assets[childFilename] && compilation.assets[childFilename].source();

			// Remove all chunk assets
			compilation.chunks.forEach(function(chunk) {
				chunk.files.forEach(function(file) {
					delete compilation.assets[file];
				});
			});

			callback();
		});
		var callback = this.async();
		childCompiler.runAsChild(function(err, entries, compilation) {
			if(err) return callback(err);

			if(compilation.errors.length > 0) {
				return callback(compilation.errors[0]);
			}
			compilation.fileDependencies.forEach(function(dep) {
				this.addDependency(dep);
			}, this);
			compilation.contextDependencies.forEach(function(dep) {
				this.addContextDependency(dep);
			}, this);
			if(!source) {
				return callback(new Error("Didn't get a result from child compiler"));
			}
			try {
				var text = this.exec(source, request);
				if(typeof text === "string")
					text = [[0, text]];
				text.forEach(function(item) {
					var id = item[0];
					compilation.modules.forEach(function(module) {
						if(module.id === id)
							item[0] = module.identifier();
					});
				});
				this[NS](text, query);
				if(typeof resultSource !== "undefined") {
					if (text.locals) {
						resultSource += "\nmodule.exports = " + JSON.stringify(text.locals) + ";";
					}

					// module.hot.data is undefined on initial load, and an object in hot updates.
					//
					// All we need is a date that changes during dev, to trigger a reload since
					// hashes generated based on the file contents are what trigger HMR.
					if (process.env.NODE_ENV === 'development') {
						resultSource += `
if (module.hot) {
	module.hot.accept();
	if (module.hot.data) {
		var neverUsed = ${+new Date()}
		require(${loaderUtils.stringifyRequest(this, path.join(__dirname, "hotModuleReplacement.js"))})("${publicPath}", "%%extracted-file%%");
	}
}`;
					}
				}
			} catch(e) {
				return callback(e);
			}

			if(resultSource)
				callback(null, resultSource);
			else
				callback();
		}.bind(this));
	}
};
<commit_msg>fix($loader): handle weird edge case when using vue-loader<commit_after>/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author <NAME> @sokra
*/
var path = require("path");
var fs = require("fs");
var loaderUtils = require("loader-utils");
var jsesc = require("jsesc");
var NodeTemplatePlugin = require("webpack/lib/node/NodeTemplatePlugin");
var NodeTargetPlugin = require("webpack/lib/node/NodeTargetPlugin");
var LibraryTemplatePlugin = require("webpack/lib/LibraryTemplatePlugin");
var SingleEntryPlugin = require("webpack/lib/SingleEntryPlugin");
var LimitChunkCountPlugin = require("webpack/lib/optimize/LimitChunkCountPlugin");

var NS = fs.realpathSync(__dirname);

module.exports = function(source) {
	if (process.env.NODE_ENV !== 'development') return source

	// We need to always require hotModuleReplacement.js for HMR to work in a wierd scenario
	// where only one css file is imported. Otherwise HMR breaks when modules are disposed.
	return `
require(${loaderUtils.stringifyRequest(this, path.join(__dirname, "hotModuleReplacement.js"))})
${source}`;
};


module.exports.pitch = function(request) {
	var self = this;
	var remainingRequest = request;
	if(this.cacheable) this.cacheable();
	var query = loaderUtils.getOptions(this) || {};
	var loaders = this.loaders.slice(this.loaderIndex + 1);
	this.addDependency(this.resourcePath);
	// We already in child compiler, return empty bundle
	if(this[NS] === undefined) {
		throw new Error(
			'"extract-text-webpack-plugin" loader is used without the corresponding plugin, ' +
			'refer to https://github.com/webpack/extract-text-webpack-plugin for the usage example'
		);
	} else if(this[NS] === false) {
		return "";
	} else if(this[NS](null, query)) {
		if(query.omit) {
			this.loaderIndex += +query.omit + 1;
			request = request.split("!").slice(+query.omit).join("!");
			loaders = loaders.slice(+query.omit);
		}
		var resultSource;
		if(query.remove) {
			resultSource = "// removed by extract-text-webpack-plugin";
		} else {
			resultSource = undefined;
		}

		var childFilename = "extract-text-webpack-plugin-output-filename"; // eslint-disable-line no-path-concat
		var publicPath = typeof query.publicPath === "string" ? query.publicPath : this._compilation.outputOptions.publicPath;
		var outputOptions = {
			filename: childFilename,
			publicPath: publicPath
		};
		var childCompiler = this._compilation.createChildCompiler("extract-text-webpack-plugin", outputOptions);
		childCompiler.apply(new NodeTemplatePlugin(outputOptions));
		childCompiler.apply(new LibraryTemplatePlugin(null, "commonjs2"));
		childCompiler.apply(new NodeTargetPlugin());
		childCompiler.apply(new SingleEntryPlugin(this.context, "!!" + request));
		childCompiler.apply(new LimitChunkCountPlugin({ maxChunks: 1 }));
		var subCache = "subcache " + NS + " " + request; // eslint-disable-line no-path-concat
		childCompiler.plugin("compilation", function(compilation) {
			if(compilation.cache) {
				if(!compilation.cache[subCache])
					compilation.cache[subCache] = {};
				compilation.cache = compilation.cache[subCache];
			}
		});
		// We set loaderContext[NS] = false to indicate we already in
		// a child compiler so we don't spawn another child compilers from there.
		childCompiler.plugin("this-compilation", function(compilation) {
			compilation.plugin("normal-module-loader", function(loaderContext, module) {
				loaderContext[NS] = false;
				if (module.request === request) {
					module.loaders = loaders.map(function(loader) {
						return {
							loader: loader.path,
							options: loader.options
						};
					});
				}
			});
		});

		var source;
		childCompiler.plugin("after-compile", function(compilation, callback) {
			source = compilation.assets[childFilename] && compilation.assets[childFilename].source();

			// Remove all chunk assets
			compilation.chunks.forEach(function(chunk) {
				chunk.files.forEach(function(file) {
					delete compilation.assets[file];
				});
			});

			callback();
		});
		var callback = this.async();
		childCompiler.runAsChild(function(err, entries, compilation) {
			if(err) return callback(err);

			if(compilation.errors.length > 0) {
				return callback(compilation.errors[0]);
			}
			compilation.fileDependencies.forEach(function(dep) {
				this.addDependency(dep);
			}, this);
			compilation.contextDependencies.forEach(function(dep) {
				this.addContextDependency(dep);
			}, this);
			if(!source) {
				return callback(new Error("Didn't get a result from child compiler"));
			}
			try {
				var text = this.exec(source, request);
				if(typeof text === "string")
					text = [[0, text]];
				text.forEach(function(item) {
					var id = item[0];
					compilation.modules.forEach(function(module) {
						if(module.id === id)
							item[0] = module.identifier();
					});
				});
				this[NS](text, query);
				if(typeof resultSource !== "undefined") {
					if (text.locals) {
						resultSource += "\nmodule.exports = " + JSON.stringify(text.locals) + ";";
					}

					// module.hot.data is undefined on initial load, and an object in hot updates.
					//
					// All we need is a date that changes during dev, to trigger a reload since
					// hashes generated based on the file contents are what trigger HMR.
					if (process.env.NODE_ENV === 'development') {
						resultSource += `
if (module.hot) {
	module.hot.accept();
	if (module.hot.data) {
		var neverUsed = ${+new Date()}
		require(${loaderUtils.stringifyRequest(this, path.join(__dirname, "hotModuleReplacement.js"))})("${publicPath}", "%%extracted-file%%");
	}
}`;
					}
				}
			} catch(e) {
				return callback(e);
			}

			if(resultSource)
				callback(null, resultSource);
			else
				callback();
		}.bind(this));
	}
};

{'fraction_non_alphanumeric': 0.14425684542034817, 'fraction_numerical': 0.0015746653836059838, 'mean_word_length': 4.033905768383971, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6659944', 'n_tokens_mistral': 3980, 'n_tokens_neox': 3388, 'n_words': 759}