« get me outta code hell

live-dev-server.js « build-modes « write « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/write/build-modes/live-dev-server.js
blob: c3094712cb07ab9eb64caf250e8f806ce72a98e2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import * as pageSpecs from '../../page/index.js';

import {
  logInfo,
  progressCallAll,
} from '../../util/cli.js';

export function getCLIOptions() {
  // Stub.
  return {};
}

export async function go({
  _cliOptions,
  _dataPath,
  _mediaPath,
  _queueSize,

  _defaultLanguage,
  _languages,
  _srcRootPath,
  _urls,
  _urlSpec,
  wikiData,

  _cachebust,
  _developersComment,
  _getSizeOfAdditionalFile,
}) {
  let targetSpecPairs = getPageSpecsWithTargets({wikiData});
  const writes = progressCallAll(`Computing page data & paths for ${targetSpecPairs.length} targets.`,
    targetSpecPairs.map(({
      pageSpec,
      target,
      targetless,
    }) => () =>
      targetless
        ? pageSpec.writeTargetless({wikiData})
        : pageSpec.write(target, {wikiData}))).flat();

  logInfo`Will be serving a total of ${writes.length} pages.`;

  return true;
}

function getPageSpecsWithTargets({
  wikiData,
}) {
  return Object.values(pageSpecs)
    .filter(pageSpec => pageSpec.condition?.({wikiData}) ?? true)
    .flatMap(pageSpec => [
      ...pageSpec.targets
        ? pageSpec.targets({wikiData})
            .map(target => ({pageSpec, target}))
        : [],
      Object.hasOwn(pageSpec, 'writeTargetless') &&
        {pageSpec, targetless: true},
    ])
    .filter(Boolean);
}