Files
mini-loader/packages/server/src/runtime/runtime.ts
2024-01-14 12:49:54 +01:00

62 lines
1.5 KiB
TypeScript

import { resolve } from 'path';
import envPaths from 'env-paths';
import { Database } from '../database/database.js';
import { Repos } from '../repos/repos.js';
import { Runner } from '../runner/runner.js';
import { Config } from '../config/config.js';
import { Auth } from '../auth/auth.js';
import { Scheduler } from '../scheduler/scheduler.js';
const paths = envPaths('mini-loader-server');
class Runtime {
#repos: Repos;
#runner: Runner;
#auth: Auth;
#scheduler: Scheduler;
constructor(options: Config) {
const database = new Database(options.database);
this.#repos = new Repos({ database, config: options });
this.#runner = new Runner({ repos: this.#repos, config: options });
this.#auth = new Auth({ config: options });
this.#scheduler = new Scheduler({ runs: this.#repos.runs, schedules: this.#repos.schedules });
}
public get repos() {
return this.#repos;
}
public get runner() {
return this.#runner;
}
public get auth() {
return this.#auth;
}
public get scheduler() {
return this.#scheduler;
}
public static create = async () => {
const runtime = new Runtime({
database: {
client: 'sqlite3',
connection: {
filename: resolve(paths.data, 'database.sqlite'),
},
useNullAsDefault: true,
},
files: {
data: process.env.DATA_DIR || resolve(paths.data, 'data', 'files'),
cache: process.env.CACHE_DIR || resolve(paths.cache, 'data', 'cache'),
},
});
return runtime;
};
}
export { Runtime };