Skip to content

Commit c582f12

Browse files
committed
wip: refactoring dependencies
Signed-off-by: Ivo Yankov <ivo@devlabs.bg>
1 parent a4ef700 commit c582f12

22 files changed

+156
-262
lines changed

package-lock.json

+13-178
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@
7171
"stream-buffers": "^3.0.3",
7272
"tar": "^7.4.3",
7373
"tsx": "^4.19.2",
74+
"tsyringe-neo": "^5.1.0",
7475
"uuid": "^11.0.3",
7576
"validator": "^13.12.0",
7677
"winston": "^3.17.0",

src/commands/base.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {type CommandFlag} from '../types/flag_types.js';
3131
import {type Lease} from '../core/lease/lease.js';
3232
import {Listr} from 'listr2';
3333
import path from 'path';
34+
import {container, injectable} from "tsyringe-neo";
3435

3536
export interface CommandHandlers {
3637
parent: BaseCommand;
@@ -48,7 +49,7 @@ export abstract class BaseCommand extends ShellRunner {
4849
protected readonly remoteConfigManager: RemoteConfigManager;
4950

5051
constructor(opts: Opts) {
51-
if (!opts || !opts.logger) throw new Error('An instance of core/SoloLogger is required');
52+
// if (!opts || !opts.logger) throw new Error('An instance of core/SoloLogger is required');
5253
if (!opts || !opts.helm) throw new Error('An instance of core/Helm is required');
5354
if (!opts || !opts.k8) throw new Error('An instance of core/K8 is required');
5455
if (!opts || !opts.chartManager) throw new Error('An instance of core/ChartManager is required');
@@ -57,8 +58,7 @@ export abstract class BaseCommand extends ShellRunner {
5758
if (!opts || !opts.localConfig) throw new Error('An instance of core/LocalConfig is required');
5859
if (!opts || !opts.remoteConfigManager)
5960
throw new Error('An instance of core/config/RemoteConfigManager is required');
60-
61-
super(opts.logger);
61+
super();
6262

6363
this.helm = opts.helm;
6464
this.k8 = opts.k8;

src/core/container_init.ts

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import {container} from "tsyringe-neo";
2+
import {SoloLogger} from "./logging.js";
3+
import {PackageDownloader} from "./package_downloader.js";
4+
import {Zippy} from "./zippy.js";
5+
import {DependencyManager, HelmDependencyManager} from "./dependency_managers/index.js";
6+
import * as constants from "./constants.js";
7+
import {Helm} from "./helm.js";
8+
import {ChartManager} from "./chart_manager.js";
9+
import {ConfigManager} from "./config_manager.js";
10+
import {K8} from "./k8.js";
11+
import {AccountManager} from "./account_manager.js";
12+
import {PlatformInstaller} from "./platform_installer.js";
13+
import {KeyManager} from "./key_manager.js";
14+
import {ProfileManager} from "./profile_manager.js";
15+
import type {LeaseRenewalService} from "./lease/lease.js";
16+
import {IntervalLeaseRenewalService} from "./lease/interval_lease_renewal.js";
17+
import {LeaseManager} from "./lease/lease_manager.js";
18+
import {CertificateManager} from "./certificate_manager.js";
19+
import path from "path";
20+
import {LocalConfig} from "./config/local_config.js";
21+
import {RemoteConfigManager} from "./config/remote/remote_config_manager.js";
22+
23+
container.register<SoloLogger>(SoloLogger, {useValue: new SoloLogger('debug', false)});
24+
container.register<PackageDownloader>(PackageDownloader, {useValue: new PackageDownloader()});
25+
container.register<Zippy>(Zippy, {useValue: new Zippy()});
26+
container.register<HelmDependencyManager>(HelmDependencyManager, {useValue: new HelmDependencyManager()});
27+
container.register<DependencyManager>(DependencyManager, {useValue: new DependencyManager()});
28+
container.register<Helm>(Helm, {useValue: new Helm()});
29+
30+
31+
// const chartManager = new ChartManager(helm, logger);
32+
// const configManager = new ConfigManager(logger);
33+
// const k8 = new K8(configManager, logger);
34+
// const accountManager = new AccountManager(logger, k8);
35+
// const platformInstaller = new PlatformInstaller(logger, k8, configManager);
36+
// const keyManager = new KeyManager(logger);
37+
// const profileManager = new ProfileManager(logger, configManager);
38+
// const leaseRenewalService: LeaseRenewalService = new IntervalLeaseRenewalService();
39+
// const leaseManager = new LeaseManager(k8, configManager, logger, leaseRenewalService);
40+
// const certificateManager = new CertificateManager(k8, logger, configManager);
41+
// const localConfigPath = path.join(constants.SOLO_CACHE_DIR, constants.DEFAULT_LOCAL_CONFIG_FILE);
42+
// const localConfig = new LocalConfig(localConfigPath, logger, configManager);
43+
// const remoteConfigManager = new RemoteConfigManager(k8, logger, localConfig, configManager);

src/core/dependency_managers/dependency_manager.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,20 @@
1515
*
1616
*/
1717
import os from 'os';
18-
import {SoloError, MissingArgumentError} from '../errors.js';
18+
import {SoloError} from '../errors.js';
1919
import {ShellRunner} from '../shell_runner.js';
20-
import {type SoloLogger} from '../logging.js';
21-
import {type HelmDependencyManager} from './helm_dependency_manager.js';
20+
import {HelmDependencyManager} from './helm_dependency_manager.js';
2221
import {type ListrTask} from 'listr2';
22+
import {autoInjectable} from "tsyringe-neo";
23+
import * as constants from "../constants.js";
2324

25+
@autoInjectable()
2426
export class DependencyManager extends ShellRunner {
25-
constructor(
26-
logger: SoloLogger,
27-
private readonly depManagerMap: Map<string, HelmDependencyManager>,
28-
) {
29-
if (!logger) throw new MissingArgumentError('an instance of core/SoloLogger is required', logger);
30-
super(logger);
31-
if (!depManagerMap) throw new MissingArgumentError('A map of dependency managers are required');
27+
private readonly depManagerMap: Map<string, HelmDependencyManager>;
28+
29+
constructor(helmDepManager?: HelmDependencyManager) {
30+
super();
31+
this.depManagerMap = new Map().set(constants.HELM, helmDepManager);
3232
}
3333

3434
/**

src/core/dependency_managers/helm_dependency_manager.ts

+9-11
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ import * as util from 'util';
2121
import {IllegalArgumentError, MissingArgumentError} from '../errors.js';
2222
import * as helpers from '../helpers.js';
2323
import * as constants from '../constants.js';
24-
import {type PackageDownloader} from '../package_downloader.js';
25-
import {type Zippy} from '../zippy.js';
24+
import {PackageDownloader} from '../package_downloader.js';
25+
import {Zippy} from '../zippy.js';
2626
import {Templates} from '../templates.js';
2727
import * as version from '../../../version.js';
2828
import {ShellRunner} from '../shell_runner.js';
2929
import * as semver from 'semver';
3030
import {OS_WIN32, OS_WINDOWS} from '../constants.js';
3131
import {type SoloLogger} from '../logging.js';
32+
import {autoInjectable, container, singleton} from "tsyringe-neo";
3233

3334
// constants required by HelmDependencyManager
3435
const HELM_RELEASE_BASE_URL = 'https://get.helm.sh';
@@ -42,32 +43,29 @@ const HELM_ARTIFACT_EXT: Map<string, string> = new Map()
4243
/**
4344
* Helm dependency manager installs or uninstalls helm client at SOLO_HOME_DIR/bin directory
4445
*/
46+
@singleton()
4547
export class HelmDependencyManager extends ShellRunner {
4648
private readonly osPlatform: string;
4749
private readonly osArch: string;
4850
private helmPath: string;
4951
private readonly artifactName: string;
5052
private readonly helmURL: string;
5153
private readonly checksumURL: string;
54+
private readonly downloader;
55+
private readonly zippy;
5256

5357
constructor(
54-
private readonly downloader: PackageDownloader,
55-
private readonly zippy: Zippy,
56-
logger: SoloLogger,
5758
private readonly installationDir = path.join(constants.SOLO_HOME_DIR, 'bin'),
5859
osPlatform = os.platform(),
5960
osArch = os.arch(),
6061
private readonly helmVersion = version.HELM_VERSION,
6162
) {
62-
super(logger);
63+
super();
6364

64-
if (!downloader) throw new MissingArgumentError('An instance of core/PackageDownloader is required');
65-
if (!zippy) throw new MissingArgumentError('An instance of core/Zippy is required');
66-
if (!logger) throw new IllegalArgumentError('an instance of core/SoloLogger is required', logger);
6765
if (!installationDir) throw new MissingArgumentError('installation directory is required');
6866

69-
this.downloader = downloader;
70-
this.zippy = zippy;
67+
this.downloader = container.resolve(PackageDownloader);
68+
this.zippy = container.resolve(Zippy);
7169
this.installationDir = installationDir;
7270
// Node.js uses 'win32' for windows in package.json os field, but helm uses 'windows'
7371
if (osPlatform === OS_WIN32) {

0 commit comments

Comments
 (0)