@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.
Files changed (117) hide show
  1. package/dist/healthcheck.service.d.ts +7 -4
  2. package/dist/healthcheck.service.d.ts.map +1 -1
  3. package/dist/healthcheck.service.js +1 -1
  4. package/dist/healthcheck.service.js.map +1 -1
  5. package/dist/prerequisites/binary.d.ts +2 -1
  6. package/dist/prerequisites/binary.d.ts.map +1 -1
  7. package/dist/prerequisites/binary.js +7 -5
  8. package/dist/prerequisites/binary.js.map +1 -1
  9. package/dist/prerequisites/bun.d.ts +2 -1
  10. package/dist/prerequisites/bun.d.ts.map +1 -1
  11. package/dist/prerequisites/bun.js +10 -5
  12. package/dist/prerequisites/bun.js.map +1 -1
  13. package/dist/prerequisites/clock-drift.d.ts +2 -2
  14. package/dist/prerequisites/clock-drift.d.ts.map +1 -1
  15. package/dist/prerequisites/clock-drift.js +7 -5
  16. package/dist/prerequisites/clock-drift.js.map +1 -1
  17. package/dist/prerequisites/dependency-vulnerabilities.d.ts +2 -1
  18. package/dist/prerequisites/dependency-vulnerabilities.d.ts.map +1 -1
  19. package/dist/prerequisites/dependency-vulnerabilities.js +8 -6
  20. package/dist/prerequisites/dependency-vulnerabilities.js.map +1 -1
  21. package/dist/prerequisites/directory.d.ts +3 -2
  22. package/dist/prerequisites/directory.d.ts.map +1 -1
  23. package/dist/prerequisites/directory.js +6 -4
  24. package/dist/prerequisites/directory.js.map +1 -1
  25. package/dist/prerequisites/external-api.d.ts +2 -1
  26. package/dist/prerequisites/external-api.d.ts.map +1 -1
  27. package/dist/prerequisites/external-api.js +7 -5
  28. package/dist/prerequisites/external-api.js.map +1 -1
  29. package/dist/prerequisites/jobs.d.ts +2 -1
  30. package/dist/prerequisites/jobs.d.ts.map +1 -1
  31. package/dist/prerequisites/jobs.js +6 -4
  32. package/dist/prerequisites/jobs.js.map +1 -1
  33. package/dist/prerequisites/log-file.d.ts +2 -1
  34. package/dist/prerequisites/log-file.d.ts.map +1 -1
  35. package/dist/prerequisites/log-file.js +7 -5
  36. package/dist/prerequisites/log-file.js.map +1 -1
  37. package/dist/prerequisites/mailer.d.ts +2 -1
  38. package/dist/prerequisites/mailer.d.ts.map +1 -1
  39. package/dist/prerequisites/mailer.js +6 -4
  40. package/dist/prerequisites/mailer.js.map +1 -1
  41. package/dist/prerequisites/memory.d.ts +2 -1
  42. package/dist/prerequisites/memory.d.ts.map +1 -1
  43. package/dist/prerequisites/memory.js +5 -4
  44. package/dist/prerequisites/memory.js.map +1 -1
  45. package/dist/prerequisites/node.d.ts +2 -1
  46. package/dist/prerequisites/node.d.ts.map +1 -1
  47. package/dist/prerequisites/node.js +8 -5
  48. package/dist/prerequisites/node.js.map +1 -1
  49. package/dist/prerequisites/outside-connectivity.d.ts +2 -1
  50. package/dist/prerequisites/outside-connectivity.d.ts.map +1 -1
  51. package/dist/prerequisites/outside-connectivity.js +7 -5
  52. package/dist/prerequisites/outside-connectivity.js.map +1 -1
  53. package/dist/prerequisites/port.d.ts +2 -1
  54. package/dist/prerequisites/port.d.ts.map +1 -1
  55. package/dist/prerequisites/port.js +6 -4
  56. package/dist/prerequisites/port.js.map +1 -1
  57. package/dist/prerequisites/ram.d.ts +2 -1
  58. package/dist/prerequisites/ram.d.ts.map +1 -1
  59. package/dist/prerequisites/ram.js +7 -4
  60. package/dist/prerequisites/ram.js.map +1 -1
  61. package/dist/prerequisites/running-user.d.ts +2 -1
  62. package/dist/prerequisites/running-user.d.ts.map +1 -1
  63. package/dist/prerequisites/running-user.js +6 -4
  64. package/dist/prerequisites/running-user.js.map +1 -1
  65. package/dist/prerequisites/self.d.ts +2 -1
  66. package/dist/prerequisites/self.d.ts.map +1 -1
  67. package/dist/prerequisites/self.js +5 -3
  68. package/dist/prerequisites/self.js.map +1 -1
  69. package/dist/prerequisites/space.d.ts +2 -1
  70. package/dist/prerequisites/space.d.ts.map +1 -1
  71. package/dist/prerequisites/space.js +6 -5
  72. package/dist/prerequisites/space.js.map +1 -1
  73. package/dist/prerequisites/sqlite.d.ts +2 -1
  74. package/dist/prerequisites/sqlite.d.ts.map +1 -1
  75. package/dist/prerequisites/sqlite.js +7 -5
  76. package/dist/prerequisites/sqlite.js.map +1 -1
  77. package/dist/prerequisites/ssl-certificate-expiry.d.ts +2 -1
  78. package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -1
  79. package/dist/prerequisites/ssl-certificate-expiry.js +9 -5
  80. package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -1
  81. package/dist/prerequisites/timezone-utc.d.ts +3 -2
  82. package/dist/prerequisites/timezone-utc.d.ts.map +1 -1
  83. package/dist/prerequisites/timezone-utc.js +6 -4
  84. package/dist/prerequisites/timezone-utc.js.map +1 -1
  85. package/dist/prerequisites/translations.d.ts +2 -1
  86. package/dist/prerequisites/translations.d.ts.map +1 -1
  87. package/dist/prerequisites/translations.js +8 -6
  88. package/dist/prerequisites/translations.js.map +1 -1
  89. package/dist/prerequisites.service.d.ts +24 -14
  90. package/dist/prerequisites.service.d.ts.map +1 -1
  91. package/dist/prerequisites.service.js +15 -11
  92. package/dist/prerequisites.service.js.map +1 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +2 -2
  95. package/src/healthcheck.service.ts +1 -1
  96. package/src/prerequisites/binary.ts +9 -5
  97. package/src/prerequisites/bun.ts +12 -5
  98. package/src/prerequisites/clock-drift.ts +8 -6
  99. package/src/prerequisites/dependency-vulnerabilities.ts +11 -6
  100. package/src/prerequisites/directory.ts +8 -5
  101. package/src/prerequisites/external-api.ts +9 -5
  102. package/src/prerequisites/jobs.ts +8 -4
  103. package/src/prerequisites/log-file.ts +9 -5
  104. package/src/prerequisites/mailer.ts +8 -4
  105. package/src/prerequisites/memory.ts +7 -4
  106. package/src/prerequisites/node.ts +10 -5
  107. package/src/prerequisites/outside-connectivity.ts +9 -5
  108. package/src/prerequisites/port.ts +10 -4
  109. package/src/prerequisites/ram.ts +9 -4
  110. package/src/prerequisites/running-user.ts +8 -4
  111. package/src/prerequisites/self.ts +7 -3
  112. package/src/prerequisites/space.ts +8 -5
  113. package/src/prerequisites/sqlite.ts +9 -5
  114. package/src/prerequisites/ssl-certificate-expiry.ts +12 -5
  115. package/src/prerequisites/timezone-utc.ts +8 -5
  116. package/src/prerequisites/translations.ts +10 -7
  117. 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 type * as tools from "@bgord/tools";
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
- if (!this.enabled) return prereqs.Verification.undetermined();
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 = Readonly<{ status: PrerequisiteStatusEnum.success }>;
13
- export type VerifyFailure = Readonly<{ status: PrerequisiteStatusEnum.failure; error?: ErrorInfo }>;
14
- export type VerifyUndetermined = Readonly<{ status: PrerequisiteStatusEnum.undetermined }>;
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 = Readonly<{
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 logger: LoggerPort) {}
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) => ({ prerequisite, outcome: await prerequisite.verify() })),
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