express-hbs 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +2 -2
  2. package/lib/hbs.js +7 -1
  3. package/package.json +16 -12
  4. package/.editorconfig +0 -8
  5. package/.github/workflows/publish.yml +0 -73
  6. package/.github/workflows/test.yml +0 -48
  7. package/.jsbeautifyrc +0 -17
  8. package/.nvmrc +0 -1
  9. package/.nycrc.json +0 -16
  10. package/.oxfmtrc.json +0 -19
  11. package/.oxlintrc.json +0 -32
  12. package/AGENTS.md +0 -40
  13. package/SECURITY.md +0 -9
  14. package/example/app-layoutsDir.js +0 -99
  15. package/example/app.js +0 -103
  16. package/example/public/css/style.css +0 -17
  17. package/example/views/fruits/details-layoutsDir.hbs +0 -3
  18. package/example/views/fruits/details.hbs +0 -4
  19. package/example/views/fruits/index-layoutsDir.hbs +0 -20
  20. package/example/views/fruits/index.hbs +0 -20
  21. package/example/views/index.hbs +0 -34
  22. package/example/views/layout/default.hbs +0 -13
  23. package/example/views/layout/fruit-details.hbs +0 -9
  24. package/example/views/layout/fruits.hbs +0 -6
  25. package/example/views/layout/html-struct.hbs +0 -21
  26. package/example/views/layout/veggie-details.hbs +0 -9
  27. package/example/views/layout/veggie.hbs +0 -6
  28. package/example/views/partials/scripts.hbs +0 -5
  29. package/example/views/partials/sub/comment.hbs +0 -1
  30. package/example/views/partials-other/other.hbs +0 -1
  31. package/example/views/replace.hbs +0 -6
  32. package/example/views/tos.txt +0 -3
  33. package/example/views/veggies/details.hbs +0 -1
  34. package/example/views/veggies.hbs +0 -17
  35. package/renovate.json +0 -13
  36. package/test/apps/async/index.js +0 -139
  37. package/test/apps/async/views/failer.hbs +0 -4
  38. package/test/apps/async/views/index.hbs +0 -16
  39. package/test/apps/async/views/layout.hbs +0 -1
  40. package/test/apps/i18n/index.js +0 -57
  41. package/test/apps/i18n/locales/en.json +0 -8
  42. package/test/apps/i18n/locales/fr.json +0 -8
  43. package/test/apps/i18n/views/index.hbs +0 -3
  44. package/test/asyncSpecs.js +0 -69
  45. package/test/cacheSpecs.js +0 -135
  46. package/test/customExtension.js +0 -35
  47. package/test/handlebarsSpecs.js +0 -92
  48. package/test/helperSpecs.js +0 -58
  49. package/test/helpers.js +0 -24
  50. package/test/i18nSpecs.js +0 -36
  51. package/test/issues/144/index.hbs +0 -1
  52. package/test/issues/153/index.hbs +0 -3
  53. package/test/issues/21/views/index.hbs +0 -1
  54. package/test/issues/21/views/layouts/default.hbs +0 -1
  55. package/test/issues/21/views/layouts/sub/child.hbs +0 -1
  56. package/test/issues/21/views/sub/relativeLayout.hbs +0 -1
  57. package/test/issues/21/views/sub/sub.hbs +0 -1
  58. package/test/issues/21/views/useLayoutInDir.hbs +0 -1
  59. package/test/issues/22/layout1.hbs +0 -1
  60. package/test/issues/22/layout2.hbs +0 -1
  61. package/test/issues/22/template.hbs +0 -1
  62. package/test/issues/23/empty.hbs +0 -0
  63. package/test/issues/23/emptyComment.hbs +0 -1
  64. package/test/issues/23/emptyPartial.hbs +0 -1
  65. package/test/issues/23/index.hbs +0 -4
  66. package/test/issues/23/layout.hbs +0 -1
  67. package/test/issues/23/partials/custom/comment-only.hbs +0 -1
  68. package/test/issues/23/partials/custom/empty.hbs +0 -0
  69. package/test/issues/23/partials/hello.hbs +0 -1
  70. package/test/issues/49/error.hbs +0 -1
  71. package/test/issues/49/front/error.hbs +0 -1
  72. package/test/issues/49/index.hbs +0 -2
  73. package/test/issues/49/layouts/default.hbs +0 -1
  74. package/test/issues/49/partial.hbs +0 -1
  75. package/test/issues/49/partials/partial-error.hbs +0 -1
  76. package/test/issues/53/default.hbs +0 -15
  77. package/test/issues/53/index.hbs +0 -7
  78. package/test/issues/53/partials/.gitkeep +0 -0
  79. package/test/issues/59/index.hbs +0 -2
  80. package/test/issues/62/basic.hbs +0 -2
  81. package/test/issues/62/block.hbs +0 -11
  82. package/test/issues/73/index.hbs +0 -5
  83. package/test/issues/73/partials/partial.hbs +0 -6
  84. package/test/issues/76/mypartial.hbs +0 -0
  85. package/test/issues/84/index.hbs +0 -1
  86. package/test/issues/84/partials/abc/def/ghi/test.hbs +0 -1
  87. package/test/issues.js +0 -490
  88. package/test/layoutSpecs.js +0 -116
  89. package/test/localTemplateOptions/data-access-template.hbs +0 -1
  90. package/test/localTemplateOptions/template.hbs +0 -1
  91. package/test/localTemplateOptions.js +0 -125
  92. package/test/multiple.js +0 -115
  93. package/test/nonExpress.js +0 -36
  94. package/test/optionsSpecs.js +0 -22
  95. package/test/resolverSpecs.js +0 -54
  96. package/test/views/beautify/expected.hbs +0 -9
  97. package/test/views/beautify/index.hbs +0 -2
  98. package/test/views/customExtension/layout.server.view.html +0 -1
  99. package/test/views/customExtension/partialsDir/partial1.server.view.html +0 -1
  100. package/test/views/customExtension/partialsDir/partial2.server.view.html +0 -1
  101. package/test/views/customExtension/partialsDir/subs/subPartial1.server.view.html +0 -1
  102. package/test/views/customExtension/partialsDir/subs/subPartial2.server.view.html +0 -1
  103. package/test/views/customExtension/template.server.view.html +0 -5
  104. package/test/views/disableLayoutDirective/aside.hbs +0 -1
  105. package/test/views/disableLayoutDirective/index.hbs +0 -2
  106. package/test/views/disableLayoutDirective/layouts/default.hbs +0 -1
  107. package/test/views/helpers/home/async.hbs +0 -6
  108. package/test/views/helpers/home/index.hbs +0 -3
  109. package/test/views/helpers/layouts/default.hbs +0 -1
  110. package/test/views/multiple/views1/collide.hbs +0 -1
  111. package/test/views/multiple/views1/error.hbs +0 -1
  112. package/test/views/multiple/views1/test1.hbs +0 -1
  113. package/test/views/multiple/views2/collide.hbs +0 -1
  114. package/test/views/multiple/views2/error.hbs +0 -1
  115. package/test/views/multiple/views2/test2.hbs +0 -1
  116. package/test/views/viewsDir/layouts/default.hbs +0 -1
  117. package/test/views/viewsDir/sub/directive.hbs +0 -2
  118. package/test/views/viewsDir/sub/lay.hbs +0 -1
@@ -1,125 +0,0 @@
1
- 'use strict';
2
- var assert = require('assert');
3
- var path = require('path');
4
- var hbs = require('..');
5
- var H = require('./helpers');
6
-
7
- describe('local template options', function () {
8
- var dirname = path.join(__dirname, 'localTemplateOptions');
9
-
10
- describe('express3', function () {
11
- it('merges res.locals._templateOptions with the self._templateOptions', function (done) {
12
- var instance = hbs.create();
13
- var render = instance.express3({
14
- restrictLayoutsTo: dirname,
15
- });
16
- instance.updateTemplateOptions({
17
- data: {
18
- greeting: 'Hello,',
19
- firstName: 'Freddy',
20
- lastName: 'Krueger',
21
- },
22
- });
23
-
24
- var locals = H.createLocals('express3', dirname, {
25
- _templateOptions: {
26
- data: {
27
- lastName: 'Mercury',
28
- },
29
- },
30
- });
31
-
32
- render(path.join(dirname, 'template.hbs'), locals, function (err, html) {
33
- assert.ifError(err);
34
- assert.strictEqual(H.stripWs(html), H.stripWs('Hello, Freddy Mercury'));
35
- done(err);
36
- });
37
- });
38
-
39
- it('removes _templateOptions from the locals data', function (done) {
40
- var instance = hbs.create();
41
- var render = instance.express3({
42
- restrictLayoutsTo: dirname,
43
- });
44
- instance.updateTemplateOptions({
45
- data: {
46
- greeting: 'Hello,',
47
- firstName: 'Freddy',
48
- lastName: 'Krueger',
49
- },
50
- });
51
-
52
- var locals = H.createLocals('express3', dirname, {
53
- _templateOptions: {
54
- data: {
55
- lastName: 'Mercury',
56
- },
57
- },
58
- });
59
-
60
- render(path.join(dirname, 'data-access-template.hbs'), locals, function (err, html) {
61
- assert.ifError(err);
62
- assert.strictEqual(H.stripWs(html), H.stripWs(''));
63
- done(err);
64
- });
65
- });
66
- });
67
-
68
- describe('express4', function () {
69
- it('merges res.locals._templateOptions with the self._templateOptions', function (done) {
70
- var instance = hbs.create();
71
- var render = instance.express4({
72
- restrictLayoutsTo: dirname,
73
- });
74
- instance.updateTemplateOptions({
75
- data: {
76
- greeting: 'Hello,',
77
- firstName: 'Freddy',
78
- lastName: 'Krueger',
79
- },
80
- });
81
-
82
- var locals = H.createLocals('express4', dirname, {
83
- _templateOptions: {
84
- data: {
85
- lastName: 'Mercury',
86
- },
87
- },
88
- });
89
-
90
- render(path.join(dirname, 'template.hbs'), locals, function (err, html) {
91
- assert.ifError(err);
92
- assert.strictEqual(H.stripWs(html), H.stripWs('Hello, Freddy Mercury'));
93
- done(err);
94
- });
95
- });
96
-
97
- it('removes _templateOptions from the locals data', function (done) {
98
- var instance = hbs.create();
99
- var render = instance.express3({
100
- restrictLayoutsTo: dirname,
101
- });
102
- instance.updateTemplateOptions({
103
- data: {
104
- greeting: 'Hello,',
105
- firstName: 'Freddy',
106
- lastName: 'Krueger',
107
- },
108
- });
109
-
110
- var locals = H.createLocals('express3', dirname, {
111
- _templateOptions: {
112
- data: {
113
- lastName: 'Mercury',
114
- },
115
- },
116
- });
117
-
118
- render(path.join(dirname, 'data-access-template.hbs'), locals, function (err, html) {
119
- assert.ifError(err);
120
- assert.strictEqual(H.stripWs(html), H.stripWs(''));
121
- done(err);
122
- });
123
- });
124
- });
125
- });
package/test/multiple.js DELETED
@@ -1,115 +0,0 @@
1
- 'use strict';
2
-
3
- var request = require('supertest');
4
- var assert = require('assert');
5
- var express = require('express');
6
- var hbs = require('..');
7
-
8
- describe('multiple directories', function () {
9
- var app;
10
-
11
- beforeEach(function () {
12
- app = express();
13
- app.engine(
14
- 'hbs',
15
- hbs.express3({
16
- restrictLayoutsTo: './test/views/multiple',
17
- }),
18
- );
19
- app.set('view engine', 'hbs');
20
- app.get('/test1', function (req, res) {
21
- res.render('test1');
22
- });
23
- app.get('/test2', function (req, res) {
24
- res.render('test2');
25
- });
26
- app.get('/collide', function (req, res) {
27
- res.render('collide');
28
- });
29
- app.get('/error', function (req, res) {
30
- res.render('error');
31
- });
32
- });
33
-
34
- it('should handle single folder', function (done) {
35
- app.set('views', './test/views/multiple/views1');
36
- request(app)
37
- .get('/test1')
38
- .end(function (err, res) {
39
- assert.ifError(err);
40
- var expected = '<h1>test1</h1>\n';
41
- assert.equal(res.text, expected);
42
- done();
43
- });
44
- });
45
-
46
- it('should handle multiple folders', function (done) {
47
- app.set('views', ['./test/views/multiple/views1', './test/views/multiple/views2']);
48
- request(app)
49
- .get('/test2')
50
- .end(function (err, res) {
51
- assert.ifError(err);
52
- var expected = '<h1>test2</h1>\n';
53
- assert.equal(res.text, expected);
54
- done();
55
- });
56
- });
57
-
58
- describe('should handle multiple folders in specific order', function () {
59
- it('views1, views2', function (done) {
60
- app.set('views', ['./test/views/multiple/views1', './test/views/multiple/views2']);
61
- request(app)
62
- .get('/collide')
63
- .end(function (err, res) {
64
- assert.ifError(err);
65
- var expected = '<h1>collide1</h1>\n';
66
- assert.equal(res.text, expected);
67
- done();
68
- });
69
- });
70
-
71
- it('views2, views1', function (done) {
72
- app.set('views', ['./test/views/multiple/views2', './test/views/multiple/views1']);
73
- request(app)
74
- .get('/collide')
75
- .end(function (err, res) {
76
- assert.ifError(err);
77
- var expected = '<h1>collide2</h1>\n';
78
- assert.equal(res.text, expected);
79
- done();
80
- });
81
- });
82
- });
83
-
84
- describe('should report the filename in error', function () {
85
- it('should report from first folder', function (done) {
86
- app.set('views', ['./test/views/multiple/views1', './test/views/multiple/views2']);
87
- app.use(function (err, req, res, next) {
88
- res.status(500).send(err.stack);
89
- });
90
-
91
- request(app)
92
- .get('/error')
93
- .end(function (err, res) {
94
- assert.ifError(err);
95
- assert(res.error.text.indexOf('views1/error.hbs]') > 0);
96
- done();
97
- });
98
- });
99
-
100
- it('should report from second folder', function (done) {
101
- app.set('views', ['./test/views/multiple/views2', './test/views/multiple/views1']);
102
- app.use(function (err, req, res, next) {
103
- res.status(500).send(err.stack);
104
- });
105
-
106
- request(app)
107
- .get('/error')
108
- .end(function (err, res) {
109
- assert.ifError(err);
110
- assert(res.error.text.indexOf('views2/error.hbs]') > 0);
111
- done();
112
- });
113
- });
114
- });
115
- });
@@ -1,36 +0,0 @@
1
- var assert = require('assert');
2
- var hbs = require('..');
3
- var H = require('./helpers');
4
-
5
- describe('non-express', function () {
6
- describe('viewsDir', function () {
7
- var dirname = __dirname + '/views/viewsDir';
8
-
9
- it('should use viewsDir options', function (done) {
10
- var render = hbs.create().express3({
11
- viewsDir: dirname,
12
- restrictLayoutsTo: dirname,
13
- });
14
- var locals = H.createLocals('express3', dirname);
15
-
16
- render(dirname + '/sub/directive.hbs', locals, function (err, html) {
17
- assert.equal('<vd>directive</vd>', H.stripWs(html));
18
- done();
19
- });
20
- });
21
-
22
- it('should work with layoutsDir', function (done) {
23
- var render = hbs.create().express3({
24
- viewsDir: dirname,
25
- layoutsDir: dirname + '/layouts',
26
- restrictLayoutsTo: dirname,
27
- });
28
- var locals = H.createLocals('express3', dirname, { layout: 'default.hbs' });
29
-
30
- render(dirname + '/sub/lay.hbs', locals, function (err, html) {
31
- assert.equal('<vd>lay</vd>', H.stripWs(html));
32
- done();
33
- });
34
- });
35
- });
36
- });
@@ -1,22 +0,0 @@
1
- var assert = require('assert');
2
- var hbs = require('..');
3
- var path = require('path');
4
- var H = require('./helpers');
5
- var fs = require('fs');
6
-
7
- describe('options', function () {
8
- var dirname = path.join(__dirname, 'views/beautify');
9
-
10
- it('should pretty print HTML', function (done) {
11
- var hb = hbs.create();
12
- var render = hb.express3({ beautify: true, restrictLayoutsTo: dirname });
13
- var locals = H.createLocals('express3', dirname, {});
14
-
15
- render(dirname + '/index.hbs', locals, function (err, html) {
16
- assert.ifError(err);
17
- var expected = fs.readFileSync(dirname + '/expected.hbs', 'utf8');
18
- assert.equal(html.trim(), expected.trim());
19
- done();
20
- });
21
- });
22
- });
@@ -1,54 +0,0 @@
1
- 'use strict';
2
-
3
- var assert = require('assert');
4
- var generateId = require('../lib/generate-id');
5
- var resolver = require('../lib/resolver');
6
-
7
- describe('resolver', function () {
8
- it('detects an unresolved helper at the start of rendered output', function () {
9
- assert.equal(resolver.hasResolvers('__aSyNcId__<_12345678__'), true);
10
- });
11
-
12
- it('does not report rendered output without a resolver marker', function () {
13
- assert.equal(resolver.hasResolvers('rendered output'), false);
14
- });
15
-
16
- it('resolves asynchronous helper output with its context', function (done) {
17
- var cache = {};
18
- var id = resolver.resolve(
19
- cache,
20
- function (context, callback) {
21
- callback(context.value);
22
- },
23
- { value: 'resolved' },
24
- );
25
-
26
- resolver.done(cache, function (err, values) {
27
- assert.ifError(err);
28
- assert.equal(values[id], 'resolved');
29
- done();
30
- });
31
- });
32
-
33
- it('reports synchronous helper failures', function (done) {
34
- var cache = {};
35
- resolver.resolve(cache, function () {
36
- throw new Error('helper failed');
37
- });
38
-
39
- resolver.done(cache, function (err) {
40
- assert.equal(err.message, 'helper failed');
41
- done();
42
- });
43
- });
44
- });
45
-
46
- describe('generateId', function () {
47
- it('uses an eight-character default', function () {
48
- assert.match(generateId(), /^[A-Za-z_]{8}$/);
49
- });
50
-
51
- it('uses the requested length', function () {
52
- assert.match(generateId(16), /^[A-Za-z_]{16}$/);
53
- });
54
- });
@@ -1,9 +0,0 @@
1
- <html>
2
-
3
- <head>head</head>
4
-
5
- <body>
6
- <h1>heading 1</h1>
7
- <h2>heading 2</h2>
8
- </body>
9
- <html>
@@ -1,2 +0,0 @@
1
- <html>
2
- <head>head</head> <body><h1>heading 1</h1><h2>heading 2</h2></body> <html>
@@ -1 +0,0 @@
1
- <html>{{{body}}}</html>
@@ -1 +0,0 @@
1
- <partial>1</partial>
@@ -1 +0,0 @@
1
- <partial>2</partial>
@@ -1 +0,0 @@
1
- <subpartial>1</subpartial>
@@ -1 +0,0 @@
1
- <subpartial>2</subpartial>
@@ -1,5 +0,0 @@
1
- {{!< layout}}
2
- {{> subs/subPartial1}}
3
- {{> partial1}}
4
- {{> subs/subPartial2}}
5
- {{> partial2}}
@@ -1 +0,0 @@
1
- aside
@@ -1,2 +0,0 @@
1
- {{!< layouts/default}}
2
- dld
@@ -1 +0,0 @@
1
- <dld>{{{body}}}</dld>
@@ -1,6 +0,0 @@
1
- {{!< ../layouts/default}}
2
- asynctemplate
3
- {{async "foo"}}
4
- {{async "bar"}}
5
- {{async "bah"}}
6
- {{async "baz"}}
@@ -1,3 +0,0 @@
1
- {{!< ../layouts/default}}
2
- index
3
- {{sync "index"}}
@@ -1 +0,0 @@
1
- <default>{{{body}}}</default>
@@ -1 +0,0 @@
1
- <h1>collide1</h1>
@@ -1 +0,0 @@
1
- {{{http://google.co.uk}}
@@ -1 +0,0 @@
1
- <h1>test1</h1>
@@ -1 +0,0 @@
1
- <h1>collide2</h1>
@@ -1 +0,0 @@
1
- {{{http://google.co.uk}}
@@ -1 +0,0 @@
1
- <h1>test2</h1>
@@ -1 +0,0 @@
1
- <vd>{{{body}}}</vd>
@@ -1,2 +0,0 @@
1
- {{!< ../layouts/default}}
2
- directive
@@ -1 +0,0 @@
1
- lay