@bgord/bun 0.5.0 → 0.7.0

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 (264) hide show
  1. package/dist/api-key-shield.d.ts +2 -2
  2. package/dist/api-key-shield.d.ts.map +1 -1
  3. package/dist/api-version.d.ts.map +1 -1
  4. package/dist/api-version.js +2 -2
  5. package/dist/api-version.js.map +1 -1
  6. package/dist/auth-shield.d.ts +11 -10
  7. package/dist/auth-shield.d.ts.map +1 -1
  8. package/dist/auth-shield.js +6 -13
  9. package/dist/auth-shield.js.map +1 -1
  10. package/dist/basic-auth.d.ts +6 -0
  11. package/dist/basic-auth.d.ts.map +1 -0
  12. package/dist/basic-auth.js +4 -0
  13. package/dist/basic-auth.js.map +1 -0
  14. package/dist/build-info-repository.d.ts +5 -3
  15. package/dist/build-info-repository.d.ts.map +1 -0
  16. package/dist/build-info-repository.js +18 -0
  17. package/dist/build-info-repository.js.map +1 -0
  18. package/dist/cache-resolver.d.ts +46 -0
  19. package/dist/cache-resolver.d.ts.map +1 -0
  20. package/dist/cache-resolver.js +44 -0
  21. package/dist/cache-resolver.js.map +1 -0
  22. package/dist/cache-response.d.ts +0 -4
  23. package/dist/cache-response.d.ts.map +1 -1
  24. package/dist/cache-response.js +2 -6
  25. package/dist/cache-response.js.map +1 -1
  26. package/dist/cache-static-files.js +3 -3
  27. package/dist/cache-static-files.js.map +1 -1
  28. package/dist/context.d.ts +7 -3
  29. package/dist/context.d.ts.map +1 -1
  30. package/dist/context.js.map +1 -1
  31. package/dist/correlation-id.d.ts +4 -0
  32. package/dist/correlation-id.d.ts.map +1 -0
  33. package/dist/correlation-id.js +3 -0
  34. package/dist/correlation-id.js.map +1 -0
  35. package/dist/download-file.d.ts +5 -4
  36. package/dist/download-file.d.ts.map +1 -1
  37. package/dist/env-validator.d.ts +21 -0
  38. package/dist/env-validator.d.ts.map +1 -0
  39. package/dist/env-validator.js +28 -0
  40. package/dist/env-validator.js.map +1 -0
  41. package/dist/etag-extractor.d.ts +3 -8
  42. package/dist/etag-extractor.d.ts.map +1 -1
  43. package/dist/etag-extractor.js +3 -18
  44. package/dist/etag-extractor.js.map +1 -1
  45. package/dist/file-uploader.d.ts +2 -2
  46. package/dist/file-uploader.d.ts.map +1 -1
  47. package/dist/file-uploader.js +3 -3
  48. package/dist/file-uploader.js.map +1 -1
  49. package/dist/graceful-shutdown.d.ts.map +1 -1
  50. package/dist/graceful-shutdown.js +3 -3
  51. package/dist/graceful-shutdown.js.map +1 -1
  52. package/dist/healthcheck.d.ts +12 -11
  53. package/dist/healthcheck.d.ts.map +1 -1
  54. package/dist/healthcheck.js +15 -11
  55. package/dist/healthcheck.js.map +1 -1
  56. package/dist/http-logger.d.ts +2 -2
  57. package/dist/http-logger.d.ts.map +1 -1
  58. package/dist/http-logger.js +4 -3
  59. package/dist/http-logger.js.map +1 -1
  60. package/dist/i18n.d.ts +10 -15
  61. package/dist/i18n.d.ts.map +1 -1
  62. package/dist/i18n.js +10 -25
  63. package/dist/i18n.js.map +1 -1
  64. package/dist/index.d.ts +28 -7
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +28 -7
  67. package/dist/index.js.map +1 -1
  68. package/dist/jobs.d.ts +1 -0
  69. package/dist/jobs.d.ts.map +1 -0
  70. package/dist/jobs.js +72 -0
  71. package/dist/jobs.js.map +1 -0
  72. package/dist/logger.d.ts +23 -7
  73. package/dist/logger.d.ts.map +1 -0
  74. package/dist/logger.js +87 -0
  75. package/dist/logger.js.map +1 -0
  76. package/dist/mailer.d.ts +23 -1
  77. package/dist/mailer.d.ts.map +1 -0
  78. package/dist/mailer.js +33 -0
  79. package/dist/mailer.js.map +1 -0
  80. package/dist/memory-consumption.d.ts +3 -2
  81. package/dist/memory-consumption.d.ts.map +1 -0
  82. package/dist/memory-consumption.js +8 -0
  83. package/dist/memory-consumption.js.map +1 -0
  84. package/dist/new-uuid.d.ts +4 -0
  85. package/dist/new-uuid.d.ts.map +1 -0
  86. package/dist/new-uuid.js +6 -0
  87. package/dist/new-uuid.js.map +1 -0
  88. package/dist/node-env.vo.d.ts +9 -0
  89. package/dist/node-env.vo.d.ts.map +1 -0
  90. package/dist/node-env.vo.js +10 -0
  91. package/dist/node-env.vo.js.map +1 -0
  92. package/dist/passwords.d.ts +21 -0
  93. package/dist/passwords.d.ts.map +1 -0
  94. package/dist/passwords.js +42 -0
  95. package/dist/passwords.js.map +1 -0
  96. package/dist/path.d.ts +4 -0
  97. package/dist/path.d.ts.map +1 -0
  98. package/dist/path.js +3 -0
  99. package/dist/path.js.map +1 -0
  100. package/dist/port.d.ts +4 -0
  101. package/dist/port.d.ts.map +1 -0
  102. package/dist/port.js +3 -0
  103. package/dist/port.js.map +1 -0
  104. package/dist/prerequisites/binary.d.ts +4 -3
  105. package/dist/prerequisites/binary.d.ts.map +1 -0
  106. package/dist/prerequisites/binary.js +29 -0
  107. package/dist/prerequisites/binary.js.map +1 -0
  108. package/dist/prerequisites/bun.d.ts +7 -4
  109. package/dist/prerequisites/bun.d.ts.map +1 -0
  110. package/dist/prerequisites/bun.js +18 -0
  111. package/dist/prerequisites/bun.js.map +1 -0
  112. package/dist/prerequisites/index.d.ts +17 -0
  113. package/dist/prerequisites/index.d.ts.map +1 -0
  114. package/dist/prerequisites/index.js +17 -0
  115. package/dist/prerequisites/index.js.map +1 -0
  116. package/dist/prerequisites/jobs.d.ts +4 -2
  117. package/dist/prerequisites/jobs.d.ts.map +1 -0
  118. package/dist/prerequisites/jobs.js +16 -0
  119. package/dist/prerequisites/jobs.js.map +1 -0
  120. package/dist/prerequisites/log-file.d.ts +15 -0
  121. package/dist/prerequisites/log-file.d.ts.map +1 -0
  122. package/dist/prerequisites/log-file.js +22 -0
  123. package/dist/prerequisites/log-file.js.map +1 -0
  124. package/dist/prerequisites/mailer.d.ts +4 -2
  125. package/dist/prerequisites/mailer.d.ts.map +1 -0
  126. package/dist/prerequisites/mailer.js +21 -0
  127. package/dist/prerequisites/mailer.js.map +1 -0
  128. package/dist/prerequisites/memory.d.ts +6 -4
  129. package/dist/prerequisites/memory.d.ts.map +1 -0
  130. package/dist/prerequisites/memory.js +20 -0
  131. package/dist/prerequisites/memory.js.map +1 -0
  132. package/dist/prerequisites/node.d.ts +6 -4
  133. package/dist/prerequisites/node.d.ts.map +1 -0
  134. package/dist/prerequisites/node.js +23 -0
  135. package/dist/prerequisites/node.js.map +1 -0
  136. package/dist/prerequisites/outside-connectivity.d.ts +4 -2
  137. package/dist/prerequisites/outside-connectivity.d.ts.map +1 -0
  138. package/dist/prerequisites/outside-connectivity.js +21 -0
  139. package/dist/prerequisites/outside-connectivity.js.map +1 -0
  140. package/dist/prerequisites/path.d.ts +4 -2
  141. package/dist/prerequisites/path.d.ts.map +1 -0
  142. package/dist/prerequisites/path.js +26 -0
  143. package/dist/prerequisites/path.js.map +1 -0
  144. package/dist/prerequisites/port.d.ts +6 -4
  145. package/dist/prerequisites/port.d.ts.map +1 -0
  146. package/dist/prerequisites/port.js +26 -0
  147. package/dist/prerequisites/port.js.map +1 -0
  148. package/dist/prerequisites/ram.d.ts +6 -4
  149. package/dist/prerequisites/ram.d.ts.map +1 -0
  150. package/dist/prerequisites/ram.js +23 -0
  151. package/dist/prerequisites/ram.js.map +1 -0
  152. package/dist/prerequisites/self.d.ts +4 -2
  153. package/dist/prerequisites/self.d.ts.map +1 -0
  154. package/dist/prerequisites/self.js +15 -0
  155. package/dist/prerequisites/self.js.map +1 -0
  156. package/dist/prerequisites/space.d.ts +6 -4
  157. package/dist/prerequisites/space.d.ts.map +1 -0
  158. package/dist/prerequisites/space.js +26 -0
  159. package/dist/prerequisites/space.js.map +1 -0
  160. package/dist/prerequisites/ssl-certificate-expiry.d.ts +4 -2
  161. package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -0
  162. package/dist/prerequisites/ssl-certificate-expiry.js +24 -0
  163. package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -0
  164. package/dist/prerequisites/timezone-utc.d.ts +8 -4
  165. package/dist/prerequisites/timezone-utc.d.ts.map +1 -0
  166. package/dist/prerequisites/timezone-utc.js +23 -0
  167. package/dist/prerequisites/timezone-utc.js.map +1 -0
  168. package/dist/prerequisites/translations.d.ts +4 -2
  169. package/dist/prerequisites/translations.d.ts.map +1 -0
  170. package/dist/prerequisites/translations.js +59 -0
  171. package/dist/prerequisites/translations.js.map +1 -0
  172. package/dist/prerequisites.d.ts +2 -0
  173. package/dist/prerequisites.d.ts.map +1 -0
  174. package/dist/prerequisites.js +83 -0
  175. package/dist/prerequisites.js.map +1 -0
  176. package/dist/rate-limit-shield.d.ts +2 -2
  177. package/dist/rate-limit-shield.d.ts.map +1 -1
  178. package/dist/rate-limit-shield.js +2 -2
  179. package/dist/rate-limit-shield.js.map +1 -1
  180. package/dist/session-id.d.ts +7 -0
  181. package/dist/session-id.d.ts.map +1 -0
  182. package/dist/session-id.js +10 -0
  183. package/dist/session-id.js.map +1 -0
  184. package/dist/setup.d.ts +3 -2
  185. package/dist/setup.d.ts.map +1 -1
  186. package/dist/setup.js +11 -6
  187. package/dist/setup.js.map +1 -1
  188. package/dist/time-zone-offset.d.ts +6 -6
  189. package/dist/time-zone-offset.d.ts.map +1 -1
  190. package/dist/time-zone-offset.js +4 -4
  191. package/dist/time-zone-offset.js.map +1 -1
  192. package/dist/tsconfig.tsbuildinfo +1 -1
  193. package/dist/uptime.d.ts +4 -4
  194. package/dist/uptime.d.ts.map +1 -0
  195. package/dist/uptime.js +10 -0
  196. package/dist/uptime.js.map +1 -0
  197. package/dist/username.d.ts +11 -0
  198. package/dist/username.d.ts.map +1 -0
  199. package/dist/username.js +13 -0
  200. package/dist/username.js.map +1 -0
  201. package/dist/uuid.d.ts +4 -3
  202. package/dist/uuid.d.ts.map +1 -0
  203. package/dist/uuid.js +4 -0
  204. package/dist/uuid.js.map +1 -0
  205. package/dist/weak-etag-extractor.d.ts +7 -0
  206. package/dist/weak-etag-extractor.d.ts.map +1 -0
  207. package/dist/weak-etag-extractor.js +18 -0
  208. package/dist/weak-etag-extractor.js.map +1 -0
  209. package/package.json +20 -13
  210. package/src/api-key-shield.ts +2 -2
  211. package/src/api-version.ts +3 -2
  212. package/src/auth-shield.ts +14 -23
  213. package/src/basic-auth.ts +7 -0
  214. package/src/build-info-repository.ts +26 -0
  215. package/src/cache-resolver.ts +93 -0
  216. package/src/cache-response.ts +2 -5
  217. package/src/cache-static-files.ts +3 -3
  218. package/src/context.ts +9 -4
  219. package/src/correlation-id.ts +6 -0
  220. package/src/download-file.ts +2 -2
  221. package/src/env-validator.ts +43 -0
  222. package/src/etag-extractor.ts +5 -20
  223. package/src/file-uploader.ts +4 -4
  224. package/src/graceful-shutdown.ts +3 -3
  225. package/src/healthcheck.ts +30 -20
  226. package/src/http-logger.ts +9 -5
  227. package/src/i18n.ts +13 -48
  228. package/src/index.ts +28 -7
  229. package/src/jobs.ts +91 -0
  230. package/src/logger.ts +156 -0
  231. package/src/mailer.ts +64 -0
  232. package/src/memory-consumption.ts +9 -0
  233. package/src/new-uuid.ts +5 -0
  234. package/src/node-env.vo.ts +9 -0
  235. package/src/passwords.ts +55 -0
  236. package/src/path.ts +4 -0
  237. package/src/port.ts +4 -0
  238. package/src/prerequisites/binary.ts +44 -0
  239. package/src/prerequisites/bun.ts +32 -0
  240. package/src/prerequisites/index.ts +16 -0
  241. package/src/prerequisites/jobs.ts +28 -0
  242. package/src/prerequisites/log-file.ts +35 -0
  243. package/src/prerequisites/mailer.ts +32 -0
  244. package/src/prerequisites/memory.ts +34 -0
  245. package/src/prerequisites/node.ts +36 -0
  246. package/src/prerequisites/outside-connectivity.ts +31 -0
  247. package/src/prerequisites/path.ts +41 -0
  248. package/src/prerequisites/port.ts +44 -0
  249. package/src/prerequisites/ram.ts +35 -0
  250. package/src/prerequisites/self.ts +24 -0
  251. package/src/prerequisites/space.ts +39 -0
  252. package/src/prerequisites/ssl-certificate-expiry.ts +37 -0
  253. package/src/prerequisites/timezone-utc.ts +36 -0
  254. package/src/prerequisites/translations.ts +92 -0
  255. package/src/prerequisites.ts +105 -0
  256. package/src/rate-limit-shield.ts +3 -3
  257. package/src/session-id.ts +13 -0
  258. package/src/setup.ts +14 -7
  259. package/src/time-zone-offset.ts +11 -14
  260. package/src/uptime.ts +16 -0
  261. package/src/username.ts +20 -0
  262. package/src/uuid.ts +6 -0
  263. package/src/weak-etag-extractor.ts +19 -0
  264. package/src/image-processor.ts +0 -5
@@ -0,0 +1,105 @@
1
+ export type PrerequisiteLabelType = string;
2
+
3
+ export enum PrerequisiteStrategyEnum {
4
+ binary = "binary",
5
+ mailer = "mailer",
6
+ self = "self",
7
+ timezoneUTC = "timezoneUTC",
8
+ path = "path",
9
+ node = "node",
10
+ bun = "bun",
11
+ RAM = "RAM",
12
+ space = "space",
13
+ translations = "translations",
14
+ port = "port",
15
+ jobs = "jobs",
16
+ memory = "memory",
17
+ outsideConnectivity = "outsideConnectivity",
18
+ sslCertificateExpiry = "sslCertificateExpiry",
19
+ logFile = "logFile",
20
+ /** @public */
21
+ custom = "custom",
22
+ }
23
+
24
+ export enum PrerequisiteStatusEnum {
25
+ success = "success",
26
+ failure = "failure",
27
+ undetermined = "undetermined",
28
+ }
29
+
30
+ export type BasePrerequisiteConfig = {
31
+ label: PrerequisiteLabelType;
32
+ enabled?: boolean;
33
+ } & Record<string, unknown>;
34
+
35
+ export abstract class AbstractPrerequisite<T extends BasePrerequisiteConfig> {
36
+ readonly label: PrerequisiteLabelType;
37
+ readonly enabled: boolean = true;
38
+ abstract readonly strategy: PrerequisiteStrategyEnum;
39
+ abstract readonly config: T;
40
+
41
+ status: PrerequisiteStatusEnum = PrerequisiteStatusEnum.undetermined;
42
+
43
+ constructor(config: T) {
44
+ this.label = config.label;
45
+ this.enabled = config.enabled ?? true;
46
+ }
47
+
48
+ abstract verify(): Promise<PrerequisiteStatusEnum>;
49
+
50
+ protected pass(): PrerequisiteStatusEnum.success {
51
+ this.status = PrerequisiteStatusEnum.success;
52
+ return PrerequisiteStatusEnum.success;
53
+ }
54
+
55
+ protected reject(): PrerequisiteStatusEnum.failure {
56
+ this.status = PrerequisiteStatusEnum.failure;
57
+ return PrerequisiteStatusEnum.failure;
58
+ }
59
+
60
+ report() {
61
+ if (this.status === PrerequisiteStatusEnum.success) {
62
+ // biome-ignore lint: lint/suspicious/noConsoleLog
63
+ console.log(`[x] ${this.config.label} verified correctly with ${this.strategy} strategy`);
64
+ }
65
+
66
+ if (this.status === PrerequisiteStatusEnum.failure) {
67
+ // biome-ignore lint: lint/suspicious/noConsoleLog
68
+ console.log(`[-] ${this.config.label} not verified correctly with ${this.strategy} strategy`);
69
+ }
70
+
71
+ if (this.status === PrerequisiteStatusEnum.undetermined) {
72
+ // biome-ignore lint: lint/suspicious/noConsoleLog
73
+ console.log(`[?] ${this.config.label} not enabled with ${this.strategy} strategy`);
74
+ }
75
+ }
76
+ }
77
+
78
+ export class Prerequisites {
79
+ static async check(prerequisites: AbstractPrerequisite<BasePrerequisiteConfig>[]) {
80
+ try {
81
+ const failedPrerequisiteLabels: PrerequisiteLabelType[] = [];
82
+
83
+ for (const prerequisite of prerequisites) {
84
+ await prerequisite.verify();
85
+ prerequisite.report();
86
+
87
+ if (prerequisite.status === PrerequisiteStatusEnum.failure) {
88
+ failedPrerequisiteLabels.push(prerequisite.label);
89
+ }
90
+ }
91
+
92
+ if (failedPrerequisiteLabels.length > 0) {
93
+ const failedPrerequisiteLabelsFormatted = failedPrerequisiteLabels.join(", ");
94
+
95
+ // biome-ignore lint: lint/suspicious/noConsoleLog
96
+ console.log(`Prerequisites failed: ${failedPrerequisiteLabelsFormatted}, quitting...`);
97
+
98
+ process.exit(1);
99
+ }
100
+ } catch (error) {
101
+ // biome-ignore lint: lint/suspicious/noConsoleLog
102
+ console.log("Prerequisites error", String(error));
103
+ }
104
+ }
105
+ }
@@ -1,15 +1,15 @@
1
- import * as bg from "@bgord/node";
1
+ import * as tools from "@bgord/tools";
2
2
  import { createMiddleware } from "hono/factory";
3
3
  import { HTTPException } from "hono/http-exception";
4
4
 
5
- type RateLimitShieldOptionsType = { ms: bg.Schema.TimestampType };
5
+ type RateLimitShieldOptionsType = { ms: tools.TimestampType };
6
6
 
7
7
  export const TooManyRequestsError = new HTTPException(429, {
8
8
  message: "app.too_many_requests",
9
9
  });
10
10
 
11
11
  export const rateLimitShield = (options: RateLimitShieldOptionsType) => {
12
- const rateLimiter = new bg.RateLimiter(options);
12
+ const rateLimiter = new tools.RateLimiter(options);
13
13
 
14
14
  return createMiddleware(async (_c, next) => {
15
15
  const currentTimestampMs = Date.now();
@@ -0,0 +1,13 @@
1
+ import { Lucia } from "lucia";
2
+
3
+ export class SessionId {
4
+ private value: string | null;
5
+
6
+ constructor(cookie: string | undefined, lucia: Lucia) {
7
+ this.value = lucia.readSessionCookie(cookie ?? "");
8
+ }
9
+
10
+ get(): SessionId["value"] {
11
+ return this.value;
12
+ }
13
+ }
package/src/setup.ts CHANGED
@@ -1,29 +1,36 @@
1
- import * as bgn from "@bgord/node";
1
+ import * as tools from "@bgord/tools";
2
2
  import { bodyLimit } from "hono/body-limit";
3
3
  import { cors } from "hono/cors";
4
+ import { languageDetector } from "hono/language";
4
5
  import { requestId } from "hono/request-id";
5
6
  import { secureHeaders } from "hono/secure-headers";
6
7
  import { timing } from "hono/timing";
7
8
 
8
9
  import { ApiVersion } from "./api-version";
9
10
  import { Context } from "./context";
10
- import { ETagExtractor, WeakETagExtractor } from "./etag-extractor";
11
+ import { ETagExtractor } from "./etag-extractor";
11
12
  import { HttpLogger } from "./http-logger";
13
+ import { I18nConfigType } from "./i18n";
14
+ import { Logger } from "./logger";
12
15
  import { TimeZoneOffset } from "./time-zone-offset";
16
+ import { WeakETagExtractor } from "./weak-etag-extractor";
13
17
 
14
- // TODO: fix bgord/node types
15
- export const BODY_LIMIT_MAX_SIZE = new bgn.Size({
18
+ export const BODY_LIMIT_MAX_SIZE = new tools.Size({
16
19
  value: 128,
17
- unit: bgn.SizeUnit.kB,
18
- }).toBytes() as number;
20
+ unit: tools.SizeUnit.kB,
21
+ }).toBytes();
19
22
 
20
23
  export class Setup {
21
- static essentials(logger: bgn.Logger) {
24
+ static essentials(logger: Logger, i18n: I18nConfigType) {
22
25
  return [
23
26
  secureHeaders(),
24
27
  bodyLimit({ maxSize: BODY_LIMIT_MAX_SIZE }),
25
28
  ApiVersion.attach,
26
29
  cors({ origin: "*" }),
30
+ languageDetector({
31
+ supportedLanguages: Object.keys(i18n.supportedLanguages),
32
+ fallbackLanguage: i18n.defaultLanguage,
33
+ }),
27
34
  requestId(),
28
35
  TimeZoneOffset.attach,
29
36
  Context.attach,
@@ -1,11 +1,11 @@
1
- import * as bg from "@bgord/node";
1
+ import * as tools from "@bgord/tools";
2
2
  import { createMiddleware } from "hono/factory";
3
3
 
4
4
  export type TimeZoneOffsetVariables = {
5
5
  timeZoneOffset: {
6
- minutes: bg.Schema.TimeZoneOffsetValueType;
7
- seconds: bg.Schema.TimeZoneOffsetValueType;
8
- miliseconds: bg.Schema.TimeZoneOffsetValueType;
6
+ minutes: tools.TimeResult["minutes"];
7
+ seconds: tools.TimeResult["seconds"];
8
+ miliseconds: tools.TimeResult["ms"];
9
9
  };
10
10
  };
11
11
 
@@ -13,14 +13,14 @@ export class TimeZoneOffset {
13
13
  static TIME_ZONE_OFFSET_HEADER_NAME = "time-zone-offset";
14
14
 
15
15
  static attach = createMiddleware(async (c, next) => {
16
- const timeZoneOffsetMinutes = bg.Schema.TimeZoneOffsetHeaderValue.parse(
16
+ const timeZoneOffsetMinutes = tools.TimeZoneOffsetValue.parse(
17
17
  c.req.header(TimeZoneOffset.TIME_ZONE_OFFSET_HEADER_NAME),
18
18
  );
19
19
 
20
20
  const timeZoneOffset = {
21
21
  minutes: timeZoneOffsetMinutes,
22
- seconds: bg.Time.Minutes(timeZoneOffsetMinutes).seconds,
23
- miliseconds: bg.Time.Minutes(timeZoneOffsetMinutes).ms,
22
+ seconds: tools.Time.Minutes(timeZoneOffsetMinutes).seconds,
23
+ miliseconds: tools.Time.Minutes(timeZoneOffsetMinutes).ms,
24
24
  };
25
25
 
26
26
  c.set("timeZoneOffset", timeZoneOffset);
@@ -29,16 +29,13 @@ export class TimeZoneOffset {
29
29
  });
30
30
 
31
31
  static adjustTimestamp(
32
- timestamp: bg.Schema.TimestampType,
33
- timeZoneOffsetMs: bg.Schema.TimeZoneOffsetValueType,
34
- ): bg.Schema.TimestampType {
32
+ timestamp: tools.TimestampType,
33
+ timeZoneOffsetMs: tools.TimeResult["ms"],
34
+ ): tools.TimestampType {
35
35
  return timestamp - timeZoneOffsetMs;
36
36
  }
37
37
 
38
- static adjustDate(
39
- timestamp: bg.Schema.TimestampType,
40
- timeZoneOffsetMs: bg.Schema.TimeZoneOffsetValueType,
41
- ): Date {
38
+ static adjustDate(timestamp: tools.TimestampType, timeZoneOffsetMs: tools.TimeResult["ms"]): Date {
42
39
  return new Date(timestamp - timeZoneOffsetMs);
43
40
  }
44
41
  }
package/src/uptime.ts ADDED
@@ -0,0 +1,16 @@
1
+ import * as tools from "@bgord/tools";
2
+
3
+ export type UptimeResultType = {
4
+ seconds: tools.TimestampType;
5
+ formatted: ReturnType<(typeof tools.DateFormatters)["relative"]>;
6
+ };
7
+
8
+ export class Uptime {
9
+ static get(): UptimeResultType {
10
+ const rounding = new tools.RoundToNearest();
11
+ const uptime = tools.Time.Seconds(rounding.round(process.uptime()));
12
+ const uptimeFormatted = tools.DateFormatters.relative(Date.now() - uptime.ms);
13
+
14
+ return { seconds: uptime.seconds, formatted: uptimeFormatted };
15
+ }
16
+ }
@@ -0,0 +1,20 @@
1
+ import { z } from "zod/v4";
2
+
3
+ export type IdType = string;
4
+
5
+ type UsernameType = string;
6
+
7
+ export class Username {
8
+ private readonly schema: z.ZodSchema = z.string().max(256);
9
+
10
+ private readonly value: UsernameType;
11
+
12
+ constructor(value: UsernameType, schema?: z.ZodSchema) {
13
+ this.schema = schema ?? this.schema;
14
+ this.value = this.schema.parse(value) as UsernameType;
15
+ }
16
+
17
+ read(): UsernameType {
18
+ return this.value;
19
+ }
20
+ }
package/src/uuid.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { z } from "zod/v4";
2
+
3
+ import { NewUUID } from "./new-uuid";
4
+
5
+ export const UUID = z.uuid().default(() => NewUUID.generate());
6
+ export type UUIDType = z.infer<typeof UUID>;
@@ -0,0 +1,19 @@
1
+ import * as tools from "@bgord/tools";
2
+ import { createMiddleware } from "hono/factory";
3
+
4
+ import { EtagVariables } from "./etag-extractor";
5
+
6
+ export class WeakETagExtractor {
7
+ static attach = createMiddleware<{ Variables: EtagVariables }>(async (c, next) => {
8
+ try {
9
+ const header = String(c.req.header(tools.WeakETag.IF_MATCH_HEADER_NAME));
10
+
11
+ if (!header || header === "undefined") c.set("WeakETag", null);
12
+ else c.set("WeakETag", tools.WeakETag.fromHeader(header));
13
+ } catch (error) {
14
+ c.set("WeakETag", null);
15
+ }
16
+
17
+ await next();
18
+ });
19
+ }
@@ -1,5 +0,0 @@
1
- import sharp from "sharp";
2
-
3
- export class ImageProcessor {
4
- static sharp = sharp;
5
- }