@bgord/bun 1.1.5 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/healthcheck.service.d.ts +7 -4
- package/dist/healthcheck.service.d.ts.map +1 -1
- package/dist/healthcheck.service.js +1 -1
- package/dist/healthcheck.service.js.map +1 -1
- package/dist/prerequisites/binary.d.ts +2 -1
- package/dist/prerequisites/binary.d.ts.map +1 -1
- package/dist/prerequisites/binary.js +7 -5
- package/dist/prerequisites/binary.js.map +1 -1
- package/dist/prerequisites/bun.d.ts +2 -1
- package/dist/prerequisites/bun.d.ts.map +1 -1
- package/dist/prerequisites/bun.js +10 -5
- package/dist/prerequisites/bun.js.map +1 -1
- package/dist/prerequisites/clock-drift.d.ts +2 -2
- package/dist/prerequisites/clock-drift.d.ts.map +1 -1
- package/dist/prerequisites/clock-drift.js +7 -5
- package/dist/prerequisites/clock-drift.js.map +1 -1
- package/dist/prerequisites/dependency-vulnerabilities.d.ts +2 -1
- package/dist/prerequisites/dependency-vulnerabilities.d.ts.map +1 -1
- package/dist/prerequisites/dependency-vulnerabilities.js +8 -6
- package/dist/prerequisites/dependency-vulnerabilities.js.map +1 -1
- package/dist/prerequisites/directory.d.ts +3 -2
- package/dist/prerequisites/directory.d.ts.map +1 -1
- package/dist/prerequisites/directory.js +6 -4
- package/dist/prerequisites/directory.js.map +1 -1
- package/dist/prerequisites/external-api.d.ts +2 -1
- package/dist/prerequisites/external-api.d.ts.map +1 -1
- package/dist/prerequisites/external-api.js +7 -5
- package/dist/prerequisites/external-api.js.map +1 -1
- package/dist/prerequisites/jobs.d.ts +2 -1
- package/dist/prerequisites/jobs.d.ts.map +1 -1
- package/dist/prerequisites/jobs.js +6 -4
- package/dist/prerequisites/jobs.js.map +1 -1
- package/dist/prerequisites/log-file.d.ts +2 -1
- package/dist/prerequisites/log-file.d.ts.map +1 -1
- package/dist/prerequisites/log-file.js +7 -5
- package/dist/prerequisites/log-file.js.map +1 -1
- package/dist/prerequisites/mailer.d.ts +2 -1
- package/dist/prerequisites/mailer.d.ts.map +1 -1
- package/dist/prerequisites/mailer.js +6 -4
- package/dist/prerequisites/mailer.js.map +1 -1
- package/dist/prerequisites/memory.d.ts +2 -1
- package/dist/prerequisites/memory.d.ts.map +1 -1
- package/dist/prerequisites/memory.js +5 -4
- package/dist/prerequisites/memory.js.map +1 -1
- package/dist/prerequisites/node.d.ts +2 -1
- package/dist/prerequisites/node.d.ts.map +1 -1
- package/dist/prerequisites/node.js +8 -5
- package/dist/prerequisites/node.js.map +1 -1
- package/dist/prerequisites/outside-connectivity.d.ts +2 -1
- package/dist/prerequisites/outside-connectivity.d.ts.map +1 -1
- package/dist/prerequisites/outside-connectivity.js +7 -5
- package/dist/prerequisites/outside-connectivity.js.map +1 -1
- package/dist/prerequisites/port.d.ts +2 -1
- package/dist/prerequisites/port.d.ts.map +1 -1
- package/dist/prerequisites/port.js +6 -4
- package/dist/prerequisites/port.js.map +1 -1
- package/dist/prerequisites/ram.d.ts +2 -1
- package/dist/prerequisites/ram.d.ts.map +1 -1
- package/dist/prerequisites/ram.js +7 -4
- package/dist/prerequisites/ram.js.map +1 -1
- package/dist/prerequisites/running-user.d.ts +2 -1
- package/dist/prerequisites/running-user.d.ts.map +1 -1
- package/dist/prerequisites/running-user.js +6 -4
- package/dist/prerequisites/running-user.js.map +1 -1
- package/dist/prerequisites/self.d.ts +2 -1
- package/dist/prerequisites/self.d.ts.map +1 -1
- package/dist/prerequisites/self.js +5 -3
- package/dist/prerequisites/self.js.map +1 -1
- package/dist/prerequisites/space.d.ts +2 -1
- package/dist/prerequisites/space.d.ts.map +1 -1
- package/dist/prerequisites/space.js +6 -5
- package/dist/prerequisites/space.js.map +1 -1
- package/dist/prerequisites/sqlite.d.ts +2 -1
- package/dist/prerequisites/sqlite.d.ts.map +1 -1
- package/dist/prerequisites/sqlite.js +7 -5
- package/dist/prerequisites/sqlite.js.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.d.ts +2 -1
- package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.js +9 -5
- package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -1
- package/dist/prerequisites/timezone-utc.d.ts +3 -2
- package/dist/prerequisites/timezone-utc.d.ts.map +1 -1
- package/dist/prerequisites/timezone-utc.js +6 -4
- package/dist/prerequisites/timezone-utc.js.map +1 -1
- package/dist/prerequisites/translations.d.ts +2 -1
- package/dist/prerequisites/translations.d.ts.map +1 -1
- package/dist/prerequisites/translations.js +8 -6
- package/dist/prerequisites/translations.js.map +1 -1
- package/dist/prerequisites.service.d.ts +24 -14
- package/dist/prerequisites.service.d.ts.map +1 -1
- package/dist/prerequisites.service.js +15 -11
- package/dist/prerequisites.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/healthcheck.service.ts +1 -1
- package/src/prerequisites/binary.ts +9 -5
- package/src/prerequisites/bun.ts +12 -5
- package/src/prerequisites/clock-drift.ts +8 -6
- package/src/prerequisites/dependency-vulnerabilities.ts +11 -6
- package/src/prerequisites/directory.ts +8 -5
- package/src/prerequisites/external-api.ts +9 -5
- package/src/prerequisites/jobs.ts +8 -4
- package/src/prerequisites/log-file.ts +9 -5
- package/src/prerequisites/mailer.ts +8 -4
- package/src/prerequisites/memory.ts +7 -4
- package/src/prerequisites/node.ts +10 -5
- package/src/prerequisites/outside-connectivity.ts +9 -5
- package/src/prerequisites/port.ts +10 -4
- package/src/prerequisites/ram.ts +9 -4
- package/src/prerequisites/running-user.ts +8 -4
- package/src/prerequisites/self.ts +7 -3
- package/src/prerequisites/space.ts +8 -5
- package/src/prerequisites/sqlite.ts +9 -5
- package/src/prerequisites/ssl-certificate-expiry.ts +12 -5
- package/src/prerequisites/timezone-utc.ts +8 -5
- package/src/prerequisites/translations.ts +10 -7
- package/src/prerequisites.service.ts +30 -15
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { constants } from "node:fs";
|
|
2
2
|
import fsp from "node:fs/promises";
|
|
3
|
-
import
|
|
3
|
+
import * as tools from "@bgord/tools";
|
|
4
|
+
import type { ClockPort } from "../clock.port";
|
|
4
5
|
import type * as types from "../i18n.service";
|
|
5
6
|
import { I18n } from "../i18n.service";
|
|
6
7
|
import type { JsonFileReaderPort } from "../json-file-reader.port";
|
|
@@ -42,8 +43,10 @@ export class PrerequisiteTranslations implements prereqs.Prerequisite {
|
|
|
42
43
|
this.JsonFileReader = config.JsonFileReader;
|
|
43
44
|
}
|
|
44
45
|
|
|
45
|
-
async verify(): Promise<prereqs.VerifyOutcome> {
|
|
46
|
-
|
|
46
|
+
async verify(clock: ClockPort): Promise<prereqs.VerifyOutcome> {
|
|
47
|
+
const stopwatch = new tools.Stopwatch(clock.now());
|
|
48
|
+
|
|
49
|
+
if (!this.enabled) return prereqs.Verification.undetermined(stopwatch.stop());
|
|
47
50
|
|
|
48
51
|
const translationsPath = this.translationsPath ?? I18n.DEFAULT_TRANSLATIONS_PATH;
|
|
49
52
|
|
|
@@ -57,10 +60,10 @@ export class PrerequisiteTranslations implements prereqs.Prerequisite {
|
|
|
57
60
|
await fsp.access(i18n.getTranslationPathForLanguage(language).get(), constants.R_OK);
|
|
58
61
|
}
|
|
59
62
|
} catch (error) {
|
|
60
|
-
return prereqs.Verification.failure(error as Error);
|
|
63
|
+
return prereqs.Verification.failure(stopwatch.stop(), error as Error);
|
|
61
64
|
}
|
|
62
65
|
|
|
63
|
-
if (supportedLanguages.length === 1) return prereqs.Verification.success();
|
|
66
|
+
if (supportedLanguages.length === 1) return prereqs.Verification.success(stopwatch.stop());
|
|
64
67
|
|
|
65
68
|
const languageToTranslationKeys: Record<tools.LanguageType, types.TranslationsKeyType[]> = {};
|
|
66
69
|
|
|
@@ -91,12 +94,12 @@ export class PrerequisiteTranslations implements prereqs.Prerequisite {
|
|
|
91
94
|
}
|
|
92
95
|
}
|
|
93
96
|
|
|
94
|
-
if (problems.length === 0) return prereqs.Verification.success();
|
|
97
|
+
if (problems.length === 0) return prereqs.Verification.success(stopwatch.stop());
|
|
95
98
|
|
|
96
99
|
const summary = problems
|
|
97
100
|
.map((problem) => `Key: ${problem.key}, exists in ${problem.existsIn}, missing in ${problem.missingIn}`)
|
|
98
101
|
.join("\n");
|
|
99
102
|
|
|
100
|
-
return prereqs.Verification.failure({ message: summary });
|
|
103
|
+
return prereqs.Verification.failure(stopwatch.stop(), { message: summary });
|
|
101
104
|
}
|
|
102
105
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { ClockPort } from "../src/clock.port";
|
|
1
3
|
import type { ErrorInfo, LoggerPort } from "../src/logger.port";
|
|
2
4
|
import { formatError } from "../src/logger-format-error.service";
|
|
3
5
|
|
|
@@ -9,37 +11,45 @@ export enum PrerequisiteStatusEnum {
|
|
|
9
11
|
undetermined = "undetermined",
|
|
10
12
|
}
|
|
11
13
|
|
|
12
|
-
export type VerifySuccess =
|
|
13
|
-
export type VerifyFailure =
|
|
14
|
-
|
|
14
|
+
export type VerifySuccess = { status: PrerequisiteStatusEnum.success; duration: tools.DurationMsType };
|
|
15
|
+
export type VerifyFailure = {
|
|
16
|
+
status: PrerequisiteStatusEnum.failure;
|
|
17
|
+
duration: tools.DurationMsType;
|
|
18
|
+
error?: ErrorInfo;
|
|
19
|
+
};
|
|
20
|
+
export type VerifyUndetermined = {
|
|
21
|
+
status: PrerequisiteStatusEnum.undetermined;
|
|
22
|
+
duration: tools.DurationMsType;
|
|
23
|
+
};
|
|
15
24
|
export type VerifyOutcome = VerifySuccess | VerifyFailure | VerifyUndetermined;
|
|
16
25
|
|
|
17
26
|
export interface Prerequisite {
|
|
18
27
|
readonly label: PrerequisiteLabelType;
|
|
19
28
|
readonly kind: string;
|
|
20
29
|
readonly enabled?: boolean;
|
|
21
|
-
verify(): Promise<VerifyOutcome>;
|
|
30
|
+
verify(clock: ClockPort): Promise<VerifyOutcome>;
|
|
22
31
|
}
|
|
23
32
|
|
|
24
|
-
export type PrerequisiteResult =
|
|
33
|
+
export type PrerequisiteResult = {
|
|
25
34
|
label: PrerequisiteLabelType;
|
|
26
35
|
status: PrerequisiteStatusEnum;
|
|
27
36
|
kind: string;
|
|
28
37
|
error?: ErrorInfo;
|
|
29
|
-
}
|
|
38
|
+
};
|
|
30
39
|
|
|
31
40
|
export class Verification {
|
|
32
|
-
static success(): VerifySuccess {
|
|
33
|
-
return { status: PrerequisiteStatusEnum.success };
|
|
41
|
+
static success(duration: tools.Duration): VerifySuccess {
|
|
42
|
+
return { status: PrerequisiteStatusEnum.success, duration: duration.ms };
|
|
34
43
|
}
|
|
35
|
-
static failure(meta?: Error | ErrorInfo): VerifyFailure {
|
|
44
|
+
static failure(duration: tools.Duration, meta?: Error | ErrorInfo): VerifyFailure {
|
|
36
45
|
return {
|
|
37
46
|
status: PrerequisiteStatusEnum.failure,
|
|
47
|
+
duration: duration.ms,
|
|
38
48
|
error: meta instanceof Error ? formatError(meta) : meta,
|
|
39
49
|
};
|
|
40
50
|
}
|
|
41
|
-
static undetermined(): VerifyUndetermined {
|
|
42
|
-
return { status: PrerequisiteStatusEnum.undetermined };
|
|
51
|
+
static undetermined(duration: tools.Duration): VerifyUndetermined {
|
|
52
|
+
return { status: PrerequisiteStatusEnum.undetermined, duration: duration.ms };
|
|
43
53
|
}
|
|
44
54
|
}
|
|
45
55
|
|
|
@@ -47,23 +57,28 @@ export type PrerequisiteConfigType = { label: string; enabled?: boolean };
|
|
|
47
57
|
|
|
48
58
|
export const PrerequisitesError = { Failure: "prerequisites.failure" } as const;
|
|
49
59
|
|
|
60
|
+
type Dependencies = { logger: LoggerPort; clock: ClockPort };
|
|
61
|
+
|
|
50
62
|
/** @public */
|
|
51
63
|
export class Prerequisites {
|
|
52
64
|
private readonly base = { component: "infra", operation: "startup" };
|
|
53
65
|
|
|
54
|
-
constructor(private readonly
|
|
66
|
+
constructor(private readonly deps: Dependencies) {}
|
|
55
67
|
|
|
56
68
|
async check(prerequisites: Prerequisite[]) {
|
|
57
69
|
const results = await Promise.all(
|
|
58
|
-
prerequisites.map(async (prerequisite) => ({
|
|
70
|
+
prerequisites.map(async (prerequisite) => ({
|
|
71
|
+
prerequisite,
|
|
72
|
+
outcome: await prerequisite.verify(this.deps.clock),
|
|
73
|
+
})),
|
|
59
74
|
);
|
|
60
75
|
|
|
61
76
|
const failed = results.filter((result) => result.outcome.status === PrerequisiteStatusEnum.failure);
|
|
62
77
|
|
|
63
|
-
if (failed.length === 0) return this.logger.info({ message: "Prerequisites ok", ...this.base });
|
|
78
|
+
if (failed.length === 0) return this.deps.logger.info({ message: "Prerequisites ok", ...this.base });
|
|
64
79
|
|
|
65
80
|
for (const failure of failed) {
|
|
66
|
-
this.logger.error({
|
|
81
|
+
this.deps.logger.error({
|
|
67
82
|
message: "Prerequisite failed",
|
|
68
83
|
metadata: { label: failure.prerequisite.label, kind: failure.prerequisite.kind },
|
|
69
84
|
// @ts-expect-error
|