description and source-codehandlebars-loader = function (source) {
if (this.cacheable) this.cacheable();
var loaderApi = this;
var query = getLoaderConfig(loaderApi);
var runtimePath = query.runtime || require.resolve("handlebars/runtime");
if (!versionCheck(handlebars, require(runtimePath))) {
throw new Error('Handlebars compiler version does not match runtime version');
}
// Possible extensions for partials
var extensions = query.extensions;
if (!extensions) {
extensions = [".handlebars", ".hbs", ""];
}
else if (!Array.isArray(extensions)) {
extensions = extensions.split(/[ ,;]/g);
}
var rootRelative = query.rootRelative;
if (rootRelative == null) {
rootRelative = "./";
}
var foundPartials = {};
var foundHelpers = {};
var foundUnclearStuff = {};
var knownHelpers = {};
var queryKnownHelpers = query.knownHelpers;
if (queryKnownHelpers) {
[].concat(queryKnownHelpers).forEach(function(k) {
knownHelpers[k] = true;
});
}
var inlineRequires = query.inlineRequires;
if (inlineRequires) {
inlineRequires = new RegExp(inlineRequires);
}
var exclude = query.exclude;
if (exclude) {
exclude = new RegExp(exclude);
}
var debug = query.debug;
var hb = handlebars.create();
var JavaScriptCompiler = hb.JavaScriptCompiler;
function MyJavaScriptCompiler() {
JavaScriptCompiler.apply(this, arguments);
}
MyJavaScriptCompiler.prototype = Object.create(JavaScriptCompiler.prototype);
MyJavaScriptCompiler.prototype.compiler = MyJavaScriptCompiler;
MyJavaScriptCompiler.prototype.nameLookup = function(parent, name, type) {
if (debug) {
console.log("nameLookup %s %s %s", parent, name, type);
}
if (type === "partial") {
if (name === '@partial-block') {
// this is a built in partial, no need to require it
return JavaScriptCompiler.prototype.nameLookup.apply(this, arguments);
}
if (foundPartials["$" + name]) {
return "require(" + JSON.stringify(foundPartials["$" + name]) + ")";
}
foundPartials["$" + name] = null;
return JavaScriptCompiler.prototype.nameLookup.apply(this, arguments);
}
else if (type === "helper") {
if (foundHelpers["$" + name]) {
return "__default(require(" + JSON.stringify(foundHelpers["$" + name]) + "))";
}
foundHelpers["$" + name] = null;
return JavaScriptCompiler.prototype.nameLookup.apply(this, arguments);
}
else if (type === "context") {
// This could be a helper too, save it to check it later
if (!foundUnclearStuff["$" + name]) foundUnclearStuff["$" + name] = false;
return JavaScriptCompiler.prototype.nameLookup.apply(this, arguments);
}
else {
return JavaScriptCompiler.prototype.nameLookup.apply(this, arguments);
}
};
if (inlineRequires) {
MyJavaScriptCompiler.prototype.pushString = function(value) {
if (inlineRequires.test(value)) {
this.pushLiteral("require(" + JSON.stringify(value) + ")");
} else {
JavaScriptCompiler.prototype.pushString.call(this, value);
}
};
MyJavaScriptCompiler.prototype.appendToBuffer = function (str) {
// This is a template (stringified HTML) chunk
if (str.indexOf && str.indexOf('"') === 0) {
var replacements = findNestedRequires(str, inlineRequires);
str = fastreplace(str, replacements, function (match) {
return "\" + require(" + JSON.stringify(match) + ") + \"";
});
}
return JavaScriptCompiler.prototype.appendToBuffer.apply(this, arguments);
};
}
hb.JavaScriptCompiler = MyJavaScriptCompiler;
// This is an async loader
var loaderAsyncCallback = this.async();
var firstCompile = true;
var compilationPass = 0;
(function compile() {
if (debug) {
console.log("\nCompilation pass %d", ++compilationPass);
}
function referenceToRequest(ref, type) {
if (/^\$/.test(ref)) {
return ref.substring(1);
}
// Use a relative path for helpers if helper directories are given
// unless automatic relative helper r ...