summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Engines/Util
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Engines/Util')
-rw-r--r--node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js b/node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js
new file mode 100644
index 0000000..dd5fbc6
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Engines/Util/ContextAugmenter.js
@@ -0,0 +1,67 @@
+const DATA_KEYS = ["page", "eleventy"];
+
+function augmentFunction(fn, options = {}) {
+ let t = typeof fn;
+ if (t !== "function") {
+ throw new Error(
+ "Invalid type passed to `augmentFunction`. A function was expected and received: " + t,
+ );
+ }
+
+ /** @this {object} */
+ return function (...args) {
+ let context = augmentObject(this || {}, options);
+ return fn.call(context, ...args);
+ };
+}
+
+function augmentObject(targetObject, options = {}) {
+ options = Object.assign(
+ {
+ source: undefined, // where to copy from
+ overwrite: true,
+ lazy: false, // lazily fetch the property
+ // getter: function() {},
+ },
+ options,
+ );
+
+ for (let key of DATA_KEYS) {
+ // Skip if overwrite: false and prop already exists on target
+ if (!options.overwrite && targetObject[key]) {
+ continue;
+ }
+
+ if (options.lazy) {
+ let value;
+ if (typeof options.getter == "function") {
+ value = () => options.getter(key, options.source);
+ } else {
+ value = () => options.source?.[key];
+ }
+
+ // lazy getter important for Liquid strictVariables support
+ Object.defineProperty(targetObject, key, {
+ writable: true,
+ configurable: true,
+ enumerable: true,
+ value,
+ });
+ } else {
+ let value;
+ if (typeof options.getter == "function") {
+ value = options.getter(key, options.source);
+ } else {
+ value = options.source?.[key];
+ }
+
+ if (value) {
+ targetObject[key] = value;
+ }
+ }
+ }
+
+ return targetObject;
+}
+
+export { DATA_KEYS as augmentKeys, augmentFunction, augmentObject };