@bgord/bun 0.10.1 → 0.11.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 (66) hide show
  1. package/dist/basic-auth.service.d.ts +2 -2
  2. package/dist/basic-auth.service.d.ts.map +1 -1
  3. package/dist/basic-auth.service.js +2 -2
  4. package/dist/basic-auth.service.js.map +1 -1
  5. package/dist/build-info-repository.service.js +1 -1
  6. package/dist/build-info-repository.service.js.map +1 -1
  7. package/dist/correlation-id.vo.d.ts +1 -1
  8. package/dist/correlation-id.vo.d.ts.map +1 -1
  9. package/dist/correlation-id.vo.js +1 -1
  10. package/dist/correlation-id.vo.js.map +1 -1
  11. package/dist/encryption.service.d.ts +2 -2
  12. package/dist/file-uploader.middleware.d.ts +1 -1
  13. package/dist/file-uploader.middleware.d.ts.map +1 -1
  14. package/dist/file-uploader.middleware.js +1 -1
  15. package/dist/file-uploader.middleware.js.map +1 -1
  16. package/dist/hcaptcha-shield.middleware.d.ts +1 -1
  17. package/dist/hcaptcha-shield.middleware.d.ts.map +1 -1
  18. package/dist/hcaptcha-shield.middleware.js +11 -3
  19. package/dist/hcaptcha-shield.middleware.js.map +1 -1
  20. package/dist/image-compressor.service.d.ts +1 -1
  21. package/dist/image-compressor.service.d.ts.map +1 -1
  22. package/dist/image-compressor.service.js +7 -1
  23. package/dist/image-compressor.service.js.map +1 -1
  24. package/dist/logger.service.d.ts +1 -2
  25. package/dist/logger.service.d.ts.map +1 -1
  26. package/dist/mailer.service.d.ts +1 -1
  27. package/dist/mailer.service.d.ts.map +1 -1
  28. package/dist/port.vo.d.ts +1 -1
  29. package/dist/port.vo.d.ts.map +1 -1
  30. package/dist/port.vo.js +1 -1
  31. package/dist/port.vo.js.map +1 -1
  32. package/dist/prerequisites/translations.d.ts.map +1 -1
  33. package/dist/prerequisites/translations.js.map +1 -1
  34. package/dist/rate-limit-shield.middleware.js +1 -1
  35. package/dist/rate-limit-shield.middleware.js.map +1 -1
  36. package/dist/recaptcha-shield.middleware.d.ts +1 -1
  37. package/dist/recaptcha-shield.middleware.d.ts.map +1 -1
  38. package/dist/recaptcha-shield.middleware.js +8 -2
  39. package/dist/recaptcha-shield.middleware.js.map +1 -1
  40. package/dist/setup.service.d.ts +1 -1
  41. package/dist/setup.service.d.ts.map +1 -1
  42. package/dist/time-zone-offset.middleware.js +1 -1
  43. package/dist/time-zone-offset.middleware.js.map +1 -1
  44. package/dist/tsconfig.tsbuildinfo +1 -1
  45. package/dist/uptime.service.d.ts.map +1 -1
  46. package/dist/uptime.service.js +4 -1
  47. package/dist/uptime.service.js.map +1 -1
  48. package/dist/url-wo-trailing-slash.vo.d.ts +1 -1
  49. package/dist/url-wo-trailing-slash.vo.d.ts.map +1 -1
  50. package/dist/url-wo-trailing-slash.vo.js +2 -1
  51. package/dist/url-wo-trailing-slash.vo.js.map +1 -1
  52. package/package.json +4 -4
  53. package/src/basic-auth.service.ts +2 -2
  54. package/src/build-info-repository.service.ts +1 -1
  55. package/src/correlation-id.vo.ts +1 -1
  56. package/src/file-uploader.middleware.ts +2 -2
  57. package/src/hcaptcha-shield.middleware.ts +1 -1
  58. package/src/image-compressor.service.ts +7 -1
  59. package/src/logger.service.ts +1 -1
  60. package/src/port.vo.ts +1 -1
  61. package/src/prerequisites/translations.ts +12 -9
  62. package/src/rate-limit-shield.middleware.ts +1 -1
  63. package/src/recaptcha-shield.middleware.ts +1 -1
  64. package/src/time-zone-offset.middleware.ts +1 -1
  65. package/src/uptime.service.ts +4 -1
  66. package/src/url-wo-trailing-slash.vo.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"uptime.service.d.ts","sourceRoot":"","sources":["../src/uptime.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;IAC7B,SAAS,EAAE,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CAClE,CAAC;AAEF,qBAAa,MAAM;IACjB,MAAM,CAAC,GAAG,IAAI,gBAAgB;CAO/B"}
1
+ {"version":3,"file":"uptime.service.d.ts","sourceRoot":"","sources":["../src/uptime.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAEtC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;IAC7B,SAAS,EAAE,UAAU,CAAC,CAAC,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CAClE,CAAC;AAEF,qBAAa,MAAM;IACjB,MAAM,CAAC,GAAG,IAAI,gBAAgB;CAU/B"}
@@ -4,7 +4,10 @@ export class Uptime {
4
4
  const rounding = new tools.RoundToNearest();
5
5
  const uptime = tools.Time.Seconds(rounding.round(process.uptime()));
6
6
  const uptimeFormatted = tools.DateFormatters.relative(Date.now() - uptime.ms);
7
- return { seconds: uptime.seconds, formatted: uptimeFormatted };
7
+ return {
8
+ seconds: tools.Timestamp.parse(uptime.seconds),
9
+ formatted: uptimeFormatted,
10
+ };
8
11
  }
9
12
  }
10
13
  //# sourceMappingURL=uptime.service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"uptime.service.js","sourceRoot":"","sources":["../src/uptime.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAOtC,MAAM,OAAO,MAAM;IACjB,MAAM,CAAC,GAAG;QACR,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IACjE,CAAC;CACF"}
1
+ {"version":3,"file":"uptime.service.js","sourceRoot":"","sources":["../src/uptime.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAOtC,MAAM,OAAO,MAAM;IACjB,MAAM,CAAC,GAAG;QACR,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QAE9E,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC;YAC9C,SAAS,EAAE,eAAe;SAC3B,CAAC;IACJ,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
1
  import { z } from "zod/v4";
2
- export declare const UrlWithoutTrailingSlash: z.ZodURL;
2
+ export declare const UrlWithoutTrailingSlash: z.core.$ZodBranded<z.ZodURL, "UrlWithoutTrailingSlash">;
3
3
  export type UrlWithoutTrailingSlashType = z.infer<typeof UrlWithoutTrailingSlash>;
4
4
  //# sourceMappingURL=url-wo-trailing-slash.vo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-wo-trailing-slash.vo.d.ts","sourceRoot":"","sources":["../src/url-wo-trailing-slash.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,uBAAuB,UAMhC,CAAC;AAEL,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"url-wo-trailing-slash.vo.d.ts","sourceRoot":"","sources":["../src/url-wo-trailing-slash.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,eAAO,MAAM,uBAAuB,yDAOD,CAAC;AAEpC,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -5,5 +5,6 @@ export const UrlWithoutTrailingSlash = z
5
5
  .min(1)
6
6
  .refine((value) => !value.endsWith("/"), {
7
7
  message: "url_cannot_end_with_trailing_slash",
8
- });
8
+ })
9
+ .brand("UrlWithoutTrailingSlash");
9
10
  //# sourceMappingURL=url-wo-trailing-slash.vo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-wo-trailing-slash.vo.js","sourceRoot":"","sources":["../src/url-wo-trailing-slash.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,GAAG,EAAE;KACL,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACvC,OAAO,EAAE,oCAAoC;CAC9C,CAAC,CAAC"}
1
+ {"version":3,"file":"url-wo-trailing-slash.vo.js","sourceRoot":"","sources":["../src/url-wo-trailing-slash.vo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAE3B,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC;KACrC,GAAG,EAAE;KACL,IAAI,EAAE;KACN,GAAG,CAAC,CAAC,CAAC;KACN,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;IACvC,OAAO,EAAE,oCAAoC;CAC9C,CAAC;KACD,KAAK,CAAC,yBAAyB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bgord/bun",
3
- "version": "0.10.1",
3
+ "version": "0.11.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "author": "Bartosz Gordon",
@@ -20,19 +20,19 @@
20
20
  "@biomejs/biome": "1.9.4",
21
21
  "@commitlint/cli": "19.8.1",
22
22
  "@commitlint/config-conventional": "19.8.1",
23
- "@types/bun": "1.2.15",
23
+ "@types/bun": "1.2.16",
24
24
  "@types/lodash": "4.17.17",
25
25
  "@types/mime-types": "3.0.1",
26
26
  "@types/nodemailer": "6.4.17",
27
27
  "cspell": "9.0.2",
28
- "knip": "5.60.2",
28
+ "knip": "5.61.0",
29
29
  "lefthook": "1.11.13",
30
30
  "only-allow": "1.2.1",
31
31
  "shellcheck": "3.1.0",
32
32
  "typescript": "5.8.3"
33
33
  },
34
34
  "dependencies": {
35
- "@bgord/tools": "0.8.0",
35
+ "@bgord/tools": "0.9.2",
36
36
  "check-disk-space": "3.4.0",
37
37
  "croner": "9.0.0",
38
38
  "hcaptcha": "0.2.0",
@@ -1,10 +1,10 @@
1
1
  import { z } from "zod/v4";
2
2
 
3
- export const BasicAuthUsername = z.string().min(1).max(128);
3
+ export const BasicAuthUsername = z.string().min(1).max(128).brand("BasicAuthUsername");
4
4
 
5
5
  export type BasicAuthUsernameType = z.infer<typeof BasicAuthUsername>;
6
6
 
7
- export const BasicAuthPassword = z.string().min(1).max(128);
7
+ export const BasicAuthPassword = z.string().min(1).max(128).brand("BasicAuthPassword");
8
8
 
9
9
  export type BasicAuthPasswordType = z.infer<typeof BasicAuthPassword>;
10
10
 
@@ -7,7 +7,7 @@ export type BuildInfoType = {
7
7
 
8
8
  export class BuildInfoRepository {
9
9
  static async extract(): Promise<BuildInfoType> {
10
- const BUILD_DATE = Date.now();
10
+ const BUILD_DATE = tools.Timestamp.parse(Date.now());
11
11
 
12
12
  try {
13
13
  const packageJson = await BuildInfoRepository.getPackageJson();
@@ -2,6 +2,6 @@ import { z } from "zod/v4";
2
2
 
3
3
  import { UUID } from "./uuid.vo";
4
4
 
5
- export const CorrelationId = UUID;
5
+ export const CorrelationId = UUID.brand("CorrelationId");
6
6
 
7
7
  export type CorrelationIdType = z.infer<typeof CorrelationId>;
@@ -13,14 +13,14 @@ export const FileTooBigError = new HTTPException(400, {
13
13
 
14
14
  type FileUploaderConfigType = {
15
15
  mimeTypes: string[];
16
- maxFilesSize: tools.SizeValueType;
16
+ maxFilesSize: tools.Size;
17
17
  };
18
18
 
19
19
  export class FileUploader {
20
20
  static validate(config: FileUploaderConfigType) {
21
21
  return [
22
22
  bodyLimit({
23
- maxSize: config.maxFilesSize,
23
+ maxSize: config.maxFilesSize.toBytes(),
24
24
  onError: () => {
25
25
  throw FileTooBigError;
26
26
  },
@@ -3,7 +3,7 @@ import { createMiddleware } from "hono/factory";
3
3
  import { HTTPException } from "hono/http-exception";
4
4
  import { z } from "zod/v4";
5
5
 
6
- export const HCaptchaSecretKey = z.string().trim().length(42);
6
+ export const HCaptchaSecretKey = z.string().trim().length(42).brand("HCaptchaSecretKey");
7
7
 
8
8
  export type HCaptchaSecretKeyType = z.infer<typeof HCaptchaSecretKey>;
9
9
 
@@ -3,7 +3,13 @@ import { z } from "zod/v4";
3
3
 
4
4
  import type { PathType } from "../src/path.vo";
5
5
 
6
- export const ImageCompressionQuality = z.number().int().min(1).max(100).default(85);
6
+ export const ImageCompressionQuality = z
7
+ .number()
8
+ .int()
9
+ .min(1)
10
+ .max(100)
11
+ .default(85)
12
+ .brand("ImageCompressionQuality");
7
13
 
8
14
  type ImageCompressionQualityType = z.infer<typeof ImageCompressionQuality>;
9
15
 
@@ -52,7 +52,7 @@ type LogFullType = {
52
52
  client: { ip?: string; userAgent?: string };
53
53
  correlationId?: LogCorrelationIdType;
54
54
  responseCode?: number;
55
- durationMs?: tools.TimestampType;
55
+ durationMs?: number;
56
56
  metadata?: LogMetadataType;
57
57
  };
58
58
 
package/src/port.vo.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { z } from "zod/v4";
2
2
 
3
- export const Port = z.coerce.number().min(0).max(99999);
3
+ export const Port = z.coerce.number().min(0).max(99999).brand("Port");
4
4
 
5
5
  export type PortType = z.infer<typeof Port>;
@@ -34,7 +34,10 @@ export class PrerequisiteTranslations extends prereqs.AbstractPrerequisite<Prere
34
34
  await fsp.access(translationsPath, constants.R_OK);
35
35
 
36
36
  for (const language in this.config.supportedLanguages) {
37
- await fsp.access(new i18n.I18n().getTranslationPathForLanguage(language), constants.R_OK);
37
+ await fsp.access(
38
+ new i18n.I18n().getTranslationPathForLanguage(language as tools.LanguageType),
39
+ constants.R_OK,
40
+ );
38
41
  }
39
42
  } catch (error) {
40
43
  return this.reject();
@@ -49,28 +52,28 @@ export class PrerequisiteTranslations extends prereqs.AbstractPrerequisite<Prere
49
52
  const problems: PrerequisiteTranslationsProblemType[] = [];
50
53
 
51
54
  for (const language of supportedLanguages) {
52
- const translations = await new i18n.I18n().getTranslations(language);
55
+ const translations = await new i18n.I18n().getTranslations(language as tools.LanguageType);
53
56
  const translationKeys = Object.keys(translations);
54
57
 
55
- languageToTranslationKeys[language] = translationKeys;
58
+ languageToTranslationKeys[language as tools.LanguageType] = translationKeys;
56
59
  }
57
60
 
58
61
  for (const currentLanguage in languageToTranslationKeys) {
59
- const translationKeys = languageToTranslationKeys[currentLanguage] ?? [];
62
+ const translationKeys = languageToTranslationKeys[currentLanguage as tools.LanguageType] ?? [];
60
63
 
61
64
  for (const translationKey of translationKeys) {
62
65
  for (const supportedLanguage of supportedLanguages) {
63
66
  if (supportedLanguage === currentLanguage) continue;
64
67
 
65
- const translationKeyExists = languageToTranslationKeys[supportedLanguage]?.some(
66
- (key) => translationKey === key,
67
- );
68
+ const translationKeyExists = languageToTranslationKeys[
69
+ supportedLanguage as tools.LanguageType
70
+ ]?.some((key) => translationKey === key);
68
71
 
69
72
  if (!translationKeyExists) {
70
73
  problems.push({
71
74
  translationKey,
72
- existsInLanguage: currentLanguage,
73
- missingInLanguage: supportedLanguage,
75
+ existsInLanguage: currentLanguage as tools.LanguageType,
76
+ missingInLanguage: supportedLanguage as tools.LanguageType,
74
77
  });
75
78
  }
76
79
  }
@@ -19,7 +19,7 @@ export const rateLimitShield = (options: RateLimitShieldOptionsType) => {
19
19
  if (!enabled) return next();
20
20
 
21
21
  const currentTimestampMs = Date.now();
22
- const check = rateLimiter.verify(currentTimestampMs);
22
+ const check = rateLimiter.verify(tools.Timestamp.parse(currentTimestampMs));
23
23
 
24
24
  if (!check.allowed) {
25
25
  throw TooManyRequestsError;
@@ -6,7 +6,7 @@ export const RecaptchaSiteKey = z.string().trim().length(40);
6
6
 
7
7
  export type RecaptchaSiteKeyType = z.infer<typeof RecaptchaSiteKey>;
8
8
 
9
- export const RecaptchaSecretKey = z.string().trim().length(40);
9
+ export const RecaptchaSecretKey = z.string().trim().length(40).brand("RecaptchaSecretKey");
10
10
 
11
11
  export type RecaptchaSecretKeyType = z.infer<typeof RecaptchaSecretKey>;
12
12
 
@@ -32,7 +32,7 @@ export class TimeZoneOffset {
32
32
  timestamp: tools.TimestampType,
33
33
  timeZoneOffsetMs: tools.TimeResult["ms"],
34
34
  ): tools.TimestampType {
35
- return timestamp - timeZoneOffsetMs;
35
+ return tools.Timestamp.parse(timestamp - timeZoneOffsetMs);
36
36
  }
37
37
 
38
38
  static adjustDate(timestamp: tools.TimestampType, timeZoneOffsetMs: tools.TimeResult["ms"]): Date {
@@ -11,6 +11,9 @@ export class Uptime {
11
11
  const uptime = tools.Time.Seconds(rounding.round(process.uptime()));
12
12
  const uptimeFormatted = tools.DateFormatters.relative(Date.now() - uptime.ms);
13
13
 
14
- return { seconds: uptime.seconds, formatted: uptimeFormatted };
14
+ return {
15
+ seconds: tools.Timestamp.parse(uptime.seconds),
16
+ formatted: uptimeFormatted,
17
+ };
15
18
  }
16
19
  }
@@ -6,6 +6,7 @@ export const UrlWithoutTrailingSlash = z
6
6
  .min(1)
7
7
  .refine((value) => !value.endsWith("/"), {
8
8
  message: "url_cannot_end_with_trailing_slash",
9
- });
9
+ })
10
+ .brand("UrlWithoutTrailingSlash");
10
11
 
11
12
  export type UrlWithoutTrailingSlashType = z.infer<typeof UrlWithoutTrailingSlash>;