handlebars_assets 0.23.7 → 0.23.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: e2bc7879dd75866e04682ad8519864567e64f518
4
- data.tar.gz: bf5bf564e9e359f8c8eff08ac71bedfc3621c0af
2
+ SHA256:
3
+ metadata.gz: 2c02d89d7678f32df3d9581705a823482d9284e78ad2ce2bdfa08aecb9f4507a
4
+ data.tar.gz: edd1b55719e2bd2c9e8960d1b71b5ac8b8401ddc721e331d82d87ce3b49b549a
5
5
  SHA512:
6
- metadata.gz: 6a6e73d1d76755397a820ca94ce91ee8ef65fbc138af682c694239f9f8eb7aa7c46c964ef1a3c54d1baba594823ea671f9688578d989e9e566ccdd63a4d246d4
7
- data.tar.gz: e08ea18dc1030de76739a59ac3b7b9c7308c37e9796e0565ec5e19bd59251446b28941821f986771b5ca830a7135c86305edd24fee5ec0c3e7c782dc7ac8f0dd
6
+ metadata.gz: ba64683f5c81d4884f3614752ee31a32131e5591439836ec2a2c144d6e7fc05ebd4454228ea96e3eab81616971afd5fdce29ef603a874af1d8704155ed8dd15d
7
+ data.tar.gz: 3e27543648aa054a89c8f80698c04fbc28a64bfc9391dcf333647219871e6b93be6f43c9e5f6e6994e07d03be57607f7a66172a218d3ae11f551235682e2470f
@@ -1,3 +1,15 @@
1
+ ## 0.23.8 (2019-02-24)
2
+
3
+ * Update Handlebars to v4.7.3
4
+
5
+ ## 0.23.7 (2019-11-20)
6
+
7
+ * Update Handlebars to v4.5.3
8
+
9
+ ## 0.23.6 (2019-11-14)
10
+
11
+ * Update Handlebars to v4.5.2
12
+
1
13
  ## 0.23.5 (2019-09-25)
2
14
 
3
15
  * Update Handlebars to v4.3.1
@@ -1,3 +1,3 @@
1
1
  module HandlebarsAssets
2
- VERSION = "0.23.7"
2
+ VERSION = "0.23.8"
3
3
  end
@@ -27,25 +27,25 @@ module CompilerSupport
27
27
  end
28
28
 
29
29
  def hbs_compiled(template_name, source)
30
- compiled_hbs = compile_hbs(source)
30
+ compiled_hbs = compile_hbs(source).strip
31
31
  template_namespace = HandlebarsAssets::Config.template_namespace
32
32
 
33
- unindent <<-END_EXPECTED
34
- (function() {
35
- this.#{template_namespace} || (this.#{template_namespace} = {});
36
- this.#{template_namespace}[#{template_name.dump}] = Handlebars.template(#{compiled_hbs});
37
- return this.#{template_namespace}[#{template_name.dump}];
38
- }).call(this);
33
+ <<-END_EXPECTED
34
+ (function() {
35
+ this.#{template_namespace} || (this.#{template_namespace} = {});
36
+ this.#{template_namespace}[#{template_name.dump}] = Handlebars.template(#{compiled_hbs});
37
+ return this.#{template_namespace}[#{template_name.dump}];
38
+ }).call(this);
39
39
  END_EXPECTED
40
40
  end
41
41
 
42
42
  def hbs_compiled_partial(partial_name, source)
43
43
  compiled_hbs = compile_hbs(source)
44
44
 
45
- unindent <<-END_EXPECTED
46
- (function() {
47
- Handlebars.registerPartial(#{partial_name.dump}, Handlebars.template(#{compiled_hbs}));
48
- }).call(this);
45
+ <<-END_EXPECTED
46
+ (function() {
47
+ Handlebars.registerPartial(#{partial_name.dump}, Handlebars.template(#{compiled_hbs}));
48
+ }).call(this);
49
49
  END_EXPECTED
50
50
  end
51
51
  end
@@ -1,9 +1,9 @@
1
1
  /**!
2
2
 
3
3
  @license
4
- handlebars v4.5.3
4
+ handlebars v4.7.3
5
5
 
6
- Copyright (C) 2011-2017 by Yehuda Katz
6
+ Copyright (C) 2011-2019 by Yehuda Katz
7
7
 
8
8
  Permission is hereby granted, free of charge, to any person obtaining a copy
9
9
  of this software and associated documentation files (the "Software"), to deal
@@ -92,23 +92,23 @@ return /******/ (function(modules) { // webpackBootstrap
92
92
 
93
93
  // Compiler imports
94
94
 
95
- var _handlebarsCompilerAst = __webpack_require__(40);
95
+ var _handlebarsCompilerAst = __webpack_require__(45);
96
96
 
97
97
  var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
98
98
 
99
- var _handlebarsCompilerBase = __webpack_require__(41);
99
+ var _handlebarsCompilerBase = __webpack_require__(46);
100
100
 
101
- var _handlebarsCompilerCompiler = __webpack_require__(46);
101
+ var _handlebarsCompilerCompiler = __webpack_require__(51);
102
102
 
103
- var _handlebarsCompilerJavascriptCompiler = __webpack_require__(49);
103
+ var _handlebarsCompilerJavascriptCompiler = __webpack_require__(52);
104
104
 
105
105
  var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
106
106
 
107
- var _handlebarsCompilerVisitor = __webpack_require__(44);
107
+ var _handlebarsCompilerVisitor = __webpack_require__(49);
108
108
 
109
109
  var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
110
110
 
111
- var _handlebarsNoConflict = __webpack_require__(39);
111
+ var _handlebarsNoConflict = __webpack_require__(44);
112
112
 
113
113
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
114
114
 
@@ -178,7 +178,7 @@ return /******/ (function(modules) { // webpackBootstrap
178
178
  // Each of these augment the Handlebars object. No need to setup here.
179
179
  // (This is done to easily share code between commonjs and browse envs)
180
180
 
181
- var _handlebarsSafeString = __webpack_require__(33);
181
+ var _handlebarsSafeString = __webpack_require__(37);
182
182
 
183
183
  var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
184
184
 
@@ -190,11 +190,11 @@ return /******/ (function(modules) { // webpackBootstrap
190
190
 
191
191
  var Utils = _interopRequireWildcard(_handlebarsUtils);
192
192
 
193
- var _handlebarsRuntime = __webpack_require__(34);
193
+ var _handlebarsRuntime = __webpack_require__(38);
194
194
 
195
195
  var runtime = _interopRequireWildcard(_handlebarsRuntime);
196
196
 
197
- var _handlebarsNoConflict = __webpack_require__(39);
197
+ var _handlebarsNoConflict = __webpack_require__(44);
198
198
 
199
199
  var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
200
200
 
@@ -276,7 +276,9 @@ return /******/ (function(modules) { // webpackBootstrap
276
276
 
277
277
  var _logger2 = _interopRequireDefault(_logger);
278
278
 
279
- var VERSION = '4.5.3';
279
+ var _internalProtoAccess = __webpack_require__(33);
280
+
281
+ var VERSION = '4.7.3';
280
282
  exports.VERSION = VERSION;
281
283
  var COMPILER_REVISION = 8;
282
284
  exports.COMPILER_REVISION = COMPILER_REVISION;
@@ -352,6 +354,13 @@ return /******/ (function(modules) { // webpackBootstrap
352
354
  },
353
355
  unregisterDecorator: function unregisterDecorator(name) {
354
356
  delete this.decorators[name];
357
+ },
358
+ /**
359
+ * Reset the memory of illegal property accesses that have already been logged.
360
+ * @deprecated should only be used in handlebars test-cases
361
+ */
362
+ resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
363
+ _internalProtoAccess.resetLoggedProperties();
355
364
  }
356
365
  };
357
366
 
@@ -375,7 +384,6 @@ return /******/ (function(modules) { // webpackBootstrap
375
384
  exports.createFrame = createFrame;
376
385
  exports.blockParams = blockParams;
377
386
  exports.appendContextPath = appendContextPath;
378
-
379
387
  var escape = {
380
388
  '&': '&amp;',
381
389
  '<': '&lt;',
@@ -499,7 +507,6 @@ return /******/ (function(modules) { // webpackBootstrap
499
507
  var _Object$defineProperty = __webpack_require__(7)['default'];
500
508
 
501
509
  exports.__esModule = true;
502
-
503
510
  var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
504
511
 
505
512
  function Exception(message, node) {
@@ -1047,7 +1054,11 @@ return /******/ (function(modules) { // webpackBootstrap
1047
1054
  if (arguments.length != 2) {
1048
1055
  throw new _exception2['default']('#unless requires exactly one argument');
1049
1056
  }
1050
- return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash });
1057
+ return instance.helpers['if'].call(this, conditional, {
1058
+ fn: options.inverse,
1059
+ inverse: options.fn,
1060
+ hash: options.hash
1061
+ });
1051
1062
  });
1052
1063
  };
1053
1064
 
@@ -1090,22 +1101,19 @@ return /******/ (function(modules) { // webpackBootstrap
1090
1101
  'use strict';
1091
1102
 
1092
1103
  exports.__esModule = true;
1093
- var dangerousPropertyRegex = /^(constructor|__defineGetter__|__defineSetter__|__lookupGetter__|__proto__)$/;
1094
-
1095
- exports.dangerousPropertyRegex = dangerousPropertyRegex;
1096
1104
 
1097
1105
  exports['default'] = function (instance) {
1098
- instance.registerHelper('lookup', function (obj, field) {
1106
+ instance.registerHelper('lookup', function (obj, field, options) {
1099
1107
  if (!obj) {
1108
+ // Note for 5.0: Change to "obj == null" in 5.0
1100
1109
  return obj;
1101
1110
  }
1102
- if (dangerousPropertyRegex.test(String(field)) && !Object.prototype.propertyIsEnumerable.call(obj, field)) {
1103
- return undefined;
1104
- }
1105
- return obj[field];
1111
+ return options.lookupProperty(obj, field);
1106
1112
  });
1107
1113
  };
1108
1114
 
1115
+ module.exports = exports['default'];
1116
+
1109
1117
  /***/ }),
1110
1118
  /* 29 */
1111
1119
  /***/ (function(module, exports, __webpack_require__) {
@@ -1238,8 +1246,8 @@ return /******/ (function(modules) { // webpackBootstrap
1238
1246
 
1239
1247
  if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
1240
1248
  var method = logger.methodMap[level];
1249
+ // eslint-disable-next-line no-console
1241
1250
  if (!console[method]) {
1242
- // eslint-disable-line no-console
1243
1251
  method = 'log';
1244
1252
  }
1245
1253
 
@@ -1257,6 +1265,129 @@ return /******/ (function(modules) { // webpackBootstrap
1257
1265
 
1258
1266
  /***/ }),
1259
1267
  /* 33 */
1268
+ /***/ (function(module, exports, __webpack_require__) {
1269
+
1270
+ 'use strict';
1271
+
1272
+ var _Object$create = __webpack_require__(34)['default'];
1273
+
1274
+ var _Object$keys = __webpack_require__(13)['default'];
1275
+
1276
+ var _interopRequireWildcard = __webpack_require__(3)['default'];
1277
+
1278
+ exports.__esModule = true;
1279
+ exports.createProtoAccessControl = createProtoAccessControl;
1280
+ exports.resultIsAllowed = resultIsAllowed;
1281
+ exports.resetLoggedProperties = resetLoggedProperties;
1282
+
1283
+ var _createNewLookupObject = __webpack_require__(36);
1284
+
1285
+ var _logger = __webpack_require__(32);
1286
+
1287
+ var logger = _interopRequireWildcard(_logger);
1288
+
1289
+ var loggedProperties = _Object$create(null);
1290
+
1291
+ function createProtoAccessControl(runtimeOptions) {
1292
+ var defaultMethodWhiteList = _Object$create(null);
1293
+ defaultMethodWhiteList['constructor'] = false;
1294
+ defaultMethodWhiteList['__defineGetter__'] = false;
1295
+ defaultMethodWhiteList['__defineSetter__'] = false;
1296
+ defaultMethodWhiteList['__lookupGetter__'] = false;
1297
+
1298
+ var defaultPropertyWhiteList = _Object$create(null);
1299
+ // eslint-disable-next-line no-proto
1300
+ defaultPropertyWhiteList['__proto__'] = false;
1301
+
1302
+ return {
1303
+ properties: {
1304
+ whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
1305
+ defaultValue: runtimeOptions.allowProtoPropertiesByDefault
1306
+ },
1307
+ methods: {
1308
+ whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
1309
+ defaultValue: runtimeOptions.allowProtoMethodsByDefault
1310
+ }
1311
+ };
1312
+ }
1313
+
1314
+ function resultIsAllowed(result, protoAccessControl, propertyName) {
1315
+ if (typeof result === 'function') {
1316
+ return checkWhiteList(protoAccessControl.methods, propertyName);
1317
+ } else {
1318
+ return checkWhiteList(protoAccessControl.properties, propertyName);
1319
+ }
1320
+ }
1321
+
1322
+ function checkWhiteList(protoAccessControlForType, propertyName) {
1323
+ if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
1324
+ return protoAccessControlForType.whitelist[propertyName] === true;
1325
+ }
1326
+ if (protoAccessControlForType.defaultValue !== undefined) {
1327
+ return protoAccessControlForType.defaultValue;
1328
+ }
1329
+ logUnexpecedPropertyAccessOnce(propertyName);
1330
+ return false;
1331
+ }
1332
+
1333
+ function logUnexpecedPropertyAccessOnce(propertyName) {
1334
+ if (loggedProperties[propertyName] !== true) {
1335
+ loggedProperties[propertyName] = true;
1336
+ logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
1337
+ }
1338
+ }
1339
+
1340
+ function resetLoggedProperties() {
1341
+ _Object$keys(loggedProperties).forEach(function (propertyName) {
1342
+ delete loggedProperties[propertyName];
1343
+ });
1344
+ }
1345
+
1346
+ /***/ }),
1347
+ /* 34 */
1348
+ /***/ (function(module, exports, __webpack_require__) {
1349
+
1350
+ module.exports = { "default": __webpack_require__(35), __esModule: true };
1351
+
1352
+ /***/ }),
1353
+ /* 35 */
1354
+ /***/ (function(module, exports, __webpack_require__) {
1355
+
1356
+ var $ = __webpack_require__(9);
1357
+ module.exports = function create(P, D){
1358
+ return $.create(P, D);
1359
+ };
1360
+
1361
+ /***/ }),
1362
+ /* 36 */
1363
+ /***/ (function(module, exports, __webpack_require__) {
1364
+
1365
+ 'use strict';
1366
+
1367
+ var _Object$create = __webpack_require__(34)['default'];
1368
+
1369
+ exports.__esModule = true;
1370
+ exports.createNewLookupObject = createNewLookupObject;
1371
+
1372
+ var _utils = __webpack_require__(5);
1373
+
1374
+ /**
1375
+ * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
1376
+ * The resulting object can be used with "object[property]" to check if a property exists
1377
+ * @param {...object} sources a varargs parameter of source objects that will be merged
1378
+ * @returns {object}
1379
+ */
1380
+
1381
+ function createNewLookupObject() {
1382
+ for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
1383
+ sources[_key] = arguments[_key];
1384
+ }
1385
+
1386
+ return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources));
1387
+ }
1388
+
1389
+ /***/ }),
1390
+ /* 37 */
1260
1391
  /***/ (function(module, exports) {
1261
1392
 
1262
1393
  // Build out our basic SafeString type
@@ -1275,12 +1406,14 @@ return /******/ (function(modules) { // webpackBootstrap
1275
1406
  module.exports = exports['default'];
1276
1407
 
1277
1408
  /***/ }),
1278
- /* 34 */
1409
+ /* 38 */
1279
1410
  /***/ (function(module, exports, __webpack_require__) {
1280
1411
 
1281
1412
  'use strict';
1282
1413
 
1283
- var _Object$seal = __webpack_require__(35)['default'];
1414
+ var _Object$seal = __webpack_require__(39)['default'];
1415
+
1416
+ var _Object$keys = __webpack_require__(13)['default'];
1284
1417
 
1285
1418
  var _interopRequireWildcard = __webpack_require__(3)['default'];
1286
1419
 
@@ -1306,6 +1439,10 @@ return /******/ (function(modules) { // webpackBootstrap
1306
1439
 
1307
1440
  var _helpers = __webpack_require__(10);
1308
1441
 
1442
+ var _internalWrapHelper = __webpack_require__(43);
1443
+
1444
+ var _internalProtoAccess = __webpack_require__(33);
1445
+
1309
1446
  function checkRevision(compilerInfo) {
1310
1447
  var compilerRevision = compilerInfo && compilerInfo[0] || 1,
1311
1448
  currentRevision = _base.COMPILER_REVISION;
@@ -1325,7 +1462,6 @@ return /******/ (function(modules) { // webpackBootstrap
1325
1462
  }
1326
1463
 
1327
1464
  function template(templateSpec, env) {
1328
-
1329
1465
  /* istanbul ignore next */
1330
1466
  if (!env) {
1331
1467
  throw new _exception2['default']('No environment passed to template');
@@ -1352,13 +1488,16 @@ return /******/ (function(modules) { // webpackBootstrap
1352
1488
  }
1353
1489
  partial = env.VM.resolvePartial.call(this, partial, context, options);
1354
1490
 
1355
- var optionsWithHooks = Utils.extend({}, options, { hooks: this.hooks });
1491
+ var extendedOptions = Utils.extend({}, options, {
1492
+ hooks: this.hooks,
1493
+ protoAccessControl: this.protoAccessControl
1494
+ });
1356
1495
 
1357
- var result = env.VM.invokePartial.call(this, partial, context, optionsWithHooks);
1496
+ var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
1358
1497
 
1359
1498
  if (result == null && env.compile) {
1360
1499
  options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
1361
- result = options.partials[options.name](context, optionsWithHooks);
1500
+ result = options.partials[options.name](context, extendedOptions);
1362
1501
  }
1363
1502
  if (result != null) {
1364
1503
  if (options.indent) {
@@ -1382,14 +1521,31 @@ return /******/ (function(modules) { // webpackBootstrap
1382
1521
  var container = {
1383
1522
  strict: function strict(obj, name, loc) {
1384
1523
  if (!obj || !(name in obj)) {
1385
- throw new _exception2['default']('"' + name + '" not defined in ' + obj, { loc: loc });
1524
+ throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
1525
+ loc: loc
1526
+ });
1386
1527
  }
1387
1528
  return obj[name];
1388
1529
  },
1530
+ lookupProperty: function lookupProperty(parent, propertyName) {
1531
+ var result = parent[propertyName];
1532
+ if (result == null) {
1533
+ return result;
1534
+ }
1535
+ if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
1536
+ return result;
1537
+ }
1538
+
1539
+ if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
1540
+ return result;
1541
+ }
1542
+ return undefined;
1543
+ },
1389
1544
  lookup: function lookup(depths, name) {
1390
1545
  var len = depths.length;
1391
1546
  for (var i = 0; i < len; i++) {
1392
- if (depths[i] && depths[i][name] != null) {
1547
+ var result = depths[i] && container.lookupProperty(depths[i], name);
1548
+ if (result != null) {
1393
1549
  return depths[i][name];
1394
1550
  }
1395
1551
  }
@@ -1425,6 +1581,15 @@ return /******/ (function(modules) { // webpackBootstrap
1425
1581
  }
1426
1582
  return value;
1427
1583
  },
1584
+ mergeIfNeeded: function mergeIfNeeded(param, common) {
1585
+ var obj = param || common;
1586
+
1587
+ if (param && common && param !== common) {
1588
+ obj = Utils.extend({}, common, param);
1589
+ }
1590
+
1591
+ return obj;
1592
+ },
1428
1593
  // An empty object to use as replacement for null-contexts
1429
1594
  nullContext: _Object$seal({}),
1430
1595
 
@@ -1454,28 +1619,35 @@ return /******/ (function(modules) { // webpackBootstrap
1454
1619
  function main(context /*, options*/) {
1455
1620
  return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
1456
1621
  }
1622
+
1457
1623
  main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
1458
1624
  return main(context, options);
1459
1625
  }
1626
+
1460
1627
  ret.isTop = true;
1461
1628
 
1462
1629
  ret._setup = function (options) {
1463
1630
  if (!options.partial) {
1464
- container.helpers = Utils.extend({}, env.helpers, options.helpers);
1631
+ var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
1632
+ wrapHelpersToPassLookupProperty(mergedHelpers, container);
1633
+ container.helpers = mergedHelpers;
1465
1634
 
1466
1635
  if (templateSpec.usePartial) {
1467
- container.partials = Utils.extend({}, env.partials, options.partials);
1636
+ // Use mergeIfNeeded here to prevent compiling global partials multiple times
1637
+ container.partials = container.mergeIfNeeded(options.partials, env.partials);
1468
1638
  }
1469
1639
  if (templateSpec.usePartial || templateSpec.useDecorators) {
1470
1640
  container.decorators = Utils.extend({}, env.decorators, options.decorators);
1471
1641
  }
1472
1642
 
1473
1643
  container.hooks = {};
1644
+ container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);
1474
1645
 
1475
1646
  var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
1476
1647
  _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
1477
1648
  _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
1478
1649
  } else {
1650
+ container.protoAccessControl = options.protoAccessControl; // internal option
1479
1651
  container.helpers = options.helpers;
1480
1652
  container.partials = options.partials;
1481
1653
  container.decorators = options.decorators;
@@ -1596,25 +1768,39 @@ return /******/ (function(modules) { // webpackBootstrap
1596
1768
  return prog;
1597
1769
  }
1598
1770
 
1771
+ function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
1772
+ _Object$keys(mergedHelpers).forEach(function (helperName) {
1773
+ var helper = mergedHelpers[helperName];
1774
+ mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
1775
+ });
1776
+ }
1777
+
1778
+ function passLookupPropertyOption(helper, container) {
1779
+ var lookupProperty = container.lookupProperty;
1780
+ return _internalWrapHelper.wrapHelper(helper, function (options) {
1781
+ return Utils.extend({ lookupProperty: lookupProperty }, options);
1782
+ });
1783
+ }
1784
+
1599
1785
  /***/ }),
1600
- /* 35 */
1786
+ /* 39 */
1601
1787
  /***/ (function(module, exports, __webpack_require__) {
1602
1788
 
1603
- module.exports = { "default": __webpack_require__(36), __esModule: true };
1789
+ module.exports = { "default": __webpack_require__(40), __esModule: true };
1604
1790
 
1605
1791
  /***/ }),
1606
- /* 36 */
1792
+ /* 40 */
1607
1793
  /***/ (function(module, exports, __webpack_require__) {
1608
1794
 
1609
- __webpack_require__(37);
1795
+ __webpack_require__(41);
1610
1796
  module.exports = __webpack_require__(21).Object.seal;
1611
1797
 
1612
1798
  /***/ }),
1613
- /* 37 */
1799
+ /* 41 */
1614
1800
  /***/ (function(module, exports, __webpack_require__) {
1615
1801
 
1616
1802
  // 19.1.2.17 Object.seal(O)
1617
- var isObject = __webpack_require__(38);
1803
+ var isObject = __webpack_require__(42);
1618
1804
 
1619
1805
  __webpack_require__(18)('seal', function($seal){
1620
1806
  return function seal(it){
@@ -1623,7 +1809,7 @@ return /******/ (function(modules) { // webpackBootstrap
1623
1809
  });
1624
1810
 
1625
1811
  /***/ }),
1626
- /* 38 */
1812
+ /* 42 */
1627
1813
  /***/ (function(module, exports) {
1628
1814
 
1629
1815
  module.exports = function(it){
@@ -1631,12 +1817,34 @@ return /******/ (function(modules) { // webpackBootstrap
1631
1817
  };
1632
1818
 
1633
1819
  /***/ }),
1634
- /* 39 */
1820
+ /* 43 */
1635
1821
  /***/ (function(module, exports) {
1636
1822
 
1637
- /* WEBPACK VAR INJECTION */(function(global) {/* global window */
1638
1823
  'use strict';
1639
1824
 
1825
+ exports.__esModule = true;
1826
+ exports.wrapHelper = wrapHelper;
1827
+
1828
+ function wrapHelper(helper, transformOptionsFn) {
1829
+ if (typeof helper !== 'function') {
1830
+ // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
1831
+ // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
1832
+ return helper;
1833
+ }
1834
+ var wrapper = function wrapper() /* dynamic arguments */{
1835
+ var options = arguments[arguments.length - 1];
1836
+ arguments[arguments.length - 1] = transformOptionsFn(options);
1837
+ return helper.apply(this, arguments);
1838
+ };
1839
+ return wrapper;
1840
+ }
1841
+
1842
+ /***/ }),
1843
+ /* 44 */
1844
+ /***/ (function(module, exports) {
1845
+
1846
+ /* WEBPACK VAR INJECTION */(function(global) {'use strict';
1847
+
1640
1848
  exports.__esModule = true;
1641
1849
 
1642
1850
  exports['default'] = function (Handlebars) {
@@ -1656,7 +1864,7 @@ return /******/ (function(modules) { // webpackBootstrap
1656
1864
  /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))
1657
1865
 
1658
1866
  /***/ }),
1659
- /* 40 */
1867
+ /* 45 */
1660
1868
  /***/ (function(module, exports) {
1661
1869
 
1662
1870
  'use strict';
@@ -1691,7 +1899,7 @@ return /******/ (function(modules) { // webpackBootstrap
1691
1899
  module.exports = exports['default'];
1692
1900
 
1693
1901
  /***/ }),
1694
- /* 41 */
1902
+ /* 46 */
1695
1903
  /***/ (function(module, exports, __webpack_require__) {
1696
1904
 
1697
1905
  'use strict';
@@ -1704,15 +1912,15 @@ return /******/ (function(modules) { // webpackBootstrap
1704
1912
  exports.parseWithoutProcessing = parseWithoutProcessing;
1705
1913
  exports.parse = parse;
1706
1914
 
1707
- var _parser = __webpack_require__(42);
1915
+ var _parser = __webpack_require__(47);
1708
1916
 
1709
1917
  var _parser2 = _interopRequireDefault(_parser);
1710
1918
 
1711
- var _whitespaceControl = __webpack_require__(43);
1919
+ var _whitespaceControl = __webpack_require__(48);
1712
1920
 
1713
1921
  var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
1714
1922
 
1715
- var _helpers = __webpack_require__(45);
1923
+ var _helpers = __webpack_require__(50);
1716
1924
 
1717
1925
  var Helpers = _interopRequireWildcard(_helpers);
1718
1926
 
@@ -1749,7 +1957,7 @@ return /******/ (function(modules) { // webpackBootstrap
1749
1957
  }
1750
1958
 
1751
1959
  /***/ }),
1752
- /* 42 */
1960
+ /* 47 */
1753
1961
  /***/ (function(module, exports) {
1754
1962
 
1755
1963
  // File ignored in coverage tests via setting in .istanbul.yml
@@ -2490,7 +2698,7 @@ return /******/ (function(modules) { // webpackBootstrap
2490
2698
  module.exports = exports["default"];
2491
2699
 
2492
2700
  /***/ }),
2493
- /* 43 */
2701
+ /* 48 */
2494
2702
  /***/ (function(module, exports, __webpack_require__) {
2495
2703
 
2496
2704
  'use strict';
@@ -2499,7 +2707,7 @@ return /******/ (function(modules) { // webpackBootstrap
2499
2707
 
2500
2708
  exports.__esModule = true;
2501
2709
 
2502
- var _visitor = __webpack_require__(44);
2710
+ var _visitor = __webpack_require__(49);
2503
2711
 
2504
2712
  var _visitor2 = _interopRequireDefault(_visitor);
2505
2713
 
@@ -2714,7 +2922,7 @@ return /******/ (function(modules) { // webpackBootstrap
2714
2922
  module.exports = exports['default'];
2715
2923
 
2716
2924
  /***/ }),
2717
- /* 44 */
2925
+ /* 49 */
2718
2926
  /***/ (function(module, exports, __webpack_require__) {
2719
2927
 
2720
2928
  'use strict';
@@ -2857,7 +3065,7 @@ return /******/ (function(modules) { // webpackBootstrap
2857
3065
  module.exports = exports['default'];
2858
3066
 
2859
3067
  /***/ }),
2860
- /* 45 */
3068
+ /* 50 */
2861
3069
  /***/ (function(module, exports, __webpack_require__) {
2862
3070
 
2863
3071
  'use strict';
@@ -3088,14 +3296,14 @@ return /******/ (function(modules) { // webpackBootstrap
3088
3296
  }
3089
3297
 
3090
3298
  /***/ }),
3091
- /* 46 */
3299
+ /* 51 */
3092
3300
  /***/ (function(module, exports, __webpack_require__) {
3093
3301
 
3094
3302
  /* eslint-disable new-cap */
3095
3303
 
3096
3304
  'use strict';
3097
3305
 
3098
- var _Object$create = __webpack_require__(47)['default'];
3306
+ var _Object$create = __webpack_require__(34)['default'];
3099
3307
 
3100
3308
  var _interopRequireDefault = __webpack_require__(1)['default'];
3101
3309
 
@@ -3110,7 +3318,7 @@ return /******/ (function(modules) { // webpackBootstrap
3110
3318
 
3111
3319
  var _utils = __webpack_require__(5);
3112
3320
 
3113
- var _ast = __webpack_require__(40);
3321
+ var _ast = __webpack_require__(45);
3114
3322
 
3115
3323
  var _ast2 = _interopRequireDefault(_ast);
3116
3324
 
@@ -3165,14 +3373,14 @@ return /******/ (function(modules) { // webpackBootstrap
3165
3373
  options.blockParams = options.blockParams || [];
3166
3374
 
3167
3375
  options.knownHelpers = _utils.extend(_Object$create(null), {
3168
- 'helperMissing': true,
3169
- 'blockHelperMissing': true,
3170
- 'each': true,
3376
+ helperMissing: true,
3377
+ blockHelperMissing: true,
3378
+ each: true,
3171
3379
  'if': true,
3172
- 'unless': true,
3380
+ unless: true,
3173
3381
  'with': true,
3174
- 'log': true,
3175
- 'lookup': true
3382
+ log: true,
3383
+ lookup: true
3176
3384
  }, options.knownHelpers);
3177
3385
 
3178
3386
  return this.accept(program);
@@ -3439,7 +3647,11 @@ return /******/ (function(modules) { // webpackBootstrap
3439
3647
 
3440
3648
  // HELPERS
3441
3649
  opcode: function opcode(name) {
3442
- this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc });
3650
+ this.opcodes.push({
3651
+ opcode: name,
3652
+ args: slice.call(arguments, 1),
3653
+ loc: this.sourceNode[0].loc
3654
+ });
3443
3655
  },
3444
3656
 
3445
3657
  addDepth: function addDepth(depth) {
@@ -3655,22 +3867,7 @@ return /******/ (function(modules) { // webpackBootstrap
3655
3867
  }
3656
3868
 
3657
3869
  /***/ }),
3658
- /* 47 */
3659
- /***/ (function(module, exports, __webpack_require__) {
3660
-
3661
- module.exports = { "default": __webpack_require__(48), __esModule: true };
3662
-
3663
- /***/ }),
3664
- /* 48 */
3665
- /***/ (function(module, exports, __webpack_require__) {
3666
-
3667
- var $ = __webpack_require__(9);
3668
- module.exports = function create(P, D){
3669
- return $.create(P, D);
3670
- };
3671
-
3672
- /***/ }),
3673
- /* 49 */
3870
+ /* 52 */
3674
3871
  /***/ (function(module, exports, __webpack_require__) {
3675
3872
 
3676
3873
  'use strict';
@@ -3689,12 +3886,10 @@ return /******/ (function(modules) { // webpackBootstrap
3689
3886
 
3690
3887
  var _utils = __webpack_require__(5);
3691
3888
 
3692
- var _codeGen = __webpack_require__(50);
3889
+ var _codeGen = __webpack_require__(53);
3693
3890
 
3694
3891
  var _codeGen2 = _interopRequireDefault(_codeGen);
3695
3892
 
3696
- var _helpersLookup = __webpack_require__(28);
3697
-
3698
3893
  function Literal(value) {
3699
3894
  this.value = value;
3700
3895
  }
@@ -3704,20 +3899,8 @@ return /******/ (function(modules) { // webpackBootstrap
3704
3899
  JavaScriptCompiler.prototype = {
3705
3900
  // PUBLIC API: You can override these methods in a subclass to provide
3706
3901
  // alternative compiled forms for name lookup and buffering semantics
3707
- nameLookup: function nameLookup(parent, name /* , type*/) {
3708
- if (_helpersLookup.dangerousPropertyRegex.test(name)) {
3709
- var isEnumerable = [this.aliasable('container.propertyIsEnumerable'), '.call(', parent, ',', JSON.stringify(name), ')'];
3710
- return ['(', isEnumerable, '?', _actualLookup(), ' : undefined)'];
3711
- }
3712
- return _actualLookup();
3713
-
3714
- function _actualLookup() {
3715
- if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) {
3716
- return [parent, '.', name];
3717
- } else {
3718
- return [parent, '[', JSON.stringify(name), ']'];
3719
- }
3720
- }
3902
+ nameLookup: function nameLookup(parent, name /*, type */) {
3903
+ return this.internalNameLookup(parent, name);
3721
3904
  },
3722
3905
  depthedLookup: function depthedLookup(name) {
3723
3906
  return [this.aliasable('container.lookup'), '(depths, "', name, '")'];
@@ -3753,6 +3936,12 @@ return /******/ (function(modules) { // webpackBootstrap
3753
3936
  return this.quotedString('');
3754
3937
  },
3755
3938
  // END PUBLIC API
3939
+ internalNameLookup: function internalNameLookup(parent, name) {
3940
+ this.lookupPropertyFunctionIsUsed = true;
3941
+ return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];
3942
+ },
3943
+
3944
+ lookupPropertyFunctionIsUsed: false,
3756
3945
 
3757
3946
  compile: function compile(environment, options, context, asObject) {
3758
3947
  this.environment = environment;
@@ -3811,7 +4000,7 @@ return /******/ (function(modules) { // webpackBootstrap
3811
4000
  if (!this.decorators.isEmpty()) {
3812
4001
  this.useDecorators = true;
3813
4002
 
3814
- this.decorators.prepend('var decorators = container.decorators;\n');
4003
+ this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']);
3815
4004
  this.decorators.push('return fn;');
3816
4005
 
3817
4006
  if (asObject) {
@@ -3924,6 +4113,10 @@ return /******/ (function(modules) { // webpackBootstrap
3924
4113
  }
3925
4114
  });
3926
4115
 
4116
+ if (this.lookupPropertyFunctionIsUsed) {
4117
+ varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();
4118
+ }
4119
+
3927
4120
  var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
3928
4121
 
3929
4122
  if (this.useBlockParams || this.useDepths) {
@@ -4002,6 +4195,10 @@ return /******/ (function(modules) { // webpackBootstrap
4002
4195
  return this.source.merge();
4003
4196
  },
4004
4197
 
4198
+ lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {
4199
+ return '\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n '.trim();
4200
+ },
4201
+
4005
4202
  // [blockValue]
4006
4203
  //
4007
4204
  // On stack, before: hash, inverse, program, value
@@ -4804,6 +5001,9 @@ return /******/ (function(modules) { // webpackBootstrap
4804
5001
  }
4805
5002
  })();
4806
5003
 
5004
+ /**
5005
+ * @deprecated May be removed in the next major version
5006
+ */
4807
5007
  JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
4808
5008
  return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
4809
5009
  };
@@ -4831,7 +5031,7 @@ return /******/ (function(modules) { // webpackBootstrap
4831
5031
  module.exports = exports['default'];
4832
5032
 
4833
5033
  /***/ }),
4834
- /* 50 */
5034
+ /* 53 */
4835
5035
  /***/ (function(module, exports, __webpack_require__) {
4836
5036
 
4837
5037
  /* global define */
@@ -5007,4 +5207,4 @@ return /******/ (function(modules) { // webpackBootstrap
5007
5207
  /***/ })
5008
5208
  /******/ ])
5009
5209
  });
5010
- ;
5210
+ ;