summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/TemplateBehavior.js
diff options
context:
space:
mode:
authorShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
committerShipwreckt <me@shipwreckt.co.uk>2025-10-31 20:02:14 +0000
commit7a52ddeba2a68388b544f529d2d92104420f77b0 (patch)
tree15ddd47457a2cb4a96060747437d36474e4f6b4e /node_modules/@11ty/eleventy/src/TemplateBehavior.js
parent53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff)
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@11ty/eleventy/src/TemplateBehavior.js')
-rw-r--r--node_modules/@11ty/eleventy/src/TemplateBehavior.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/TemplateBehavior.js b/node_modules/@11ty/eleventy/src/TemplateBehavior.js
new file mode 100644
index 0000000..8dff97c
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/TemplateBehavior.js
@@ -0,0 +1,85 @@
+import { isPlainObject } from "@11ty/eleventy-utils";
+
+class TemplateBehavior {
+ #isRenderOptional;
+
+ constructor(config) {
+ this.render = true;
+ this.write = true;
+ this.outputFormat = null;
+
+ if (!config) {
+ throw new Error("Missing config argument in TemplateBehavior");
+ }
+ this.config = config;
+ }
+
+ // Render override set to false
+ isRenderableDisabled() {
+ return this.renderableOverride === false;
+ }
+
+ isRenderableOptional() {
+ return this.#isRenderOptional;
+ }
+
+ // undefined (fallback), true, false
+ setRenderableOverride(renderableOverride) {
+ if (renderableOverride === "optional") {
+ this.#isRenderOptional = true;
+ this.renderableOverride = undefined;
+ } else {
+ this.#isRenderOptional = false;
+ this.renderableOverride = renderableOverride;
+ }
+ }
+
+ // permalink *has* a build key or output is json/ndjson
+ isRenderable() {
+ return this.renderableOverride ?? (this.render || this.isRenderForced());
+ }
+
+ setOutputFormat(format) {
+ this.outputFormat = format;
+ }
+
+ isRenderForced() {
+ return this.outputFormat === "json" || this.outputFormat === "ndjson";
+ }
+
+ isWriteable() {
+ return this.write;
+ }
+
+ // Duplicate logic with TemplatePermalink constructor
+ setRenderViaDataCascade(data) {
+ // render is false *only* if `build` key does not exist in permalink objects (both in data and eleventyComputed)
+ // (note that permalink: false means it won’t write but will still render)
+
+ let keys = new Set();
+ if (isPlainObject(data.permalink)) {
+ for (let key of Object.keys(data.permalink)) {
+ keys.add(key);
+ }
+ }
+
+ let computedKey = this.config.keys.computed;
+ if (computedKey in data && isPlainObject(data[computedKey]?.permalink)) {
+ for (let key of Object.keys(data[computedKey].permalink)) {
+ keys.add(key);
+ }
+ }
+
+ if (keys.size) {
+ this.render = keys.has("build");
+ }
+ }
+
+ setFromPermalink(templatePermalink) {
+ // this.render is duplicated between TemplatePermalink and `setRenderViaDataCascade` above
+ this.render = templatePermalink._isRendered;
+
+ this.write = templatePermalink._writeToFileSystem;
+ }
+}
+export default TemplateBehavior;