From 0d00b0381c282cf3b35a002befa1ebabeb6f1528 Mon Sep 17 00:00:00 2001 From: Antony Gelberg Date: Mon, 30 Oct 2023 00:58:41 +0000 Subject: [PATCH 1/2] Formatting (semicolon / whitespace) --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 9fbe898..bfc5124 100644 --- a/server.js +++ b/server.js @@ -79,7 +79,7 @@ class EleventyDevServer { } constructor(name, dir, options = {}) { - debug("Creating new Dev Server instance.") + debug("Creating new Dev Server instance."); this.name = name; this.normalizeOptions(options); From 7bd30d52e8ff939afac41c085ea7e636f08a1778 Mon Sep 17 00:00:00 2001 From: Antony Gelberg Date: Mon, 30 Oct 2023 01:00:03 +0000 Subject: [PATCH 2/2] Support rebuild event from dev server --- server.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/server.js b/server.js index bfc5124..073c28f 100644 --- a/server.js +++ b/server.js @@ -34,6 +34,8 @@ const DEFAULT_OPTIONS = { pathPrefix: "/", // May be overridden by Eleventy, adds a virtual base directory to your project watch: [], // Globs to pass to separate dev server chokidar for watching aliases: {}, // Aliasing feature + rebuildUrl: null, // POST URL to trigger rebuild + rebuildUrlToken: "", // Secret token in x-11ty-rebuild-token header indexFileName: "index.html", // Allow custom index file name useCache: false, // Use a cache for file contents headers: {}, // Set default response headers @@ -117,6 +119,10 @@ class EleventyDevServer { this.options.pathPrefix = this.cleanupPathPrefix(this.options.pathPrefix); } + setEventBus(_eventBus) { + this.eventBus = _eventBus; + } + get watcher() { if(this.#watcher) { return this.#watcher; @@ -481,6 +487,18 @@ class EleventyDevServer { return res.end(""); } + if (this.options.rebuildUrl && req.url === this.options.rebuildUrl && req.method === 'POST') { + const token = req.headers['x-11ty-rebuild-token']; + if (token !== this.options.rebuildUrlToken) { + res.writeHead(403, { 'Content-Type': 'text/plain' }); + return res.end('Forbidden'); + } + + this.eventBus.emit('eleventyDevServer.rebuild'); + res.writeHead(200); + return res.end(); + } + for(let urlPatternString in this.options.onRequest) { let fn = this.options.onRequest[urlPatternString]; let fullPath = this.getServerPath(urlPatternString);