shared.ts
⎇
Raw
1import path from "node:path";
2import type { FfprobeData } from "./utils";
3import commandExists from "command-exists";
4
5export const coverRegex = process.env.COVER_REGEX || /(C|c)over.(png|jpg)$/;
6export const musicRoot = process.env.MUSIC_ROOT || "";
7if (musicRoot === "") {
8 console.error("Please define the environment variable MUSIC_ROOT");
9 process.exit(1);
10}
11
12if (!path.isAbsolute(musicRoot)) {
13 console.error(`Music root ${musicRoot} is not absolute`);
14 process.exit(1);
15}
16
17if (!commandExists.sync("ffmpeg")) {
18 console.error("Required command ffmpeg not found in PATH");
19 process.exit(1);
20}
21if (!commandExists.sync("ffprobe")) {
22 console.error("Required command ffprobe not found in PATH");
23 process.exit(1);
24}
25if (!commandExists.sync("tar")) {
26 console.error("Required command tar not found in PATH");
27 process.exit(1);
28}
29
30export const mediaTypes = ["audio", "video"];
31export const allowedTypes = [...mediaTypes, "image"];
32
33export const fileTypeCache = new Map<string, string>();
34export const probeCache = new Map<string, FfprobeData>();
35
36export class PathInfo {
37 constructor(public mimeType: string) {}
38}
39
40export class ServerError {
41 constructor(
42 public status: number,
43 public error: string,
44 ) {}
45}
46