summaryrefslogtreecommitdiff
path: root/node_modules/@11ty/eleventy/src/Util/GlobRemap.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/GlobRemap.js
parent53d6ae2b5568437afa5e4995580a3fb679b7b91b (diff)
Changed from static to 11ty!
Diffstat (limited to 'node_modules/@11ty/eleventy/src/Util/GlobRemap.js')
-rw-r--r--node_modules/@11ty/eleventy/src/Util/GlobRemap.js85
1 files changed, 85 insertions, 0 deletions
diff --git a/node_modules/@11ty/eleventy/src/Util/GlobRemap.js b/node_modules/@11ty/eleventy/src/Util/GlobRemap.js
new file mode 100644
index 0000000..5e2bea3
--- /dev/null
+++ b/node_modules/@11ty/eleventy/src/Util/GlobRemap.js
@@ -0,0 +1,85 @@
+import path from "node:path";
+import ProjectDirectories from "./ProjectDirectories.js";
+import PathNormalizer from "./PathNormalizer.js";
+
+// even on Windows (in cmd.exe) these paths are normalized to forward slashes
+// tinyglobby expects forward slashes on Windows
+const SEP = "/";
+
+class GlobRemap {
+ constructor(paths = []) {
+ this.paths = paths;
+ this.cwd = GlobRemap.getCwd(paths);
+ }
+
+ getCwd() {
+ return this.cwd;
+ }
+
+ getRemapped(paths) {
+ return paths.map((entry) => GlobRemap.remapInput(entry, this.cwd));
+ }
+
+ getInput() {
+ return this.getRemapped(this.paths);
+ }
+
+ getOutput(paths = []) {
+ return paths.map((entry) => GlobRemap.remapOutput(entry, this.cwd));
+ }
+
+ static getParentDirPrefix(filePath = "") {
+ let count = [];
+ for (let p of filePath.split(SEP)) {
+ if (p === "..") {
+ count.push("..");
+ } else {
+ break;
+ }
+ }
+
+ if (count.length > 0) {
+ // trailing slash
+ return count.join(SEP) + SEP;
+ }
+ return "";
+ }
+
+ static getLongestParentDirPrefix(filePaths) {
+ let longest = "";
+ filePaths
+ .map((entry) => {
+ return this.getParentDirPrefix(entry);
+ })
+ .filter((entry) => Boolean(entry))
+ .forEach((prefix) => {
+ if (!longest || prefix.length > longest.length) {
+ longest = prefix;
+ }
+ });
+ return longest;
+ }
+
+ // alias
+ static getCwd(filePaths) {
+ return this.getLongestParentDirPrefix(filePaths);
+ }
+
+ static remapInput(entry, cwd) {
+ if (cwd) {
+ if (!entry.startsWith("**" + SEP) && !entry.startsWith(`.git${SEP}**`)) {
+ return PathNormalizer.normalizeSeperator(ProjectDirectories.getRelativeTo(entry, cwd));
+ }
+ }
+ return entry;
+ }
+
+ static remapOutput(entry, cwd) {
+ if (cwd) {
+ return PathNormalizer.normalizeSeperator(path.join(cwd, entry));
+ }
+ return entry;
+ }
+}
+
+export default GlobRemap;