react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / dist / cjs / handlebars / runtime.js
80713 views"use strict";1var Utils = require("./utils");2var Exception = require("./exception")["default"];3var COMPILER_REVISION = require("./base").COMPILER_REVISION;4var REVISION_CHANGES = require("./base").REVISION_CHANGES;5var createFrame = require("./base").createFrame;67function checkRevision(compilerInfo) {8var compilerRevision = compilerInfo && compilerInfo[0] || 1,9currentRevision = COMPILER_REVISION;1011if (compilerRevision !== currentRevision) {12if (compilerRevision < currentRevision) {13var runtimeVersions = REVISION_CHANGES[currentRevision],14compilerVersions = REVISION_CHANGES[compilerRevision];15throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+16"Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");17} else {18// Use the embedded version info since the runtime doesn't know about this revision yet19throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+20"Please update your runtime to a newer version ("+compilerInfo[1]+").");21}22}23}2425exports.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial2627function template(templateSpec, env) {28/* istanbul ignore next */29if (!env) {30throw new Exception("No environment passed to template");31}32if (!templateSpec || !templateSpec.main) {33throw new Exception('Unknown template object: ' + typeof templateSpec);34}3536// Note: Using env.VM references rather than local var references throughout this section to allow37// for external users to override these as psuedo-supported APIs.38env.VM.checkRevision(templateSpec.compiler);3940var invokePartialWrapper = function(partial, context, options) {41if (options.hash) {42context = Utils.extend({}, context, options.hash);43}4445partial = env.VM.resolvePartial.call(this, partial, context, options);46var result = env.VM.invokePartial.call(this, partial, context, options);4748if (result == null && env.compile) {49options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);50result = options.partials[options.name](context, options);51}52if (result != null) {53if (options.indent) {54var lines = result.split('\n');55for (var i = 0, l = lines.length; i < l; i++) {56if (!lines[i] && i + 1 === l) {57break;58}5960lines[i] = options.indent + lines[i];61}62result = lines.join('\n');63}64return result;65} else {66throw new Exception("The partial " + options.name + " could not be compiled when running in runtime-only mode");67}68};6970// Just add water71var container = {72strict: function(obj, name) {73if (!(name in obj)) {74throw new Exception('"' + name + '" not defined in ' + obj);75}76return obj[name];77},78lookup: function(depths, name) {79var len = depths.length;80for (var i = 0; i < len; i++) {81if (depths[i] && depths[i][name] != null) {82return depths[i][name];83}84}85},86lambda: function(current, context) {87return typeof current === 'function' ? current.call(context) : current;88},8990escapeExpression: Utils.escapeExpression,91invokePartial: invokePartialWrapper,9293fn: function(i) {94return templateSpec[i];95},9697programs: [],98program: function(i, data, declaredBlockParams, blockParams, depths) {99var programWrapper = this.programs[i],100fn = this.fn(i);101if (data || depths || blockParams || declaredBlockParams) {102programWrapper = program(this, i, fn, data, declaredBlockParams, blockParams, depths);103} else if (!programWrapper) {104programWrapper = this.programs[i] = program(this, i, fn);105}106return programWrapper;107},108109data: function(data, depth) {110while (data && depth--) {111data = data._parent;112}113return data;114},115merge: function(param, common) {116var ret = param || common;117118if (param && common && (param !== common)) {119ret = Utils.extend({}, common, param);120}121122return ret;123},124125noop: env.VM.noop,126compilerInfo: templateSpec.compiler127};128129var ret = function(context, options) {130options = options || {};131var data = options.data;132133ret._setup(options);134if (!options.partial && templateSpec.useData) {135data = initData(context, data);136}137var depths,138blockParams = templateSpec.useBlockParams ? [] : undefined;139if (templateSpec.useDepths) {140depths = options.depths ? [context].concat(options.depths) : [context];141}142143return templateSpec.main.call(container, context, container.helpers, container.partials, data, blockParams, depths);144};145ret.isTop = true;146147ret._setup = function(options) {148if (!options.partial) {149container.helpers = container.merge(options.helpers, env.helpers);150151if (templateSpec.usePartial) {152container.partials = container.merge(options.partials, env.partials);153}154} else {155container.helpers = options.helpers;156container.partials = options.partials;157}158};159160ret._child = function(i, data, blockParams, depths) {161if (templateSpec.useBlockParams && !blockParams) {162throw new Exception('must pass block params');163}164if (templateSpec.useDepths && !depths) {165throw new Exception('must pass parent depths');166}167168return program(container, i, templateSpec[i], data, 0, blockParams, depths);169};170return ret;171}172173exports.template = template;function program(container, i, fn, data, declaredBlockParams, blockParams, depths) {174var prog = function(context, options) {175options = options || {};176177return fn.call(container,178context,179container.helpers, container.partials,180options.data || data,181blockParams && [options.blockParams].concat(blockParams),182depths && [context].concat(depths));183};184prog.program = i;185prog.depth = depths ? depths.length : 0;186prog.blockParams = declaredBlockParams || 0;187return prog;188}189190exports.program = program;function resolvePartial(partial, context, options) {191if (!partial) {192partial = options.partials[options.name];193} else if (!partial.call && !options.name) {194// This is a dynamic partial that returned a string195options.name = partial;196partial = options.partials[partial];197}198return partial;199}200201exports.resolvePartial = resolvePartial;function invokePartial(partial, context, options) {202options.partial = true;203204if(partial === undefined) {205throw new Exception("The partial " + options.name + " could not be found");206} else if(partial instanceof Function) {207return partial(context, options);208}209}210211exports.invokePartial = invokePartial;function noop() { return ""; }212213exports.noop = noop;function initData(context, data) {214if (!data || !('root' in data)) {215data = data ? createFrame(data) : {};216data.root = context;217}218return data;219}220221