summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js b/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js
new file mode 100644
index 0000000..7d72a64
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Util/GetJavaScriptData.js
@@ -0,0 +1,30 @@
+import EleventyBaseError from "../Errors/EleventyBaseError.js";
+
+class JavaScriptInvalidDataFormatError extends EleventyBaseError {}
+
+export default async function (inst, inputPath, key = "data", options = {}) {
+ let { mixins, isObjectRequired } = Object.assign(
+ {
+ mixins: {},
+ isObjectRequired: true,
+ },
+ options,
+ );
+
+ if (inst && key in inst) {
+ // get extra data from `data` method,
+ // either as a function or getter or object literal
+ let result = await (typeof inst[key] === "function"
+ ? Object.keys(mixins).length > 0
+ ? inst[key].call(mixins)
+ : inst[key]()
+ : inst[key]);
+
+ if (isObjectRequired && typeof result !== "object") {
+ throw new JavaScriptInvalidDataFormatError(
+ `Invalid data format returned from ${inputPath}: typeof ${typeof result}`,
+ );
+ }
+ return result;
+ }
+}