Skip to content

Commit

Permalink
Fixes #2728
Browse files Browse the repository at this point in the history
  • Loading branch information
zachleat committed Jan 5, 2023
1 parent 8e2f974 commit 834f168
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 117 deletions.
46 changes: 10 additions & 36 deletions src/TemplateData.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,6 @@ class TemplateData {
aggregate: this.config.benchmarkManager.get("Aggregate"),
};

this.dataTemplateEngine = this.config.dataTemplateEngine;

this.inputDirNeedsCheck = false;
this.setInputDir(inputDir);

Expand Down Expand Up @@ -94,7 +92,6 @@ class TemplateData {
/* Used by tests */
_setConfig(config) {
this.config = config;
this.dataTemplateEngine = this.config.dataTemplateEngine;
}

setInputDir(inputDir) {
Expand All @@ -105,10 +102,6 @@ class TemplateData {
: inputDir;
}

setDataTemplateEngine(engineName) {
this.dataTemplateEngine = engineName;
}

getRawImports() {
let pkgPath = TemplatePath.absolutePath("package.json");

Expand Down Expand Up @@ -464,45 +457,26 @@ class TemplateData {

async _parseDataFile(path, rawImports, ignoreProcessing, parser, options = {}) {
let readFile = !("read" in options) || options.read === true;
let engineName = this.dataTemplateEngine;
let processAsTemplate = !ignoreProcessing && engineName !== false;

let rawInput;

if (readFile || processAsTemplate) {
if (readFile) {
rawInput = await this._loadFileContents(path, options);
}

if (readFile && !rawInput) {
return {};
}

if (!processAsTemplate) {
try {
if (readFile) {
return parser(rawInput, path);
} else {
// path as a first argument is when `read: false`
// path as a second argument is for consistency with `read: true` API
return parser(path, path);
}
} catch (e) {
throw new TemplateDataParseError(`Having trouble parsing data file ${path}`, e);
}
} else {
// processing will always read the input file
let tr = new TemplateRender(engineName, this.inputDir, this.config);
tr.extensionMap = this.extensionMap;

let fn = await tr.getCompiledTemplate(rawInput);

try {
// pass in rawImports, don’t pass in global data, that’s what we’re parsing
let raw = await fn(rawImports);
return parser(raw, path);
} catch (e) {
throw new TemplateDataParseError(`Having trouble parsing data file ${path}`, e);
try {
if (readFile) {
return parser(rawInput, path);
} else {
// path as a first argument is when `read: false`
// path as a second argument is for consistency with `read: true` API
return parser(path, path);
}
} catch (e) {
throw new TemplateDataParseError(`Having trouble parsing data file ${path}`, e);
}
}

Expand Down
58 changes: 12 additions & 46 deletions src/defaultConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,52 +30,19 @@ module.exports = function (config) {

config.addFilter("serverlessUrl", serverlessUrlFilter);

config.addFilter(
"getCollectionItemIndex",
function (collection, pageOverride) {
return getCollectionItemIndex.call(this, collection, pageOverride);
}
);
config.addFilter("getCollectionItemIndex", function (collection, pageOverride) {
return getCollectionItemIndex.call(this, collection, pageOverride);
});

config.addFilter(
"getCollectionItem",
function (collection, pageOverride, langCode) {
return getLocaleCollectionItem.call(
this,
config,
collection,
pageOverride,
langCode,
0
);
}
);
config.addFilter(
"getPreviousCollectionItem",
function (collection, pageOverride, langCode) {
return getLocaleCollectionItem.call(
this,
config,
collection,
pageOverride,
langCode,
-1
);
}
);
config.addFilter(
"getNextCollectionItem",
function (collection, pageOverride, langCode) {
return getLocaleCollectionItem.call(
this,
config,
collection,
pageOverride,
langCode,
1
);
}
);
config.addFilter("getCollectionItem", function (collection, pageOverride, langCode) {
return getLocaleCollectionItem.call(this, config, collection, pageOverride, langCode, 0);
});
config.addFilter("getPreviousCollectionItem", function (collection, pageOverride, langCode) {
return getLocaleCollectionItem.call(this, config, collection, pageOverride, langCode, -1);
});
config.addFilter("getNextCollectionItem", function (collection, pageOverride, langCode) {
return getLocaleCollectionItem.call(this, config, collection, pageOverride, langCode, 1);
});

return {
templateFormats: [
Expand All @@ -94,7 +61,6 @@ module.exports = function (config) {
pathPrefix: "/",
markdownTemplateEngine: "liquid",
htmlTemplateEngine: "liquid",
dataTemplateEngine: false, // change in 1.0
htmlOutputSuffix: "-o",

// Renamed from `jsDataFileSuffix` in 2.0 (and swapped to an Array)
Expand Down
34 changes: 6 additions & 28 deletions test/TemplateDataTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ test("getData()", async (t) => {
let eleventyConfig = new TemplateConfig();
let config = eleventyConfig.getConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
dataObj.setDataTemplateEngine("liquid");
dataObj.setFileSystemSearch(new FileSystemSearch());

t.is(dataObj.getData().toString(), "[object Promise]");
Expand All @@ -38,7 +37,7 @@ test("getData()", async (t) => {
t.is(data.globalData.datakey1, "datavalue1", "simple data value");
t.is(
data.globalData.datakey2,
"@11ty/eleventy",
"{{pkg.name}}",
`variables, resolve ${config.keys.package} to its value.`
);

Expand Down Expand Up @@ -67,17 +66,16 @@ test("Data dir does not exist", async (t) => {
test("Add local data", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
dataObj.setDataTemplateEngine("liquid");
dataObj.setFileSystemSearch(new FileSystemSearch());

let data = await dataObj.getData();

t.is(data.globalData.datakey1, "datavalue1");
t.is(data.globalData.datakey2, "@11ty/eleventy");
t.is(data.globalData.datakey2, "{{pkg.name}}");

let withLocalData = await testGetLocalData(dataObj, "./test/stubs/component/component.njk");
t.is(withLocalData.globalData.datakey1, "datavalue1");
t.is(withLocalData.globalData.datakey2, "@11ty/eleventy");
t.is(withLocalData.globalData.datakey2, "{{pkg.name}}");
t.is(withLocalData.localdatakey1, "localdatavalue1");

// from the js file
Expand All @@ -102,7 +100,6 @@ test("Get local data async JS", async (t) => {
test("addLocalData() doesn’t exist but doesn’t fail (template file does exist)", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
dataObj.setDataTemplateEngine("liquid");
dataObj.setFileSystemSearch(new FileSystemSearch());

let data = await dataObj.getData();
Expand All @@ -114,14 +111,13 @@ test("addLocalData() doesn’t exist but doesn’t fail (template file does exis
"./test/stubs/datafiledoesnotexist/template.njk"
);
t.is(withLocalData.globalData.datakey1, "datavalue1");
t.is(withLocalData.globalData.datakey2, "@11ty/eleventy");
t.is(withLocalData.globalData.datakey2, "{{pkg.name}}");
t.deepEqual(Object.keys(withLocalData), beforeDataKeyCount);
});

test("addLocalData() doesn’t exist but doesn’t fail (template file does not exist)", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
dataObj.setDataTemplateEngine("liquid");
dataObj.setFileSystemSearch(new FileSystemSearch());

let data = await dataObj.getData();
Expand All @@ -132,7 +128,7 @@ test("addLocalData() doesn’t exist but doesn’t fail (template file does not
"./test/stubs/datafiledoesnotexist/templatedoesnotexist.njk"
);
t.is(withLocalData.globalData.datakey1, "datavalue1");
t.is(withLocalData.globalData.datakey2, "@11ty/eleventy");
t.is(withLocalData.globalData.datakey2, "{{pkg.name}}");
t.deepEqual(Object.keys(withLocalData), beforeDataKeyCount);
});

Expand Down Expand Up @@ -247,10 +243,9 @@ test("getAllGlobalData() with common js function data file", async (t) => {
t.is(data.globalDataFnCJS.datakeyfromcjsfn, "common-cjs-howdy");
});

test("getDataValue() without a dataTemplateEngine", async (t) => {
test("getDataValue() without template engine preprocessing", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
dataObj.setDataTemplateEngine(false);

let data = await dataObj.getDataValue("./test/stubs/_data/testDataEjs.json", {
pkg: { name: "pkgname" },
Expand All @@ -262,21 +257,6 @@ test("getDataValue() without a dataTemplateEngine", async (t) => {
});
});

test("getDataValue() without dataTemplateEngine changed to `ejs`", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
dataObj.setDataTemplateEngine("ejs");

let data = await dataObj.getDataValue("./test/stubs/_data/testDataEjs.json", {
pkg: { name: "pkgname" },
});

t.deepEqual(data, {
datakey1: "datavalue1",
datakey2: "pkgname",
});
});

test("getLocalDataPaths", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs/", eleventyConfig);
Expand Down Expand Up @@ -535,7 +515,6 @@ test("TemplateData.cleanupData", (t) => {

test("Parent directory for data (Issue #337)", async (t) => {
let eleventyConfig = new TemplateConfig({
dataTemplateEngine: false,
dir: {
input: "./test/stubs-337/src/",
data: "../data/",
Expand All @@ -554,7 +533,6 @@ test("Parent directory for data (Issue #337)", async (t) => {

test("Dots in datafile path (Issue #1242)", async (t) => {
let eleventyConfig = new TemplateConfig({
dataTemplateEngine: false,
dir: {
input: "./test/stubs-1242/",
data: "_data/",
Expand Down
12 changes: 5 additions & 7 deletions test/UserDataExtensionsTest.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,17 @@ test("Local data", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs-630/", eleventyConfig);
injectDataExtensions(dataObj);
dataObj.setDataTemplateEngine("liquid");
dataObj.setFileSystemSearch(new FileSystemSearch());

let data = await dataObj.getData();

// YAML GLOBAL DATA
t.is(data.globalData3.datakey1, "datavalue3");
t.is(data.globalData3.datakey2, "@11ty/eleventy--yaml");
t.is(data.globalData3.datakey2, "{{pkg.name}}--yaml");

// NOSJ (JSON) GLOBAL DATA
t.is(data.globalData4.datakey1, "datavalue4");
t.is(data.globalData4.datakey2, "@11ty/eleventy--nosj");
t.is(data.globalData4.datakey2, "{{pkg.name}}--nosj");

let withLocalData = await dataObj.getTemplateDirectoryData(
"./test/stubs-630/component-yaml/component.njk"
Expand Down Expand Up @@ -79,7 +78,6 @@ test("Global data", async (t) => {
let eleventyConfig = new TemplateConfig();
let dataObj = new TemplateData("./test/stubs-630/", eleventyConfig);
injectDataExtensions(dataObj);
dataObj.setDataTemplateEngine("liquid");
dataObj.setFileSystemSearch(new FileSystemSearch());

t.deepEqual(await dataObj.getGlobalDataGlob(), [
Expand All @@ -96,15 +94,15 @@ test("Global data", async (t) => {

// JSON GLOBAL DATA
t.is(data.globalData2.datakey1, "datavalue2");
t.is(data.globalData2.datakey2, "@11ty/eleventy--json");
t.is(data.globalData2.datakey2, "{{pkg.name}}--json");

// YAML GLOBAL DATA
t.is(data.globalData3.datakey1, "datavalue3");
t.is(data.globalData3.datakey2, "@11ty/eleventy--yaml");
t.is(data.globalData3.datakey2, "{{pkg.name}}--yaml");

// NOSJ (JSON) GLOBAL DATA
t.is(data.globalData4.datakey1, "datavalue4");
t.is(data.globalData4.datakey2, "@11ty/eleventy--nosj");
t.is(data.globalData4.datakey2, "{{pkg.name}}--nosj");

t.is(data.subdir.globalDataSubdir.keyyaml, "yaml");
});
Expand Down

0 comments on commit 834f168

Please sign in to comment.