Files
homepage-template/node_modules/@11ty/eleventy/src/Util/ProjectTemplateFormats.js
2024-11-03 17:41:45 +01:00

135 lines
2.8 KiB
JavaScript

import debugUtil from "debug";
const debug = debugUtil("Eleventy:Util:ProjectTemplateFormats");
class ProjectTemplateFormats {
#useAll = {};
#raw = {};
#values = {}; // Set objects
static union(...sets) {
let s = new Set();
for (let set of sets) {
if (!set || typeof set[Symbol.iterator] !== "function") {
continue;
}
for (let v of set) {
s.add(v);
}
}
return s;
}
#normalize(formats) {
if (Array.isArray(formats)) {
formats = "" + formats.join(",");
}
if (typeof formats !== "string") {
throw new Error(
`Invalid formats (expect String, Array) passed to ProjectTemplateFormats->normalize: ${formats}`,
);
}
let final = new Set();
for (let format of formats.split(",")) {
format = format.trim();
if (format && format !== "*") {
final.add(format);
}
}
return final;
}
isWildcard() {
return this.#useAll.cli || this.#useAll.config || false;
}
/** @returns {boolean} */
#isUseAll(rawFormats) {
if (rawFormats === "") {
return false;
}
if (typeof rawFormats === "string") {
rawFormats = rawFormats.split(",");
}
if (Array.isArray(rawFormats)) {
return rawFormats.find((entry) => entry === "*") !== undefined;
}
return false;
}
// 3.x Breaking: "" now means no formats. In 2.x and prior it meant "*"
setViaCommandLine(formats) {
if (formats === undefined) {
return;
}
this.#useAll.cli = this.#isUseAll(formats);
this.#raw.cli = formats;
this.#values.cli = this.#normalize(formats);
}
// 3.x Breaking: "" now means no formats—in 2.x and prior it meant "*"
// 3.x Adds support for comma separated string—in 2.x this required an Array
setViaConfig(formats) {
if (formats === undefined) {
return;
}
// "*" is supported
this.#useAll.config = this.#isUseAll(formats);
this.#raw.config = formats;
this.#values.config = this.#normalize(formats);
}
addViaConfig(formats) {
if (!formats) {
return;
}
if (this.#isUseAll(formats)) {
throw new Error(
`\`addTemplateFormats("*")\` is not supported for project template syntaxes.`,
);
}
// "*" not supported here
this.#raw.configAdd = formats;
this.#values.configAdd = this.#normalize(formats);
}
getAllTemplateFormats() {
return Array.from(ProjectTemplateFormats.union(this.#values.config, this.#values.configAdd));
}
getTemplateFormats() {
if (this.#useAll.cli) {
let v = this.getAllTemplateFormats();
debug("Using CLI --formats='*': %o", v);
return v;
}
if (this.#raw.cli !== undefined) {
let v = Array.from(this.#values.cli);
debug("Using CLI --formats: %o", v);
return v;
}
let v = this.getAllTemplateFormats();
debug(
"Using configuration `templateFormats`, `setTemplateFormats()`, `addTemplateFormats()`: %o",
v,
);
return v;
}
}
export default ProjectTemplateFormats;