« get me outta code hell

web-routes.js « src - hsmusic-wiki - HSMusic - static wiki software cataloguing collaborative creation
about summary refs log tree commit diff
path: root/src/web-routes.js
blob: 7e08d06f26ebecb06fdedf799c98916542e2463d (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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import {readdir} from 'node:fs/promises';
import * as path from 'node:path';
import {fileURLToPath} from 'node:url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));

const codeSrcPath = __dirname;
const codeRootPath = path.resolve(codeSrcPath, '..');

function getNodeDependencyRootPath(dependencyName) {
  return (
    path.dirname(
      fileURLToPath(
        import.meta.resolve(dependencyName))));
}

export const stationaryCodeRoutes = [
  {
    from: path.join(codeSrcPath, 'static', 'css'),
    to: ['staticCSS.root'],
  },

  {
    from: path.join(codeSrcPath, 'static', 'js'),
    to: ['staticJS.root'],
  },

  {
    from: path.join(codeSrcPath, 'static', 'misc'),
    to: ['staticMisc.root'],
  },

  {
    from: path.join(codeSrcPath, 'util'),
    to: ['staticSharedUtil.root'],
  },
];

function quickNodeDependency({
  name,
  path: subpath = '',
}) {
  const root = getNodeDependencyRootPath(name);

  return [
    {
      from:
        (subpath
          ? path.join(root, subpath)
          : root),

      to: ['staticLib.path', name],
    },
  ];
}

export const dependencyRoutes = [
  quickNodeDependency({
    name: 'chroma-js',
  }),

  quickNodeDependency({
    name: 'compress-json',
    path: '..', // exit dist, access bundle.js
  }),

  quickNodeDependency({
    name: 'flexsearch',
  }),

  quickNodeDependency({
    name: 'msgpackr',
    path: 'dist',
  }),
].flat();

export const allStaticWebRoutes = [
  ...stationaryCodeRoutes,
  ...dependencyRoutes,
];

export async function identifyDynamicWebRoutes({
  mediaPath,
  mediaCachePath,
  wikiCachePath,
}) {
  const routeFunctions = [
    () => Promise.resolve([
      {from: path.resolve(mediaPath), to: ['media.root']},
      {from: path.resolve(mediaCachePath), to: ['thumb.root']},
    ]),

    () => {
      if (!wikiCachePath) return [];

      const from =
        path.resolve(path.join(wikiCachePath, 'search'));

      return (
        readdir(from).then(
          () => [{from, to: ['searchData.root']}],
          () => []));
    },
  ];

  const routeCheckPromises =
    routeFunctions.map(fn => fn());

  const routeCheckResults =
    await Promise.all(routeCheckPromises);

  return routeCheckResults.flat();
}

export async function identifyAllWebRoutes(opts) {
  return [
    ...allStaticWebRoutes,
    ...await identifyDynamicWebRoutes(opts),
  ];
}