@bgord/bun 0.4.0 → 0.6.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 (267) hide show
  1. package/dist/api-key-shield.d.ts +14 -13
  2. package/dist/api-key-shield.d.ts.map +1 -0
  3. package/dist/api-key-shield.js +19 -0
  4. package/dist/api-key-shield.js.map +1 -0
  5. package/dist/api-version.d.ts +6 -5
  6. package/dist/api-version.d.ts.map +1 -0
  7. package/dist/api-version.js +12 -0
  8. package/dist/api-version.js.map +1 -0
  9. package/dist/auth-shield.d.ts +31 -29
  10. package/dist/auth-shield.d.ts.map +1 -0
  11. package/dist/auth-shield.js +83 -0
  12. package/dist/auth-shield.js.map +1 -0
  13. package/dist/build-info-repository.d.ts +5 -3
  14. package/dist/build-info-repository.d.ts.map +1 -0
  15. package/dist/build-info-repository.js +18 -0
  16. package/dist/build-info-repository.js.map +1 -0
  17. package/dist/cache-resolver.d.ts +46 -0
  18. package/dist/cache-resolver.d.ts.map +1 -0
  19. package/dist/cache-resolver.js +44 -0
  20. package/dist/cache-resolver.js.map +1 -0
  21. package/dist/cache-response.d.ts +9 -12
  22. package/dist/cache-response.d.ts.map +1 -0
  23. package/dist/cache-response.js +25 -0
  24. package/dist/cache-response.js.map +1 -0
  25. package/dist/cache-static-files.d.ts +9 -8
  26. package/dist/cache-static-files.d.ts.map +1 -0
  27. package/dist/cache-static-files.js +25 -0
  28. package/dist/cache-static-files.js.map +1 -0
  29. package/dist/context.d.ts +14 -9
  30. package/dist/context.d.ts.map +1 -0
  31. package/dist/context.js +11 -0
  32. package/dist/context.js.map +1 -0
  33. package/dist/correlation-id.d.ts +4 -0
  34. package/dist/correlation-id.d.ts.map +1 -0
  35. package/dist/correlation-id.js +3 -0
  36. package/dist/correlation-id.js.map +1 -0
  37. package/dist/download-file.d.ts +13 -12
  38. package/dist/download-file.d.ts.map +1 -0
  39. package/dist/download-file.js +11 -0
  40. package/dist/download-file.js.map +1 -0
  41. package/dist/etag-extractor.d.ts +11 -15
  42. package/dist/etag-extractor.d.ts.map +1 -0
  43. package/dist/etag-extractor.js +18 -0
  44. package/dist/etag-extractor.js.map +1 -0
  45. package/dist/file-uploader.d.ts +13 -12
  46. package/dist/file-uploader.d.ts.map +1 -0
  47. package/dist/file-uploader.js +35 -0
  48. package/dist/file-uploader.js.map +1 -0
  49. package/dist/graceful-shutdown.d.ts +7 -6
  50. package/dist/graceful-shutdown.d.ts.map +1 -0
  51. package/dist/graceful-shutdown.js +32 -0
  52. package/dist/graceful-shutdown.js.map +1 -0
  53. package/dist/healthcheck.d.ts +22 -20
  54. package/dist/healthcheck.d.ts.map +1 -0
  55. package/dist/healthcheck.js +35 -0
  56. package/dist/healthcheck.js.map +1 -0
  57. package/dist/http-logger.d.ts +7 -7
  58. package/dist/http-logger.d.ts.map +1 -0
  59. package/dist/http-logger.js +89 -0
  60. package/dist/http-logger.js.map +1 -0
  61. package/dist/i18n.d.ts +22 -26
  62. package/dist/i18n.d.ts.map +1 -0
  63. package/dist/i18n.js +35 -0
  64. package/dist/i18n.js.map +1 -0
  65. package/dist/image-processor.d.ts +5 -4
  66. package/dist/image-processor.d.ts.map +1 -0
  67. package/dist/image-processor.js +5 -0
  68. package/dist/image-processor.js.map +1 -0
  69. package/dist/index.d.ts +37 -17
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +37 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/jobs.d.ts +1 -0
  74. package/dist/jobs.d.ts.map +1 -0
  75. package/dist/jobs.js +72 -0
  76. package/dist/jobs.js.map +1 -0
  77. package/dist/logger.d.ts +23 -7
  78. package/dist/logger.d.ts.map +1 -0
  79. package/dist/logger.js +87 -0
  80. package/dist/logger.js.map +1 -0
  81. package/dist/mailer.d.ts +10 -1
  82. package/dist/mailer.d.ts.map +1 -0
  83. package/dist/mailer.js +27 -0
  84. package/dist/mailer.js.map +1 -0
  85. package/dist/memory-consumption.d.ts +3 -2
  86. package/dist/memory-consumption.d.ts.map +1 -0
  87. package/dist/memory-consumption.js +8 -0
  88. package/dist/memory-consumption.js.map +1 -0
  89. package/dist/new-uuid.d.ts +4 -0
  90. package/dist/new-uuid.d.ts.map +1 -0
  91. package/dist/new-uuid.js +6 -0
  92. package/dist/new-uuid.js.map +1 -0
  93. package/dist/node-env.vo.d.ts +9 -0
  94. package/dist/node-env.vo.d.ts.map +1 -0
  95. package/dist/node-env.vo.js +10 -0
  96. package/dist/node-env.vo.js.map +1 -0
  97. package/dist/passwords.d.ts +21 -0
  98. package/dist/passwords.d.ts.map +1 -0
  99. package/dist/passwords.js +42 -0
  100. package/dist/passwords.js.map +1 -0
  101. package/dist/path.d.ts +4 -0
  102. package/dist/path.d.ts.map +1 -0
  103. package/dist/path.js +3 -0
  104. package/dist/path.js.map +1 -0
  105. package/dist/port.d.ts +4 -0
  106. package/dist/port.d.ts.map +1 -0
  107. package/dist/port.js +3 -0
  108. package/dist/port.js.map +1 -0
  109. package/dist/prerequisites/binary.d.ts +4 -3
  110. package/dist/prerequisites/binary.d.ts.map +1 -0
  111. package/dist/prerequisites/binary.js +29 -0
  112. package/dist/prerequisites/binary.js.map +1 -0
  113. package/dist/prerequisites/bun.d.ts +7 -4
  114. package/dist/prerequisites/bun.d.ts.map +1 -0
  115. package/dist/prerequisites/bun.js +18 -0
  116. package/dist/prerequisites/bun.js.map +1 -0
  117. package/dist/prerequisites/index.d.ts +17 -0
  118. package/dist/prerequisites/index.d.ts.map +1 -0
  119. package/dist/prerequisites/index.js +17 -0
  120. package/dist/prerequisites/index.js.map +1 -0
  121. package/dist/prerequisites/jobs.d.ts +4 -2
  122. package/dist/prerequisites/jobs.d.ts.map +1 -0
  123. package/dist/prerequisites/jobs.js +16 -0
  124. package/dist/prerequisites/jobs.js.map +1 -0
  125. package/dist/prerequisites/log-file.d.ts +15 -0
  126. package/dist/prerequisites/log-file.d.ts.map +1 -0
  127. package/dist/prerequisites/log-file.js +22 -0
  128. package/dist/prerequisites/log-file.js.map +1 -0
  129. package/dist/prerequisites/mailer.d.ts +4 -2
  130. package/dist/prerequisites/mailer.d.ts.map +1 -0
  131. package/dist/prerequisites/mailer.js +21 -0
  132. package/dist/prerequisites/mailer.js.map +1 -0
  133. package/dist/prerequisites/memory.d.ts +6 -4
  134. package/dist/prerequisites/memory.d.ts.map +1 -0
  135. package/dist/prerequisites/memory.js +20 -0
  136. package/dist/prerequisites/memory.js.map +1 -0
  137. package/dist/prerequisites/node.d.ts +6 -4
  138. package/dist/prerequisites/node.d.ts.map +1 -0
  139. package/dist/prerequisites/node.js +23 -0
  140. package/dist/prerequisites/node.js.map +1 -0
  141. package/dist/prerequisites/outside-connectivity.d.ts +4 -2
  142. package/dist/prerequisites/outside-connectivity.d.ts.map +1 -0
  143. package/dist/prerequisites/outside-connectivity.js +21 -0
  144. package/dist/prerequisites/outside-connectivity.js.map +1 -0
  145. package/dist/prerequisites/path.d.ts +4 -2
  146. package/dist/prerequisites/path.d.ts.map +1 -0
  147. package/dist/prerequisites/path.js +26 -0
  148. package/dist/prerequisites/path.js.map +1 -0
  149. package/dist/prerequisites/port.d.ts +6 -4
  150. package/dist/prerequisites/port.d.ts.map +1 -0
  151. package/dist/prerequisites/port.js +26 -0
  152. package/dist/prerequisites/port.js.map +1 -0
  153. package/dist/prerequisites/ram.d.ts +6 -4
  154. package/dist/prerequisites/ram.d.ts.map +1 -0
  155. package/dist/prerequisites/ram.js +23 -0
  156. package/dist/prerequisites/ram.js.map +1 -0
  157. package/dist/prerequisites/self.d.ts +4 -2
  158. package/dist/prerequisites/self.d.ts.map +1 -0
  159. package/dist/prerequisites/self.js +15 -0
  160. package/dist/prerequisites/self.js.map +1 -0
  161. package/dist/prerequisites/space.d.ts +6 -4
  162. package/dist/prerequisites/space.d.ts.map +1 -0
  163. package/dist/prerequisites/space.js +26 -0
  164. package/dist/prerequisites/space.js.map +1 -0
  165. package/dist/prerequisites/ssl-certificate-expiry.d.ts +4 -2
  166. package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -0
  167. package/dist/prerequisites/ssl-certificate-expiry.js +24 -0
  168. package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -0
  169. package/dist/prerequisites/timezone-utc.d.ts +6 -4
  170. package/dist/prerequisites/timezone-utc.d.ts.map +1 -0
  171. package/dist/prerequisites/timezone-utc.js +22 -0
  172. package/dist/prerequisites/timezone-utc.js.map +1 -0
  173. package/dist/prerequisites/translations.d.ts +4 -2
  174. package/dist/prerequisites/translations.d.ts.map +1 -0
  175. package/dist/prerequisites/translations.js +59 -0
  176. package/dist/prerequisites/translations.js.map +1 -0
  177. package/dist/prerequisites.d.ts +2 -0
  178. package/dist/prerequisites.d.ts.map +1 -0
  179. package/dist/prerequisites.js +83 -0
  180. package/dist/prerequisites.js.map +1 -0
  181. package/dist/rate-limit-shield.d.ts +9 -8
  182. package/dist/rate-limit-shield.d.ts.map +1 -0
  183. package/dist/rate-limit-shield.js +18 -0
  184. package/dist/rate-limit-shield.js.map +1 -0
  185. package/dist/session-id.d.ts +7 -0
  186. package/dist/session-id.d.ts.map +1 -0
  187. package/dist/session-id.js +10 -0
  188. package/dist/session-id.js.map +1 -0
  189. package/dist/setup.d.ts +9 -7
  190. package/dist/setup.d.ts.map +1 -0
  191. package/dist/setup.js +39 -0
  192. package/dist/setup.js.map +1 -0
  193. package/dist/time-zone-offset.d.ts +15 -14
  194. package/dist/time-zone-offset.d.ts.map +1 -0
  195. package/dist/time-zone-offset.js +22 -0
  196. package/dist/time-zone-offset.js.map +1 -0
  197. package/dist/tsconfig.tsbuildinfo +1 -0
  198. package/dist/uptime.d.ts +4 -4
  199. package/dist/uptime.d.ts.map +1 -0
  200. package/dist/uptime.js +10 -0
  201. package/dist/uptime.js.map +1 -0
  202. package/dist/username.d.ts +11 -0
  203. package/dist/username.d.ts.map +1 -0
  204. package/dist/username.js +13 -0
  205. package/dist/username.js.map +1 -0
  206. package/dist/uuid.d.ts +4 -3
  207. package/dist/uuid.d.ts.map +1 -0
  208. package/dist/uuid.js +4 -0
  209. package/dist/uuid.js.map +1 -0
  210. package/dist/weak-etag-extractor.d.ts +7 -0
  211. package/dist/weak-etag-extractor.d.ts.map +1 -0
  212. package/dist/weak-etag-extractor.js +18 -0
  213. package/dist/weak-etag-extractor.js.map +1 -0
  214. package/package.json +29 -28
  215. package/src/api-key-shield.ts +2 -2
  216. package/src/api-version.ts +3 -2
  217. package/src/auth-shield.ts +14 -23
  218. package/src/build-info-repository.ts +26 -0
  219. package/src/cache-resolver.ts +93 -0
  220. package/src/cache-response.ts +2 -5
  221. package/src/cache-static-files.ts +3 -3
  222. package/src/context.ts +9 -4
  223. package/src/correlation-id.ts +6 -0
  224. package/src/download-file.ts +2 -2
  225. package/src/etag-extractor.ts +5 -20
  226. package/src/file-uploader.ts +4 -4
  227. package/src/graceful-shutdown.ts +3 -3
  228. package/src/healthcheck.ts +30 -20
  229. package/src/http-logger.ts +10 -6
  230. package/src/i18n.ts +13 -47
  231. package/src/index.ts +26 -7
  232. package/src/jobs.ts +91 -0
  233. package/src/logger.ts +156 -0
  234. package/src/mailer.ts +48 -0
  235. package/src/memory-consumption.ts +9 -0
  236. package/src/new-uuid.ts +5 -0
  237. package/src/node-env.vo.ts +9 -0
  238. package/src/passwords.ts +55 -0
  239. package/src/path.ts +4 -0
  240. package/src/port.ts +4 -0
  241. package/src/prerequisites/binary.ts +44 -0
  242. package/src/prerequisites/bun.ts +32 -0
  243. package/src/prerequisites/index.ts +16 -0
  244. package/src/prerequisites/jobs.ts +28 -0
  245. package/src/prerequisites/log-file.ts +35 -0
  246. package/src/prerequisites/mailer.ts +32 -0
  247. package/src/prerequisites/memory.ts +34 -0
  248. package/src/prerequisites/node.ts +36 -0
  249. package/src/prerequisites/outside-connectivity.ts +31 -0
  250. package/src/prerequisites/path.ts +41 -0
  251. package/src/prerequisites/port.ts +44 -0
  252. package/src/prerequisites/ram.ts +35 -0
  253. package/src/prerequisites/self.ts +24 -0
  254. package/src/prerequisites/space.ts +39 -0
  255. package/src/prerequisites/ssl-certificate-expiry.ts +37 -0
  256. package/src/prerequisites/timezone-utc.ts +34 -0
  257. package/src/prerequisites/translations.ts +92 -0
  258. package/src/prerequisites.ts +105 -0
  259. package/src/rate-limit-shield.ts +3 -3
  260. package/src/session-id.ts +13 -0
  261. package/src/setup.ts +13 -5
  262. package/src/time-zone-offset.ts +11 -14
  263. package/src/uptime.ts +16 -0
  264. package/src/username.ts +20 -0
  265. package/src/uuid.ts +6 -0
  266. package/src/weak-etag-extractor.ts +19 -0
  267. package/src/image-processor.ts +0 -5
@@ -1,15 +1,11 @@
1
- import * as bg from "@bgord/node";
2
- export declare type EtagVariables = {
3
- ETag: bg.ETag | null;
4
- WeakETag: bg.WeakETag | null;
5
- };
6
- export declare class ETagExtractor {
7
- static attach: import("hono").MiddlewareHandler<{
8
- Variables: EtagVariables;
9
- }, string, {}>;
10
- }
11
- export declare class WeakETagExtractor {
12
- static attach: import("hono").MiddlewareHandler<{
13
- Variables: EtagVariables;
14
- }, string, {}>;
15
- }
1
+ import * as tools from "@bgord/tools";
2
+ export type EtagVariables = {
3
+ ETag: tools.ETag | null;
4
+ WeakETag: tools.WeakETag | null;
5
+ };
6
+ export declare class ETagExtractor {
7
+ static attach: import("hono").MiddlewareHandler<{
8
+ Variables: EtagVariables;
9
+ }, string, {}>;
10
+ }
11
+ //# sourceMappingURL=etag-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etag-extractor.d.ts","sourceRoot":"","sources":["../src/etag-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;CACjC,CAAC;AAEF,qBAAa,aAAa;IACxB,MAAM,CAAC,MAAM;mBAAiC,aAAa;mBAWxD;CACJ"}
@@ -0,0 +1,18 @@
1
+ import * as tools from "@bgord/tools";
2
+ import { createMiddleware } from "hono/factory";
3
+ export class ETagExtractor {
4
+ static attach = createMiddleware(async (c, next) => {
5
+ try {
6
+ const header = String(c.req.header(tools.ETag.IF_MATCH_HEADER_NAME));
7
+ if (!header || header === "undefined")
8
+ c.set("ETag", null);
9
+ else
10
+ c.set("ETag", tools.ETag.fromHeader(header));
11
+ }
12
+ catch (error) {
13
+ c.set("ETag", null);
14
+ }
15
+ await next();
16
+ });
17
+ }
18
+ //# sourceMappingURL=etag-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etag-extractor.js","sourceRoot":"","sources":["../src/etag-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAOhD,MAAM,OAAO,aAAa;IACxB,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAA+B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;QAC/E,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAErE,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,WAAW;gBAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;gBACtD,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CAAC,CAAC"}
@@ -1,12 +1,13 @@
1
- import * as bgn from "@bgord/node";
2
- import { HTTPException } from "hono/http-exception";
3
- export declare const InvalidFileMimeTypeError: HTTPException;
4
- export declare const FileTooBigError: HTTPException;
5
- declare type FileUploaderConfigType = {
6
- mimeTypes: string[];
7
- maxFilesSize: bgn.SizeValueType;
8
- };
9
- export declare class FileUploader {
10
- static validate(config: FileUploaderConfigType): import("hono").MiddlewareHandler<any, string, {}>[];
11
- }
12
- export {};
1
+ import * as tools from "@bgord/tools";
2
+ import { HTTPException } from "hono/http-exception";
3
+ export declare const InvalidFileMimeTypeError: HTTPException;
4
+ export declare const FileTooBigError: HTTPException;
5
+ type FileUploaderConfigType = {
6
+ mimeTypes: string[];
7
+ maxFilesSize: tools.SizeValueType;
8
+ };
9
+ export declare class FileUploader {
10
+ static validate(config: FileUploaderConfigType): import("hono").MiddlewareHandler<any, string, {}>[];
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=file-uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploader.d.ts","sourceRoot":"","sources":["../src/file-uploader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,eAAO,MAAM,wBAAwB,eAEnC,CAAC;AAEH,eAAO,MAAM,eAAe,eAE1B,CAAC;AAEH,KAAK,sBAAsB,GAAG;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC;CACnC,CAAC;AAEF,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB;CA4B/C"}
@@ -0,0 +1,35 @@
1
+ import * as tools from "@bgord/tools";
2
+ import { bodyLimit } from "hono/body-limit";
3
+ import { createMiddleware } from "hono/factory";
4
+ import { HTTPException } from "hono/http-exception";
5
+ export const InvalidFileMimeTypeError = new HTTPException(400, {
6
+ message: "invalid_file_mime_type_error",
7
+ });
8
+ export const FileTooBigError = new HTTPException(400, {
9
+ message: "file_too_big_error",
10
+ });
11
+ export class FileUploader {
12
+ static validate(config) {
13
+ return [
14
+ bodyLimit({
15
+ maxSize: config.maxFilesSize,
16
+ onError: () => {
17
+ throw FileTooBigError;
18
+ },
19
+ }),
20
+ createMiddleware(async (c, next) => {
21
+ const body = await c.req.raw.clone().formData();
22
+ const file = body.get("file");
23
+ if (!(file instanceof File)) {
24
+ throw InvalidFileMimeTypeError;
25
+ }
26
+ const contentType = new tools.Mime(file.type);
27
+ const accepted = config.mimeTypes.some((acceptedMimeType) => new tools.Mime(acceptedMimeType).isSatisfiedBy(contentType));
28
+ if (!accepted)
29
+ throw InvalidFileMimeTypeError;
30
+ return next();
31
+ }),
32
+ ];
33
+ }
34
+ }
35
+ //# sourceMappingURL=file-uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploader.js","sourceRoot":"","sources":["../src/file-uploader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE;IAC7D,OAAO,EAAE,8BAA8B;CACxC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,aAAa,CAAC,GAAG,EAAE;IACpD,OAAO,EAAE,oBAAoB;CAC9B,CAAC,CAAC;AAOH,MAAM,OAAO,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,MAA8B;QAC5C,OAAO;YACL,SAAS,CAAC;gBACR,OAAO,EAAE,MAAM,CAAC,YAAY;gBAC5B,OAAO,EAAE,GAAG,EAAE;oBACZ,MAAM,eAAe,CAAC;gBACxB,CAAC;aACF,CAAC;YAEF,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAEhD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAE9B,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,wBAAwB,CAAC;gBACjC,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAC1D,IAAI,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAC5D,CAAC;gBAEF,IAAI,CAAC,QAAQ;oBAAE,MAAM,wBAAwB,CAAC;gBAC9C,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;CACF"}
@@ -1,6 +1,7 @@
1
- declare type ServerType = ReturnType<typeof Bun.serve>;
2
- export declare class GracefulShutdown {
3
- private static shutdown;
4
- static applyTo(server: ServerType, callback?: () => any): void;
5
- }
6
- export {};
1
+ type ServerType = ReturnType<typeof Bun.serve>;
2
+ export declare class GracefulShutdown {
3
+ private static shutdown;
4
+ static applyTo(server: ServerType, callback?: () => any): void;
5
+ }
6
+ export {};
7
+ //# sourceMappingURL=graceful-shutdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graceful-shutdown.d.ts","sourceRoot":"","sources":["../src/graceful-shutdown.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;AAE/C,qBAAa,gBAAgB;mBACN,QAAQ;IAO7B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAE,MAAM,GAAgB;CA0BpE"}
@@ -0,0 +1,32 @@
1
+ import * as tools from "@bgord/tools";
2
+ export class GracefulShutdown {
3
+ static async shutdown(server, callback = tools.noop) {
4
+ server.stop();
5
+ await callback();
6
+ // biome-ignore lint: lint/suspicious/noConsoleLog
7
+ console.log("HTTP server closed");
8
+ }
9
+ static applyTo(server, callback = tools.noop) {
10
+ process.on("SIGTERM", async () => {
11
+ // biome-ignore lint: lint/suspicious/noConsoleLog
12
+ console.log("SIGTERM signal received: closing HTTP server");
13
+ await GracefulShutdown.shutdown(server, callback);
14
+ process.exit(0);
15
+ });
16
+ process.on("SIGINT", async () => {
17
+ // biome-ignore lint: lint/suspicious/noConsoleLog
18
+ console.log("SIGINT signal received: closing HTTP server");
19
+ await GracefulShutdown.shutdown(server, callback);
20
+ process.exit(0);
21
+ });
22
+ process.on("unhandledRejection", async (event) => {
23
+ // biome-ignore lint: lint/suspicious/noConsoleLog
24
+ console.log("UnhandledPromiseRejectionWarning received: closing HTTP server");
25
+ // biome-ignore lint: lint/suspicious/noConsoleLog
26
+ console.log(JSON.stringify(event));
27
+ await GracefulShutdown.shutdown(server, callback);
28
+ process.exit(1);
29
+ });
30
+ }
31
+ }
32
+ //# sourceMappingURL=graceful-shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graceful-shutdown.js","sourceRoot":"","sources":["../src/graceful-shutdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAItC,MAAM,OAAO,gBAAgB;IACnB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAkB,EAAE,WAAsB,KAAK,CAAC,IAAI;QAChF,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,QAAQ,EAAE,CAAC;QACjB,kDAAkD;QAClD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,MAAkB,EAAE,WAAsB,KAAK,CAAC,IAAI;QACjE,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YAC/B,kDAAkD;YAClD,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;YAC5D,MAAM,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;YAC9B,kDAAkD;YAClD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;YAC3D,MAAM,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC/C,kDAAkD;YAClD,OAAO,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAC;YAE9E,kDAAkD;YAClD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;YAEnC,MAAM,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -1,20 +1,22 @@
1
- import * as bg from "@bgord/node";
2
- export declare class Healthcheck {
3
- static build: (prerequisites: bg.AbstractPrerequisite<bg.BasePrerequisiteConfig>[]) => [import("hono/types").H<any, any, {}, Promise<Response & import("hono").TypedResponse<{
4
- ok: bg.PrerequisiteStatusEnum;
5
- version: any;
6
- details: {
7
- label: string;
8
- status: bg.PrerequisiteStatusEnum;
9
- }[];
10
- uptime: {
11
- seconds: any;
12
- formatted: string;
13
- };
14
- memory: {
15
- bytes: any;
16
- formatted: string;
17
- };
18
- durationMs: any;
19
- }, 200 | 424, "json">>>];
20
- }
1
+ import * as tools from "@bgord/tools";
2
+ import { AbstractPrerequisite, BasePrerequisiteConfig, PrerequisiteLabelType, PrerequisiteStatusEnum } from "./prerequisites";
3
+ export declare class Healthcheck {
4
+ static build: (prerequisites: AbstractPrerequisite<BasePrerequisiteConfig>[]) => [import("hono/types").H<import("hono").Env, string, {}, Promise<Response & import("hono").TypedResponse<{
5
+ ok: PrerequisiteStatusEnum;
6
+ version: tools.BuildVersionType;
7
+ details: {
8
+ label: PrerequisiteLabelType;
9
+ status: PrerequisiteStatusEnum;
10
+ }[];
11
+ uptime: {
12
+ seconds: tools.TimestampType;
13
+ formatted: ReturnType<(typeof tools.DateFormatters)["relative"]>;
14
+ };
15
+ memory: {
16
+ bytes: tools.Size["bytes"];
17
+ formatted: ReturnType<tools.Size["format"]>;
18
+ };
19
+ durationMs: tools.TimestampType;
20
+ }, 200 | 424, "json">>>];
21
+ }
22
+ //# sourceMappingURL=healthcheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthcheck.d.ts","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAKtC,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAmBzB,qBAAa,WAAW;IACtB,MAAM,CAAC,KAAK,GAAI,eAAe,oBAAoB,CAAC,sBAAsB,CAAC,EAAE;YAdzE,sBAAsB;iBACjB,KAAK,CAAC,gBAAgB;;mBAEtB,qBAAqB;oBACpB,sBAAsB;;;;mCAjBU,2BACpC;;;mBAoBG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;uBACf,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;;6BAqCxC;CACN"}
@@ -0,0 +1,35 @@
1
+ import * as tools from "@bgord/tools";
2
+ import { createFactory } from "hono/factory";
3
+ import { BuildInfoRepository } from "./build-info-repository";
4
+ import { MemoryConsumption } from "./memory-consumption";
5
+ import { PrerequisiteStatusEnum, } from "./prerequisites";
6
+ import { Uptime } from "./uptime";
7
+ const handler = createFactory();
8
+ export class Healthcheck {
9
+ static build = (prerequisites) => handler.createHandlers(async (c) => {
10
+ const stopwatch = new tools.Stopwatch();
11
+ const build = await BuildInfoRepository.extract();
12
+ const details = [];
13
+ for (const prerequisite of prerequisites) {
14
+ const status = await prerequisite.verify();
15
+ details.push({ label: prerequisite.label, status });
16
+ }
17
+ const ok = details.every((result) => result.status !== PrerequisiteStatusEnum.failure)
18
+ ? PrerequisiteStatusEnum.success
19
+ : PrerequisiteStatusEnum.failure;
20
+ const code = ok === PrerequisiteStatusEnum.success ? 200 : 424;
21
+ const result = {
22
+ ok,
23
+ details,
24
+ version: build.BUILD_VERSION ?? tools.BuildVersion.parse("unknown"),
25
+ uptime: Uptime.get(),
26
+ memory: {
27
+ bytes: MemoryConsumption.get().toBytes(),
28
+ formatted: MemoryConsumption.get().format(tools.SizeUnit.MB),
29
+ },
30
+ ...stopwatch.stop(),
31
+ };
32
+ return c.json(result, code);
33
+ });
34
+ }
35
+ //# sourceMappingURL=healthcheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthcheck.js","sourceRoot":"","sources":["../src/healthcheck.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAIL,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,EAAoB,MAAM,UAAU,CAAC;AAEpD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAgBhC,MAAM,OAAO,WAAW;IACtB,MAAM,CAAC,KAAK,GAAG,CAAC,aAA6D,EAAE,EAAE,CAC/E,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QAExC,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,CAAC;QAElD,MAAM,OAAO,GAA+C,EAAE,CAAC;QAE/D,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC;YAC3C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,sBAAsB,CAAC,OAAO,CAAC;YACpF,CAAC,CAAC,sBAAsB,CAAC,OAAO;YAChC,CAAC,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAEnC,MAAM,IAAI,GAAG,EAAE,KAAK,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAE/D,MAAM,MAAM,GAA0B;YACpC,EAAE;YACF,OAAO;YACP,OAAO,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;YACnE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE;YACpB,MAAM,EAAE;gBACN,KAAK,EAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE;gBACxC,SAAS,EAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;aAC7D;YACD,GAAG,SAAS,CAAC,IAAI,EAAE;SACpB,CAAC;QAEF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
- /// <reference types="handlebars" />
2
- import * as bg from "@bgord/node";
3
- export declare class HttpLogger {
4
- private static simplify;
5
- private static uninformativeHeaders;
6
- static build: (logger: bg.Logger) => import("hono").MiddlewareHandler<any, string, {}>;
7
- }
1
+ import { Logger } from "./logger";
2
+ export declare class HttpLogger {
3
+ private static simplify;
4
+ private static uninformativeHeaders;
5
+ static build: (logger: Logger) => import("hono").MiddlewareHandler<any, string, {}>;
6
+ }
7
+ //# sourceMappingURL=http-logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-logger.d.ts","sourceRoot":"","sources":["../src/http-logger.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAC,QAAQ;IAQvB,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAoBjC;IAEF,MAAM,CAAC,KAAK,GAAI,QAAQ,MAAM,uDAoEzB;CACN"}
@@ -0,0 +1,89 @@
1
+ import { getConnInfo } from "hono/bun";
2
+ import { createMiddleware } from "hono/factory";
3
+ import _ from "lodash";
4
+ import { CacheHitEnum } from "./cache-resolver";
5
+ import { CacheResponse } from "./cache-response";
6
+ export class HttpLogger {
7
+ static simplify(response) {
8
+ const result = JSON.stringify(response, (_key, value) => Array.isArray(value) ? { type: "Array", length: value.length } : value);
9
+ return JSON.parse(result);
10
+ }
11
+ static uninformativeHeaders = [
12
+ "accept",
13
+ "accept-encoding",
14
+ "cache-control",
15
+ "connection",
16
+ "content-length",
17
+ "content-type",
18
+ "cookie",
19
+ "dnt",
20
+ "host",
21
+ "origin",
22
+ "pragma",
23
+ "sec-fetch-dest",
24
+ "sec-fetch-mode",
25
+ "sec-fetch-site",
26
+ "sec-fetch-user",
27
+ "sec-gpc",
28
+ "upgrade-insecure-requests",
29
+ "user-agent",
30
+ "if-none-match",
31
+ ];
32
+ static build = (logger) => createMiddleware(async (c, next) => {
33
+ const correlationId = c.get("requestId");
34
+ const info = getConnInfo(c);
35
+ const url = c.req.url;
36
+ const method = c.req.method;
37
+ const client = {
38
+ ip: c.req.header("x-real-ip") || c.req.header("x-forwarded-for") || info.remote.address,
39
+ userAgent: c.req.header("user-agent"),
40
+ };
41
+ let body;
42
+ try {
43
+ body = await c.req.raw.clone().json();
44
+ }
45
+ catch (error) { }
46
+ const httpRequestBeforeMetadata = {
47
+ params: c.req.param(),
48
+ headers: _.omit(Object.fromEntries(c.req.raw.clone().headers), HttpLogger.uninformativeHeaders),
49
+ body,
50
+ query: c.req.queries(),
51
+ };
52
+ logger.http({
53
+ operation: "http_request_before",
54
+ correlationId,
55
+ message: "request",
56
+ method,
57
+ url,
58
+ client,
59
+ metadata: _.pickBy(httpRequestBeforeMetadata, (value) => !_.isEmpty(value)),
60
+ });
61
+ await next();
62
+ const cacheHitHeader = c.res.clone().headers.get(CacheResponse.CACHE_HIT_HEADER);
63
+ const cacheHit = cacheHitHeader === CacheHitEnum.hit ? CacheHitEnum.hit : undefined;
64
+ let response;
65
+ try {
66
+ response = await c.res.clone().json();
67
+ }
68
+ catch (error) { }
69
+ const httpRequestAfterMetadata = {
70
+ response,
71
+ cacheHit,
72
+ };
73
+ const serverTimingMs = c.res.clone().headers.get("Server-Timing");
74
+ const durationMsMatch = serverTimingMs?.match(/dur=([0-9]*\.?[0-9]+)/) ?? undefined;
75
+ const durationMs = durationMsMatch?.[1] ? Number(durationMsMatch[1]) : undefined;
76
+ logger.http({
77
+ operation: "http_request_after",
78
+ correlationId,
79
+ message: "response",
80
+ method,
81
+ url,
82
+ responseCode: c.res.status,
83
+ durationMs,
84
+ client,
85
+ metadata: HttpLogger.simplify(httpRequestAfterMetadata),
86
+ });
87
+ });
88
+ }
89
+ //# sourceMappingURL=http-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-logger.js","sourceRoot":"","sources":["../src/http-logger.ts"],"names":[],"mappings":"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"}
package/dist/i18n.d.ts CHANGED
@@ -1,26 +1,22 @@
1
- import * as bgn from "@bgord/node";
2
- export declare type TranslationsKeyType = string;
3
- export declare type TranslationsValueType = string;
4
- export declare type TranslationsType = Record<TranslationsKeyType, TranslationsValueType>;
5
- export declare type TranslationPlaceholderType = string;
6
- export declare type TranslationPlaceholderValueType = string | number;
7
- export declare type TranslationVariableType = Record<TranslationPlaceholderType, TranslationPlaceholderValueType>;
8
- export declare type I18nConfigType = {
9
- translationsPath?: bgn.Schema.PathType;
10
- defaultLanguage?: bgn.Schema.LanguageType;
11
- supportedLanguages: Record<string, bgn.Schema.LanguageType>;
12
- };
13
- export declare type I18nVariablesType = {
14
- language: bgn.Schema.LanguageType;
15
- supportedLanguages: bgn.Schema.LanguageType[];
16
- translationsPath: bgn.Schema.PathType;
17
- };
18
- export declare class I18n {
19
- static LANGUAGE_COOKIE_NAME: string;
20
- static DEFAULT_TRANSLATIONS_PATH: any;
21
- static FALLBACK_LANGUAGE: string;
22
- static applyTo(config: I18nConfigType): import("hono").MiddlewareHandler<any, string, {}>;
23
- static getTranslations(language: bgn.Schema.LanguageType, translationsPath: bgn.Schema.PathType): Promise<TranslationsType>;
24
- static useTranslations(translations: TranslationsType): (key: TranslationsKeyType, variables?: TranslationVariableType) => string;
25
- static getTranslationPathForLanguage(language: bgn.Schema.LanguageType, translationsPath?: any): bgn.Schema.PathType;
26
- }
1
+ import * as tools from "@bgord/tools";
2
+ import { PathType } from "./path";
3
+ export type TranslationsKeyType = string;
4
+ export type TranslationsValueType = string;
5
+ export type TranslationsType = Record<TranslationsKeyType, TranslationsValueType>;
6
+ export type TranslationPlaceholderType = string;
7
+ export type TranslationPlaceholderValueType = string | number;
8
+ export type TranslationVariableType = Record<TranslationPlaceholderType, TranslationPlaceholderValueType>;
9
+ export type I18nConfigType = {
10
+ translationsPath?: PathType;
11
+ defaultLanguage?: tools.LanguageType;
12
+ supportedLanguages: Record<string, tools.LanguageType>;
13
+ };
14
+ export declare class I18n {
15
+ private translationsPath;
16
+ static DEFAULT_TRANSLATIONS_PATH: string;
17
+ constructor(translationsPath?: PathType);
18
+ getTranslations(language: tools.LanguageType): Promise<TranslationsType>;
19
+ useTranslations(translations: TranslationsType): (key: TranslationsKeyType, variables?: TranslationVariableType) => string;
20
+ getTranslationPathForLanguage(language: tools.LanguageType): PathType;
21
+ }
22
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAQ,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AACzC,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;AAElF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,+BAA+B,GAAG,MAAM,GAAG,MAAM,CAAC;AAC9D,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC,CAAC;AAE1G,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IACrC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;CACxD,CAAC;AAEF,qBAAa,IAAI;IAGH,OAAO,CAAC,gBAAgB;IAFpC,MAAM,CAAC,yBAAyB,SAAoC;gBAEhD,gBAAgB,GAAE,QAAyC;IAEzE,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAW9E,eAAe,CAAC,YAAY,EAAE,gBAAgB,IAClB,KAAK,mBAAmB,EAAE,YAAY,uBAAuB;IAiBzF,6BAA6B,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,GAAG,QAAQ;CAGtE"}
package/dist/i18n.js ADDED
@@ -0,0 +1,35 @@
1
+ import path from "node:path";
2
+ import { Path } from "./path";
3
+ export class I18n {
4
+ translationsPath;
5
+ static DEFAULT_TRANSLATIONS_PATH = Path.parse("infra/translations");
6
+ constructor(translationsPath = I18n.DEFAULT_TRANSLATIONS_PATH) {
7
+ this.translationsPath = translationsPath;
8
+ }
9
+ async getTranslations(language) {
10
+ try {
11
+ return Bun.file(this.getTranslationPathForLanguage(language)).json();
12
+ }
13
+ catch (error) {
14
+ // biome-ignore lint: lint/suspicious/noConsoleLog
15
+ console.log("I18n#getTranslations", error);
16
+ return {};
17
+ }
18
+ }
19
+ useTranslations(translations) {
20
+ return function translate(key, variables) {
21
+ const translation = translations[key];
22
+ if (!translation) {
23
+ console.warn(`[@bgord/node] missing translation for key: ${key}`);
24
+ return key;
25
+ }
26
+ if (!variables)
27
+ return translation;
28
+ return Object.entries(variables).reduce((result, [placeholder, value]) => result.replace(`{{${placeholder}}}`, String(value)), translation);
29
+ };
30
+ }
31
+ getTranslationPathForLanguage(language) {
32
+ return Path.parse(path.join(this.translationsPath, `${language}.json`));
33
+ }
34
+ }
35
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../src/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,IAAI,EAAY,MAAM,QAAQ,CAAC;AAgBxC,MAAM,OAAO,IAAI;IAGK;IAFpB,MAAM,CAAC,yBAAyB,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpE,YAAoB,mBAA6B,IAAI,CAAC,yBAAyB;QAA3D,qBAAgB,GAAhB,gBAAgB,CAA2C;IAAG,CAAC;IAEnF,KAAK,CAAC,eAAe,CAAC,QAA4B;QAChD,IAAI,CAAC;YACH,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,kDAAkD;YAClD,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAE3C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,eAAe,CAAC,YAA8B;QAC5C,OAAO,SAAS,SAAS,CAAC,GAAwB,EAAE,SAAmC;YACrF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YAEtC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,8CAA8C,GAAG,EAAE,CAAC,CAAC;gBAClE,OAAO,GAAG,CAAC;YACb,CAAC;YAED,IAAI,CAAC,SAAS;gBAAE,OAAO,WAAW,CAAC;YAEnC,OAAO,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CACrC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,WAAW,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EACrF,WAAW,CACZ,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC;IAED,6BAA6B,CAAC,QAA4B;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC;IAC1E,CAAC"}
@@ -1,4 +1,5 @@
1
- import sharp from "sharp";
2
- export declare class ImageProcessor {
3
- static sharp: typeof sharp;
4
- }
1
+ import sharp from "sharp";
2
+ export declare class ImageProcessor {
3
+ static sharp: typeof sharp;
4
+ }
5
+ //# sourceMappingURL=image-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-processor.d.ts","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,qBAAa,cAAc;IACzB,MAAM,CAAC,KAAK,eAAS;CACtB"}
@@ -0,0 +1,5 @@
1
+ import sharp from "sharp";
2
+ export class ImageProcessor {
3
+ static sharp = sharp;
4
+ }
5
+ //# sourceMappingURL=image-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-processor.js","sourceRoot":"","sources":["../src/image-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,cAAc;IACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,37 @@
1
- export * from "./api-key-shield";
2
- export * from "./api-version";
3
- export * from "./auth-shield";
4
- export * from "./context";
5
- export * from "./etag-extractor";
6
- export * from "./graceful-shutdown";
7
- export * from "./healthcheck";
8
- export * from "./http-logger";
9
- export * from "./rate-limit-shield";
10
- export * from "./time-zone-offset";
11
- export * from "./cache-static-files";
12
- export * from "./cache-response";
13
- export * from "./download-file";
14
- export * from "./i18n";
15
- export * from "./file-uploader";
16
- export * from "./image-processor";
17
- export * from "./setup";
1
+ export * from "./api-key-shield";
2
+ export * from "./api-version";
3
+ export * from "./auth-shield";
4
+ export * from "./build-info-repository";
5
+ export * from "./cache-resolver";
6
+ export * from "./cache-response";
7
+ export * from "./cache-static-files";
8
+ export * from "./context";
9
+ export * from "./correlation-id";
10
+ export * from "./download-file";
11
+ export * from "./etag-extractor";
12
+ export * from "./file-uploader";
13
+ export * from "./graceful-shutdown";
14
+ export * from "./healthcheck";
15
+ export * from "./http-logger";
16
+ export * from "./i18n";
17
+ export * from "./jobs";
18
+ export * from "./logger";
19
+ export * from "./mailer";
20
+ export * from "./memory-consumption";
21
+ export * from "./new-uuid";
22
+ export * from "./node-env.vo";
23
+ export * from "./passwords";
24
+ export * from "./path";
25
+ export * from "./port";
26
+ export * from "./prerequisites";
27
+ export * from "./prerequisites/index";
28
+ export * from "./rate-limit-shield";
29
+ export * from "./session-id";
30
+ export * from "./setup";
31
+ export * from "./time-zone-offset";
32
+ export * from "./uptime";
33
+ export * from "./username";
34
+ export * from "./uuid";
35
+ export * from "./weak-etag-extractor";
36
+ export { default as sharp } from "sharp";
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,37 @@
1
+ export * from "./api-key-shield";
2
+ export * from "./api-version";
3
+ export * from "./auth-shield";
4
+ export * from "./build-info-repository";
5
+ export * from "./cache-resolver";
6
+ export * from "./cache-response";
7
+ export * from "./cache-static-files";
8
+ export * from "./context";
9
+ export * from "./correlation-id";
10
+ export * from "./download-file";
11
+ export * from "./etag-extractor";
12
+ export * from "./file-uploader";
13
+ export * from "./graceful-shutdown";
14
+ export * from "./healthcheck";
15
+ export * from "./http-logger";
16
+ export * from "./i18n";
17
+ export * from "./jobs";
18
+ export * from "./logger";
19
+ export * from "./mailer";
20
+ export * from "./memory-consumption";
21
+ export * from "./new-uuid";
22
+ export * from "./node-env.vo";
23
+ export * from "./passwords";
24
+ export * from "./path";
25
+ export * from "./port";
26
+ export * from "./prerequisites";
27
+ export * from "./prerequisites/index";
28
+ export * from "./rate-limit-shield";
29
+ export * from "./session-id";
30
+ export * from "./setup";
31
+ export * from "./time-zone-offset";
32
+ export * from "./uptime";
33
+ export * from "./username";
34
+ export * from "./uuid";
35
+ export * from "./weak-etag-extractor";
36
+ export { default as sharp } from "sharp";
37
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,OAAO,CAAC"}
package/dist/jobs.d.ts CHANGED
@@ -30,3 +30,4 @@ export declare class JobHandler {
30
30
  handle(jobProcessor: JobProcessorType): () => Promise<void>;
31
31
  protect(cron: Cron): () => Promise<void>;
32
32
  }
33
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAEzD,oBAAY,mBAAmB;IAC7B,MAAM,IAAI;IACV,OAAO,IAAI;IACX,SAAS,IAAI;IACb,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,MAAM,IAAI;CACX;AAED,qBAAa,IAAI;IACf,MAAM,CAAC,SAAS;;;MAA0D;IAE1E,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB;IAIrC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO;CAGtD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B,CAAC;AAEF,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C,MAAM,CAAC,YAAY,EAAE,gBAAgB;IAsCrC,OAAO,CAAC,IAAI,EAAE,IAAI;CAWnB"}