Skip to content

Commit c64da14

Browse files
committed
Fixes #3875
1 parent 94ca128 commit c64da14

File tree

2 files changed

+84
-1
lines changed

2 files changed

+84
-1
lines changed

src/Data/TemplateData.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,8 @@ class TemplateData {
658658
}
659659

660660
// Deduplicate tags
661-
return [...new Set(tags)];
661+
// Coerce to string #3875
662+
return [...new Set(tags)].map((entry) => String(entry));
662663
}
663664

664665
return tags;

test/Issue3875Test.js

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import test from "ava";
2+
import Eleventy from "../src/Eleventy.js";
3+
4+
test("#3875 numeric tags", async (t) => {
5+
let elev = new Eleventy("test/noop", false, {
6+
config(eleventyConfig) {
7+
eleventyConfig.addFilter("keys", (obj) => Object.keys(obj));
8+
eleventyConfig.addTemplate("index.njk", "{{ collections | keys }}", {
9+
tags: [1,2,3]
10+
});
11+
}
12+
});
13+
14+
let results = await elev.toJSON();
15+
t.is(results[0].content, "1,2,3,all");
16+
});
17+
18+
test("#3875 numeric tags (via front matter)", async (t) => {
19+
let elev = new Eleventy("test/noop", false, {
20+
config(eleventyConfig) {
21+
eleventyConfig.addFilter("keys", (obj) => Object.keys(obj));
22+
eleventyConfig.addTemplate("index.njk", `---
23+
tags:
24+
- 1
25+
- 2
26+
- 3
27+
---
28+
{{ collections | keys }}`);
29+
}
30+
});
31+
32+
let results = await elev.toJSON();
33+
t.is(results[0].content, "1,2,3,all");
34+
});
35+
36+
test("#3875 consume a numeric tag collection (njk)", async (t) => {
37+
let elev = new Eleventy("test/noop", false, {
38+
config(eleventyConfig) {
39+
eleventyConfig.addFilter("keyTypes", (obj) => Object.keys(obj).map(entry => typeof entry).join(","));
40+
eleventyConfig.addTemplate("child.njk", "", {
41+
tags: [1]
42+
});
43+
eleventyConfig.addTemplate("index.njk", `{{ collections | keyTypes }}:{{ collections[1].length }}:{{ collections['1'].length }}`);
44+
}
45+
});
46+
47+
let results = await elev.toJSON();
48+
t.is(results.filter(entry => entry.inputPath.endsWith("index.njk"))[0].content, "string,string:1:1");
49+
});
50+
51+
test("#3875 consume a numeric tag collection (liquid)", async (t) => {
52+
let elev = new Eleventy("test/noop", false, {
53+
config(eleventyConfig) {
54+
eleventyConfig.addFilter("keyTypes", (obj) => Object.keys(obj).map(entry => typeof entry).join(","));
55+
eleventyConfig.addTemplate("child.njk", "", {
56+
tags: [1]
57+
});
58+
eleventyConfig.addTemplate("index.liquid", `{{ collections | keyTypes }}:{{ collections[1].length }}:{{ collections['1'].length }}`);
59+
}
60+
});
61+
62+
let results = await elev.toJSON();
63+
t.is(results.filter(entry => entry.inputPath.endsWith("index.liquid"))[0].content, "string,string:1:1");
64+
});
65+
66+
test("#3875 consume a numeric tag collection (11ty.js)", async (t) => {
67+
let elev = new Eleventy("test/noop", false, {
68+
config(eleventyConfig) {
69+
eleventyConfig.addTemplate("child.njk", "", {
70+
tags: [1]
71+
});
72+
eleventyConfig.addTemplate("index.11ty.js", {
73+
render(data) {
74+
return `${Object.keys(data.collections).map(entry => typeof entry).join(",")}:${data.collections[1].length}:${data.collections['1'].length}`
75+
}
76+
});
77+
}
78+
});
79+
80+
let results = await elev.toJSON();
81+
t.is(results.filter(entry => entry.inputPath.endsWith("index.11ty.js"))[0].content, "string,string:1:1");
82+
});

0 commit comments

Comments
 (0)