summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Util/ReservedData.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/Util/ReservedData.js
parent53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff)
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Util/ReservedData.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Util/ReservedData.js69
1 files changed, 69 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Util/ReservedData.js b/node_modules/@11ty/eleventy/src/Util/ReservedData.js
new file mode 100644
index 0000000..d726c73
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Util/ReservedData.js
@@ -0,0 +1,69 @@
+class EleventyReservedDataError extends TypeError {}
+
+class ReservedData {
+ static properties = [
+ // "pkg", // Object.freeze’d upstream
+ // "eleventy", // Object.freeze’d upstream
+ // "page" is only frozen for specific subproperties below
+ "content",
+ "collections",
+ ];
+
+ static pageProperties = [
+ "date",
+ "inputPath",
+ "fileSlug",
+ "filePathStem",
+ "outputFileExtension",
+ "templateSyntax",
+ "url",
+ "outputPath",
+ // not yet `excerpt` or `lang` set via front matter and computed data
+ ];
+
+ // Check in the data cascade for reserved data properties.
+ static getReservedKeys(data) {
+ if (!data) {
+ return [];
+ }
+
+ let keys = this.properties.filter((key) => {
+ return key in data;
+ });
+
+ if ("page" in data) {
+ if (typeof data.page === "object") {
+ for (let key of this.pageProperties) {
+ if (key in data.page) {
+ keys.push(`page.${key}`);
+ }
+ }
+ } else {
+ // fail `page` when set to non-object values.
+ keys.push("page");
+ }
+ }
+ return keys;
+ }
+
+ static check(data) {
+ let reserved = ReservedData.getReservedKeys(data);
+ if (reserved.length === 0) {
+ return;
+ }
+
+ let error = new EleventyReservedDataError(
+ `Cannot override reserved Eleventy properties: ${reserved.join(", ")}`,
+ );
+
+ error.reservedNames = reserved;
+
+ throw error;
+ }
+
+ static isReservedDataError(e) {
+ return e instanceof EleventyReservedDataError;
+ }
+}
+
+export default ReservedData;