1'use strict';
2
3var lib = require('./src/lib');
4var _require = require('./src/environment'),
5  Environment = _require.Environment,
6  Template = _require.Template;
7var Loader = require('./src/loader');
8var loaders = require('./src/loaders');
9var precompile = require('./src/precompile');
10var compiler = require('./src/compiler');
11var parser = require('./src/parser');
12var lexer = require('./src/lexer');
13var runtime = require('./src/runtime');
14var nodes = require('./src/nodes');
15var installJinjaCompat = require('./src/jinja-compat');
16
17// A single instance of an environment, since this is so commonly used
18var e;
19function configure(templatesPath, opts) {
20  opts = opts || {};
21  if (lib.isObject(templatesPath)) {
22    opts = templatesPath;
23    templatesPath = null;
24  }
25  var TemplateLoader;
26  if (loaders.FileSystemLoader) {
27    TemplateLoader = new loaders.FileSystemLoader(templatesPath, {
28      watch: opts.watch,
29      noCache: opts.noCache
30    });
31  } else if (loaders.WebLoader) {
32    TemplateLoader = new loaders.WebLoader(templatesPath, {
33      useCache: opts.web && opts.web.useCache,
34      async: opts.web && opts.web.async
35    });
36  }
37  e = new Environment(TemplateLoader, opts);
38  if (opts && opts.express) {
39    e.express(opts.express);
40  }
41  return e;
42}
43module.exports = {
44  Environment: Environment,
45  Template: Template,
46  Loader: Loader,
47  FileSystemLoader: loaders.FileSystemLoader,
48  NodeResolveLoader: loaders.NodeResolveLoader,
49  PrecompiledLoader: loaders.PrecompiledLoader,
50  WebLoader: loaders.WebLoader,
51  compiler: compiler,
52  parser: parser,
53  lexer: lexer,
54  runtime: runtime,
55  lib: lib,
56  nodes: nodes,
57  installJinjaCompat: installJinjaCompat,
58  configure: configure,
59  reset: function reset() {
60    e = undefined;
61  },
62  compile: function compile(src, env, path, eagerCompile) {
63    if (!e) {
64      configure();
65    }
66    return new Template(src, env, path, eagerCompile);
67  },
68  render: function render(name, ctx, cb) {
69    if (!e) {
70      configure();
71    }
72    return e.render(name, ctx, cb);
73  },
74  renderString: function renderString(src, ctx, cb) {
75    if (!e) {
76      configure();
77    }
78    return e.renderString(src, ctx, cb);
79  },
80  precompile: precompile ? precompile.precompile : undefined,
81  precompileString: precompile ? precompile.precompileString : undefined
82};