base.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { createFrame, extend, toString } from './utils';
  2. import Exception from './exception';
  3. import { registerDefaultHelpers } from './helpers';
  4. import { registerDefaultDecorators } from './decorators';
  5. import logger from './logger';
  6. import { resetLoggedProperties } from './internal/proto-access';
  7. export const VERSION = '4.7.6';
  8. export const COMPILER_REVISION = 8;
  9. export const LAST_COMPATIBLE_COMPILER_REVISION = 7;
  10. export const REVISION_CHANGES = {
  11. 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
  12. 2: '== 1.0.0-rc.3',
  13. 3: '== 1.0.0-rc.4',
  14. 4: '== 1.x.x',
  15. 5: '== 2.0.0-alpha.x',
  16. 6: '>= 2.0.0-beta.1',
  17. 7: '>= 4.0.0 <4.3.0',
  18. 8: '>= 4.3.0'
  19. };
  20. const objectType = '[object Object]';
  21. export function HandlebarsEnvironment(helpers, partials, decorators) {
  22. this.helpers = helpers || {};
  23. this.partials = partials || {};
  24. this.decorators = decorators || {};
  25. registerDefaultHelpers(this);
  26. registerDefaultDecorators(this);
  27. }
  28. HandlebarsEnvironment.prototype = {
  29. constructor: HandlebarsEnvironment,
  30. logger: logger,
  31. log: logger.log,
  32. registerHelper: function(name, fn) {
  33. if (toString.call(name) === objectType) {
  34. if (fn) {
  35. throw new Exception('Arg not supported with multiple helpers');
  36. }
  37. extend(this.helpers, name);
  38. } else {
  39. this.helpers[name] = fn;
  40. }
  41. },
  42. unregisterHelper: function(name) {
  43. delete this.helpers[name];
  44. },
  45. registerPartial: function(name, partial) {
  46. if (toString.call(name) === objectType) {
  47. extend(this.partials, name);
  48. } else {
  49. if (typeof partial === 'undefined') {
  50. throw new Exception(
  51. `Attempting to register a partial called "${name}" as undefined`
  52. );
  53. }
  54. this.partials[name] = partial;
  55. }
  56. },
  57. unregisterPartial: function(name) {
  58. delete this.partials[name];
  59. },
  60. registerDecorator: function(name, fn) {
  61. if (toString.call(name) === objectType) {
  62. if (fn) {
  63. throw new Exception('Arg not supported with multiple decorators');
  64. }
  65. extend(this.decorators, name);
  66. } else {
  67. this.decorators[name] = fn;
  68. }
  69. },
  70. unregisterDecorator: function(name) {
  71. delete this.decorators[name];
  72. },
  73. /**
  74. * Reset the memory of illegal property accesses that have already been logged.
  75. * @deprecated should only be used in handlebars test-cases
  76. */
  77. resetLoggedPropertyAccesses() {
  78. resetLoggedProperties();
  79. }
  80. };
  81. export let log = logger.log;
  82. export { createFrame, logger };