Add initial 11ty website structure
This commit is contained in:
+131
@@ -0,0 +1,131 @@
|
||||
import { TemplatePath } from "@11ty/eleventy-utils";
|
||||
|
||||
import PathNormalizer from "./Util/PathNormalizer.js";
|
||||
|
||||
/* Decides when to watch and in what mode to watch
|
||||
* Incremental builds don’t batch changes, they queue.
|
||||
* Nonincremental builds batch.
|
||||
*/
|
||||
|
||||
class EleventyWatch {
|
||||
constructor() {
|
||||
this.incremental = false;
|
||||
this.isActive = false;
|
||||
this.activeQueue = [];
|
||||
}
|
||||
|
||||
isBuildRunning() {
|
||||
return this.isActive;
|
||||
}
|
||||
|
||||
setBuildRunning() {
|
||||
this.isActive = true;
|
||||
|
||||
// pop waiting queue into the active queue
|
||||
this.activeQueue = this.popNextActiveQueue();
|
||||
}
|
||||
|
||||
setBuildFinished() {
|
||||
this.isActive = false;
|
||||
this.activeQueue = [];
|
||||
}
|
||||
|
||||
getIncrementalFile() {
|
||||
if (this.incremental) {
|
||||
return this.activeQueue.length ? this.activeQueue[0] : false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Returns the changed files currently being operated on in the current `watch` build
|
||||
* Works with or without incremental (though in incremental only one file per time will be processed)
|
||||
*/
|
||||
getActiveQueue() {
|
||||
if (!this.isActive) {
|
||||
return [];
|
||||
} else if (this.incremental && this.activeQueue.length === 0) {
|
||||
return [];
|
||||
} else if (this.incremental) {
|
||||
return [this.activeQueue[0]];
|
||||
}
|
||||
|
||||
return this.activeQueue;
|
||||
}
|
||||
|
||||
_queueMatches(file) {
|
||||
let filterCallback;
|
||||
if (typeof file === "function") {
|
||||
filterCallback = file;
|
||||
} else {
|
||||
filterCallback = (path) => path === file;
|
||||
}
|
||||
|
||||
return this.activeQueue.filter(filterCallback);
|
||||
}
|
||||
|
||||
hasAllQueueFiles(file) {
|
||||
return (
|
||||
this.activeQueue.length > 0 && this.activeQueue.length === this._queueMatches(file).length
|
||||
);
|
||||
}
|
||||
|
||||
hasQueuedFile(file) {
|
||||
if (file) {
|
||||
return this._queueMatches(file).length > 0;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
hasQueuedFiles(files) {
|
||||
for (const file of files) {
|
||||
if (this.hasQueuedFile(file)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
get pendingQueue() {
|
||||
if (!this._queue) {
|
||||
this._queue = [];
|
||||
}
|
||||
return this._queue;
|
||||
}
|
||||
|
||||
set pendingQueue(value) {
|
||||
this._queue = value;
|
||||
}
|
||||
|
||||
addToPendingQueue(path) {
|
||||
if (path) {
|
||||
path = PathNormalizer.normalizeSeperator(TemplatePath.addLeadingDotSlash(path));
|
||||
this.pendingQueue.push(path);
|
||||
}
|
||||
}
|
||||
|
||||
getPendingQueueSize() {
|
||||
return this.pendingQueue.length;
|
||||
}
|
||||
|
||||
getPendingQueue() {
|
||||
return this.pendingQueue;
|
||||
}
|
||||
|
||||
getActiveQueueSize() {
|
||||
return this.activeQueue.length;
|
||||
}
|
||||
|
||||
// returns array
|
||||
popNextActiveQueue() {
|
||||
if (this.incremental) {
|
||||
return this.pendingQueue.length ? [this.pendingQueue.shift()] : [];
|
||||
}
|
||||
|
||||
let ret = this.pendingQueue.slice();
|
||||
this.pendingQueue = [];
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
export default EleventyWatch;
|
||||
Reference in New Issue
Block a user