« get me outta code hell

hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/write/build-modes/static-build.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/write/build-modes/static-build.js')
-rw-r--r--src/write/build-modes/static-build.js62
1 files changed, 17 insertions, 45 deletions
diff --git a/src/write/build-modes/static-build.js b/src/write/build-modes/static-build.js
index d40e1cb7..b5ded04c 100644
--- a/src/write/build-modes/static-build.js
+++ b/src/write/build-modes/static-build.js
@@ -1,15 +1,6 @@
+import {cp, mkdir, stat, symlink, writeFile, unlink} from 'node:fs/promises';
 import * as path from 'node:path';
 
-import {
-  copyFile,
-  cp,
-  mkdir,
-  stat,
-  symlink,
-  writeFile,
-  unlink,
-} from 'node:fs/promises';
-
 import {rimraf} from 'rimraf';
 
 import {quickLoadContentDependencies} from '#content-dependencies';
@@ -27,6 +18,7 @@ import {
 } from '#cli';
 
 import {
+  getOrigin,
   getPagePathname,
   getURLsFrom,
   getURLsFromRoot,
@@ -114,8 +106,6 @@ export async function go({
 
   universalUtilities,
 
-  mediaPath,
-
   defaultLanguage,
   languages,
   urls,
@@ -165,11 +155,6 @@ export async function go({
   });
 
   if (writeAll) {
-    await writeFavicon({
-      mediaPath,
-      outputPath,
-    });
-
     await writeSharedFilesAndPages({
       outputPath,
       randomLinkDataJSON: generateRandomLinkDataJSON({wikiData}),
@@ -194,7 +179,7 @@ export async function go({
           return null;
         }
 
-        const paths = [];
+        let paths = [];
 
         if (pageSpec.pathsTargetless) {
           const result = pageSpec.pathsTargetless({wikiData});
@@ -224,6 +209,9 @@ export async function go({
           // TODO: Validate each pathsForTargets entry
         }
 
+        paths =
+          paths.filter(path => path.condition?.() ?? true);
+
         return paths;
       })
       .filter(Boolean)
@@ -321,7 +309,7 @@ export async function go({
           language,
           pagePath,
           pagePathStringFromRoot: pathname,
-          to,
+          to: page.absoluteLinks ? absoluteTo : to,
         });
 
         let pageHTML, oEmbedJSON;
@@ -436,12 +424,18 @@ async function writePage({
   ].filter(Boolean));
 }
 
+function filterNoOrigin(route) {
+  return !getOrigin(route.to);
+}
+
 function writeWebRouteSymlinks({
   outputPath,
   webRoutes,
 }) {
   const symlinkRoutes =
-    webRoutes.filter(route => route.statically === 'symlink');
+    webRoutes
+      .filter(route => route.statically === 'symlink')
+      .filter(filterNoOrigin);
 
   const promises =
     symlinkRoutes.map(async route => {
@@ -481,7 +475,9 @@ async function writeWebRouteCopies({
   webRoutes,
 }) {
   const copyRoutes =
-    webRoutes.filter(route => route.statically === 'copy');
+    webRoutes
+      .filter(route => route.statically === 'copy')
+      .filter(filterNoOrigin);
 
   const promises =
     copyRoutes.map(async route => {
@@ -583,30 +579,6 @@ async function writeWebRouteCopies({
   }
 }
 
-async function writeFavicon({
-  mediaPath,
-  outputPath,
-}) {
-  const faviconFile = 'favicon.ico';
-
-  try {
-    await stat(path.join(mediaPath, faviconFile));
-  } catch (error) {
-    return;
-  }
-
-  try {
-    await copyFile(
-      path.join(mediaPath, faviconFile),
-      path.join(outputPath, faviconFile));
-  } catch (error) {
-    logWarn`Failed to copy favicon! ${error.message}`;
-    return;
-  }
-
-  logInfo`Copied favicon to site root.`;
-}
-
 async function writeSharedFilesAndPages({
   outputPath,
   randomLinkDataJSON,