react / wstein / node_modules / jest-cli / node_modules / istanbul / node_modules / handlebars / dist / amd / handlebars / runtime.js
80713 viewsdefine(1["./utils","./exception","./base","exports"],2function(__dependency1__, __dependency2__, __dependency3__, __exports__) {3"use strict";4var Utils = __dependency1__;5var Exception = __dependency2__["default"];6var COMPILER_REVISION = __dependency3__.COMPILER_REVISION;7var REVISION_CHANGES = __dependency3__.REVISION_CHANGES;8var createFrame = __dependency3__.createFrame;910function checkRevision(compilerInfo) {11var compilerRevision = compilerInfo && compilerInfo[0] || 1,12currentRevision = COMPILER_REVISION;1314if (compilerRevision !== currentRevision) {15if (compilerRevision < currentRevision) {16var runtimeVersions = REVISION_CHANGES[currentRevision],17compilerVersions = REVISION_CHANGES[compilerRevision];18throw new Exception("Template was precompiled with an older version of Handlebars than the current runtime. "+19"Please update your precompiler to a newer version ("+runtimeVersions+") or downgrade your runtime to an older version ("+compilerVersions+").");20} else {21// Use the embedded version info since the runtime doesn't know about this revision yet22throw new Exception("Template was precompiled with a newer version of Handlebars than the current runtime. "+23"Please update your runtime to a newer version ("+compilerInfo[1]+").");24}25}26}2728__exports__.checkRevision = checkRevision;// TODO: Remove this line and break up compilePartial2930function template(templateSpec, env) {31/* istanbul ignore next */32if (!env) {33throw new Exception("No environment passed to template");34}35if (!templateSpec || !templateSpec.main) {36throw new Exception('Unknown template object: ' + typeof templateSpec);37}3839// Note: Using env.VM references rather than local var references throughout this section to allow40// for external users to override these as psuedo-supported APIs.41env.VM.checkRevision(templateSpec.compiler);4243var invokePartialWrapper = function(partial, context, options) {44if (options.hash) {45context = Utils.extend({}, context, options.hash);46}4748partial = env.VM.resolvePartial.call(this, partial, context, options);49var result = env.VM.invokePartial.call(this, partial, context, options);5051if (result == null && env.compile) {52options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);53result = options.partials[options.name](context, options);54}55if (result != null) {56if (options.indent) {57var lines = result.split('\n');58for (var i = 0, l = lines.length; i < l; i++) {59if (!lines[i] && i + 1 === l) {60break;61}6263lines[i] = options.indent + lines[i];64}65result = lines.join('\n');66}67return result;68} else {69throw new Exception("The partial " + options.name + " could not be compiled when running in runtime-only mode");70}71};7273// Just add water74var container = {75strict: function(obj, name) {76if (!(name in obj)) {77throw new Exception('"' + name + '" not defined in ' + obj);78}79return obj[name];80},81lookup: function(depths, name) {82var len = depths.length;83for (var i = 0; i < len; i++) {84if (depths[i] && depths[i][name] != null) {85return depths[i][name];86}87}88},89lambda: function(current, context) {90return typeof current === 'function' ? current.call(context) : current;91},9293escapeExpression: Utils.escapeExpression,94invokePartial: invokePartialWrapper,9596fn: function(i) {97return templateSpec[i];98},99100programs: [],101program: function(i, data, declaredBlockParams, blockParams, depths) {102var programWrapper = this.programs[i],103fn = this.fn(i);104if (data || depths || blockParams || declaredBlockParams) {105programWrapper = program(this, i, fn, data, declaredBlockParams, blockParams, depths);106} else if (!programWrapper) {107programWrapper = this.programs[i] = program(this, i, fn);108}109return programWrapper;110},111112data: function(data, depth) {113while (data && depth--) {114data = data._parent;115}116return data;117},118merge: function(param, common) {119var ret = param || common;120121if (param && common && (param !== common)) {122ret = Utils.extend({}, common, param);123}124125return ret;126},127128noop: env.VM.noop,129compilerInfo: templateSpec.compiler130};131132var ret = function(context, options) {133options = options || {};134var data = options.data;135136ret._setup(options);137if (!options.partial && templateSpec.useData) {138data = initData(context, data);139}140var depths,141blockParams = templateSpec.useBlockParams ? [] : undefined;142if (templateSpec.useDepths) {143depths = options.depths ? [context].concat(options.depths) : [context];144}145146return templateSpec.main.call(container, context, container.helpers, container.partials, data, blockParams, depths);147};148ret.isTop = true;149150ret._setup = function(options) {151if (!options.partial) {152container.helpers = container.merge(options.helpers, env.helpers);153154if (templateSpec.usePartial) {155container.partials = container.merge(options.partials, env.partials);156}157} else {158container.helpers = options.helpers;159container.partials = options.partials;160}161};162163ret._child = function(i, data, blockParams, depths) {164if (templateSpec.useBlockParams && !blockParams) {165throw new Exception('must pass block params');166}167if (templateSpec.useDepths && !depths) {168throw new Exception('must pass parent depths');169}170171return program(container, i, templateSpec[i], data, 0, blockParams, depths);172};173return ret;174}175176__exports__.template = template;function program(container, i, fn, data, declaredBlockParams, blockParams, depths) {177var prog = function(context, options) {178options = options || {};179180return fn.call(container,181context,182container.helpers, container.partials,183options.data || data,184blockParams && [options.blockParams].concat(blockParams),185depths && [context].concat(depths));186};187prog.program = i;188prog.depth = depths ? depths.length : 0;189prog.blockParams = declaredBlockParams || 0;190return prog;191}192193__exports__.program = program;function resolvePartial(partial, context, options) {194if (!partial) {195partial = options.partials[options.name];196} else if (!partial.call && !options.name) {197// This is a dynamic partial that returned a string198options.name = partial;199partial = options.partials[partial];200}201return partial;202}203204__exports__.resolvePartial = resolvePartial;function invokePartial(partial, context, options) {205options.partial = true;206207if(partial === undefined) {208throw new Exception("The partial " + options.name + " could not be found");209} else if(partial instanceof Function) {210return partial(context, options);211}212}213214__exports__.invokePartial = invokePartial;function noop() { return ""; }215216__exports__.noop = noop;function initData(context, data) {217if (!data || !('root' in data)) {218data = data ? createFrame(data) : {};219data.root = context;220}221return data;222}223});224225