@zudojs/constants 0.1.0 → 1.0.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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +123 -15
  3. package/dist/cache/cacheControl.type.d.ts +16 -7
  4. package/dist/cache/cacheControl.type.js +38 -6
  5. package/dist/common/common.constant.d.ts +80 -11
  6. package/dist/common/common.constant.js +126 -12
  7. package/dist/common/common.lifecycle.d.ts +43 -25
  8. package/dist/common/common.lifecycle.js +41 -27
  9. package/dist/common/common.schema.d.ts +58 -29
  10. package/dist/common/common.schema.js +74 -41
  11. package/dist/common/common.serialization.d.ts +18 -5
  12. package/dist/common/common.serialization.js +23 -8
  13. package/dist/common/index.d.ts +1 -1
  14. package/dist/common/index.js +1 -1
  15. package/dist/environment/environment.constant.d.ts +26 -2
  16. package/dist/environment/environment.constant.js +27 -3
  17. package/dist/environment/environment.type.d.ts +1 -1
  18. package/dist/environment/environment.type.js +3 -2
  19. package/dist/environment/index.d.ts +1 -1
  20. package/dist/http/httpContentType.type.d.ts +18 -4
  21. package/dist/http/httpContentType.type.js +22 -2
  22. package/dist/http/httpHeader.type.d.ts +7 -2
  23. package/dist/http/httpMethod.type.d.ts +3 -3
  24. package/dist/http/httpMethod.type.js +7 -6
  25. package/dist/http/httpStatus.type.d.ts +42 -2
  26. package/dist/http/httpStatus.type.js +36 -0
  27. package/dist/http/index.d.ts +3 -3
  28. package/dist/http/index.js +1 -1
  29. package/dist/internal/immutableSet.d.ts +26 -0
  30. package/dist/internal/immutableSet.js +40 -0
  31. package/dist/runtime/clock.d.ts +22 -2
  32. package/dist/runtime/clock.js +10 -1
  33. package/dist/runtime/index.d.ts +1 -1
  34. package/dist/runtime/random.d.ts +10 -1
  35. package/dist/runtime/random.js +32 -17
  36. package/dist/time/time.constant.d.ts +7 -1
  37. package/dist/time/time.constant.js +11 -5
  38. package/dist/validation/validation.constant.d.ts +12 -5
  39. package/dist/validation/validation.constant.js +16 -8
  40. package/dist/validation/validation.pattern.type.d.ts +37 -8
  41. package/dist/validation/validation.pattern.type.js +44 -15
  42. package/package.json +21 -13
  43. package/dist/.tsbuildinfo +0 -1
  44. package/dist/cache/cacheControl.type.d.ts.map +0 -1
  45. package/dist/cache/cacheControl.type.js.map +0 -1
  46. package/dist/cache/cacheStrategy.type.d.ts.map +0 -1
  47. package/dist/cache/cacheStrategy.type.js.map +0 -1
  48. package/dist/cache/index.d.ts.map +0 -1
  49. package/dist/cache/index.js.map +0 -1
  50. package/dist/common/common.constant.d.ts.map +0 -1
  51. package/dist/common/common.constant.js.map +0 -1
  52. package/dist/common/common.lifecycle.d.ts.map +0 -1
  53. package/dist/common/common.lifecycle.js.map +0 -1
  54. package/dist/common/common.schema.d.ts.map +0 -1
  55. package/dist/common/common.schema.js.map +0 -1
  56. package/dist/common/common.serialization.d.ts.map +0 -1
  57. package/dist/common/common.serialization.js.map +0 -1
  58. package/dist/common/common.type.d.ts.map +0 -1
  59. package/dist/common/common.type.js.map +0 -1
  60. package/dist/common/index.d.ts.map +0 -1
  61. package/dist/common/index.js.map +0 -1
  62. package/dist/constantsErrors/constantsError.base.d.ts.map +0 -1
  63. package/dist/constantsErrors/constantsError.base.js.map +0 -1
  64. package/dist/constantsErrors/index.d.ts.map +0 -1
  65. package/dist/constantsErrors/index.js.map +0 -1
  66. package/dist/environment/environment.constant.d.ts.map +0 -1
  67. package/dist/environment/environment.constant.js.map +0 -1
  68. package/dist/environment/environment.type.d.ts.map +0 -1
  69. package/dist/environment/environment.type.js.map +0 -1
  70. package/dist/environment/index.d.ts.map +0 -1
  71. package/dist/environment/index.js.map +0 -1
  72. package/dist/http/httpContentType.type.d.ts.map +0 -1
  73. package/dist/http/httpContentType.type.js.map +0 -1
  74. package/dist/http/httpHeader.type.d.ts.map +0 -1
  75. package/dist/http/httpHeader.type.js.map +0 -1
  76. package/dist/http/httpMethod.type.d.ts.map +0 -1
  77. package/dist/http/httpMethod.type.js.map +0 -1
  78. package/dist/http/httpStatus.type.d.ts.map +0 -1
  79. package/dist/http/httpStatus.type.js.map +0 -1
  80. package/dist/http/index.d.ts.map +0 -1
  81. package/dist/http/index.js.map +0 -1
  82. package/dist/index.d.ts.map +0 -1
  83. package/dist/index.js.map +0 -1
  84. package/dist/priority/index.d.ts.map +0 -1
  85. package/dist/priority/index.js.map +0 -1
  86. package/dist/priority/priority.type.d.ts.map +0 -1
  87. package/dist/priority/priority.type.js.map +0 -1
  88. package/dist/runtime/clock.d.ts.map +0 -1
  89. package/dist/runtime/clock.js.map +0 -1
  90. package/dist/runtime/index.d.ts.map +0 -1
  91. package/dist/runtime/index.js.map +0 -1
  92. package/dist/runtime/random.d.ts.map +0 -1
  93. package/dist/runtime/random.js.map +0 -1
  94. package/dist/time/index.d.ts.map +0 -1
  95. package/dist/time/index.js.map +0 -1
  96. package/dist/time/time.constant.d.ts.map +0 -1
  97. package/dist/time/time.constant.js.map +0 -1
  98. package/dist/time/time.unit.type.d.ts.map +0 -1
  99. package/dist/time/time.unit.type.js.map +0 -1
  100. package/dist/validation/index.d.ts.map +0 -1
  101. package/dist/validation/index.js.map +0 -1
  102. package/dist/validation/validation.constant.d.ts.map +0 -1
  103. package/dist/validation/validation.constant.js.map +0 -1
  104. package/dist/validation/validation.pattern.type.d.ts.map +0 -1
  105. package/dist/validation/validation.pattern.type.js.map +0 -1
@@ -11,9 +11,9 @@ export declare const ValidationLength: Readonly<{
11
11
  readonly SHORT: 64;
12
12
  /** Standard name field */
13
13
  readonly NAME: 128;
14
- /** Email address */
15
- readonly EMAIL: 255;
16
- /** Display name or title */
14
+ /** Email address (RFC 5321 maximum total length) */
15
+ readonly EMAIL: 254;
16
+ /** Display name or title (canonical: {@link Limits.MAX_DISPLAY_LENGTH}) */
17
17
  readonly DISPLAY: 255;
18
18
  /** Short description */
19
19
  readonly DESCRIPTION_SHORT: 500;
@@ -40,7 +40,7 @@ export declare const ValidationRange: Readonly<{
40
40
  readonly MAX_PERCENTAGE: 100;
41
41
  /** Minimum page number (1-based) */
42
42
  readonly MIN_PAGE: 1;
43
- /** Maximum page size */
43
+ /** Maximum page size (canonical: {@link Limits.MAX_PAGE_SIZE}) */
44
44
  readonly MAX_PAGE_SIZE: 100;
45
45
  /** Minimum pagination offset */
46
46
  readonly MIN_OFFSET: 0;
@@ -48,7 +48,14 @@ export declare const ValidationRange: Readonly<{
48
48
  readonly MAX_TIMEOUT_SECONDS: 3600;
49
49
  /** Minimum retry count */
50
50
  readonly MIN_RETRIES: 0;
51
- /** Maximum retry count */
51
+ /**
52
+ * Maximum retry count a caller may configure (upper validation bound;
53
+ * canonical: {@link Limits.MAX_RETRY_ATTEMPTS}).
54
+ *
55
+ * Note: this is intentionally larger than `DefaultRetry.MAX_ATTEMPTS` (3),
56
+ * which is the out-of-the-box default — this constant caps what users may
57
+ * request, the other is what they get if they configure nothing.
58
+ */
52
59
  readonly MAX_RETRIES: 10;
53
60
  }>;
54
61
  //# sourceMappingURL=validation.constant.d.ts.map
@@ -3,6 +3,7 @@
3
3
  *
4
4
  * @module validation/validation
5
5
  */
6
+ import { Limits } from "../common/common.constant.js";
6
7
  /**
7
8
  * Maximum allowed lengths for common fields.
8
9
  */
@@ -11,10 +12,10 @@ export const ValidationLength = Object.freeze({
11
12
  SHORT: 64,
12
13
  /** Standard name field */
13
14
  NAME: 128,
14
- /** Email address */
15
- EMAIL: 255,
16
- /** Display name or title */
17
- DISPLAY: 255,
15
+ /** Email address (RFC 5321 maximum total length) */
16
+ EMAIL: 254,
17
+ /** Display name or title (canonical: {@link Limits.MAX_DISPLAY_LENGTH}) */
18
+ DISPLAY: Limits.MAX_DISPLAY_LENGTH,
18
19
  /** Short description */
19
20
  DESCRIPTION_SHORT: 500,
20
21
  /** Long description or text body */
@@ -40,15 +41,22 @@ export const ValidationRange = Object.freeze({
40
41
  MAX_PERCENTAGE: 100,
41
42
  /** Minimum page number (1-based) */
42
43
  MIN_PAGE: 1,
43
- /** Maximum page size */
44
- MAX_PAGE_SIZE: 100,
44
+ /** Maximum page size (canonical: {@link Limits.MAX_PAGE_SIZE}) */
45
+ MAX_PAGE_SIZE: Limits.MAX_PAGE_SIZE,
45
46
  /** Minimum pagination offset */
46
47
  MIN_OFFSET: 0,
47
48
  /** Maximum timeout in seconds */
48
49
  MAX_TIMEOUT_SECONDS: 3_600,
49
50
  /** Minimum retry count */
50
51
  MIN_RETRIES: 0,
51
- /** Maximum retry count */
52
- MAX_RETRIES: 10,
52
+ /**
53
+ * Maximum retry count a caller may configure (upper validation bound;
54
+ * canonical: {@link Limits.MAX_RETRY_ATTEMPTS}).
55
+ *
56
+ * Note: this is intentionally larger than `DefaultRetry.MAX_ATTEMPTS` (3),
57
+ * which is the out-of-the-box default — this constant caps what users may
58
+ * request, the other is what they get if they configure nothing.
59
+ */
60
+ MAX_RETRIES: Limits.MAX_RETRY_ATTEMPTS,
53
61
  });
54
62
  //# sourceMappingURL=validation.constant.js.map
@@ -1,21 +1,39 @@
1
1
  /**
2
2
  * Common regex patterns for validation.
3
3
  *
4
+ * This module is the single source of truth for validation regexes in
5
+ * `@zudojs/constants`. Other modules (e.g. `SCHEMA_STRING_FORMATS`) reference
6
+ * these patterns rather than redefining them.
7
+ *
4
8
  * @module validation/validationPattern
5
9
  */
6
10
  /**
7
11
  * Pre-compiled regular expressions for common validation patterns.
8
12
  */
9
13
  export declare const ValidationPattern: Readonly<{
10
- /** RFC 5322 simplified email pattern */
14
+ /**
15
+ * Simplified email pattern (pragmatic subset of RFC 5322).
16
+ *
17
+ * The domain part rejects consecutive dots, leading/trailing dots, and
18
+ * labels that start or end with a hyphen. Combine with
19
+ * `ValidationLength.EMAIL` (254) for a length bound.
20
+ */
11
21
  readonly EMAIL: RegExp;
12
- /** UUID v4 */
22
+ /** UUID — any version/variant nibble (use UUID_V4 for strict v4). */
13
23
  readonly UUID: RegExp;
24
+ /** UUID v4 (strict: version nibble 4, RFC 4122 variant). */
25
+ readonly UUID_V4: RegExp;
14
26
  /** IPv4 address */
15
27
  readonly IPV4: RegExp;
16
- /** IPv6 address (simplified) */
28
+ /**
29
+ * IPv6 address — full form, compressed forms (`::1`, `fe80::1`), and
30
+ * IPv4-mapped/embedded forms (`::ffff:192.0.2.1`).
31
+ */
17
32
  readonly IPV6: RegExp;
18
- /** ISO 8601 date-time */
33
+ /**
34
+ * ISO 8601 date-time, anchored: `YYYY-MM-DDTHH:mm:ss` with optional
35
+ * fractional seconds and an optional `Z` or `±hh:mm` offset.
36
+ */
19
37
  readonly ISO_DATE_TIME: RegExp;
20
38
  /** ISO 8601 date only */
21
39
  readonly ISO_DATE: RegExp;
@@ -23,17 +41,28 @@ export declare const ValidationPattern: Readonly<{
23
41
  readonly ALPHANUMERIC: RegExp;
24
42
  /** Alphanumeric with hyphens and underscores */
25
43
  readonly SLUG: RegExp;
26
- /** Strong password: 8+ chars, uppercase, lowercase, digit, special */
44
+ /**
45
+ * Strong password: 8+ chars, uppercase, lowercase, digit, special
46
+ * (specials include space, backtick, and tilde).
47
+ */
27
48
  readonly STRONG_PASSWORD: RegExp;
28
49
  /** Hex colour code (3 or 6 digits) */
29
50
  readonly HEX_COLOR: RegExp;
30
51
  /** URL pattern (http/https) */
31
52
  readonly URL: RegExp;
32
- /** Semantic version (v1.2.3) */
53
+ /**
54
+ * Semantic version per semver.org (e.g. `1.2.3`, `1.0.0-alpha-1`,
55
+ * `2.0.0-rc.1+build.5`). No leading `v` prefix; leading zeros are rejected.
56
+ */
33
57
  readonly SEMVER: RegExp;
34
- /** Phone number (international format with optional + prefix) */
58
+ /** Phone number (E.164 international format with optional + prefix) */
35
59
  readonly PHONE: RegExp;
36
- /** File name (no path separators) */
60
+ /**
61
+ * File name (no path separators). Rejects `.` and `..` (path traversal),
62
+ * names ending with a dot or space, and Windows reserved device names
63
+ * (`CON`, `PRN`, `AUX`, `NUL`, `COM1`-`COM9`, `LPT1`-`LPT9`, with or
64
+ * without an extension, case-insensitively).
65
+ */
37
66
  readonly FILE_NAME: RegExp;
38
67
  }>;
39
68
  //# sourceMappingURL=validation.pattern.type.d.ts.map
@@ -1,39 +1,68 @@
1
1
  /**
2
2
  * Common regex patterns for validation.
3
3
  *
4
+ * This module is the single source of truth for validation regexes in
5
+ * `@zudojs/constants`. Other modules (e.g. `SCHEMA_STRING_FORMATS`) reference
6
+ * these patterns rather than redefining them.
7
+ *
4
8
  * @module validation/validationPattern
5
9
  */
6
10
  /**
7
11
  * Pre-compiled regular expressions for common validation patterns.
8
12
  */
9
13
  export const ValidationPattern = Object.freeze({
10
- /** RFC 5322 simplified email pattern */
11
- EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
12
- /** UUID v4 */
13
- UUID: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
14
+ /**
15
+ * Simplified email pattern (pragmatic subset of RFC 5322).
16
+ *
17
+ * The domain part rejects consecutive dots, leading/trailing dots, and
18
+ * labels that start or end with a hyphen. Combine with
19
+ * `ValidationLength.EMAIL` (254) for a length bound.
20
+ */
21
+ EMAIL: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.[a-zA-Z]{2,}$/,
22
+ /** UUID — any version/variant nibble (use UUID_V4 for strict v4). */
23
+ UUID: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,
24
+ /** UUID v4 (strict: version nibble 4, RFC 4122 variant). */
25
+ UUID_V4: /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
14
26
  /** IPv4 address */
15
27
  IPV4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
16
- /** IPv6 address (simplified) */
17
- IPV6: /^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$/,
18
- /** ISO 8601 date-time */
19
- ISO_DATE_TIME: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z?$/,
28
+ /**
29
+ * IPv6 address — full form, compressed forms (`::1`, `fe80::1`), and
30
+ * IPv4-mapped/embedded forms (`::ffff:192.0.2.1`).
31
+ */
32
+ IPV6: /^(?:(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,7}:|(?:[0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|(?:[0-9a-fA-F]{1,4}:){1,5}(?::[0-9a-fA-F]{1,4}){1,2}|(?:[0-9a-fA-F]{1,4}:){1,4}(?::[0-9a-fA-F]{1,4}){1,3}|(?:[0-9a-fA-F]{1,4}:){1,3}(?::[0-9a-fA-F]{1,4}){1,4}|(?:[0-9a-fA-F]{1,4}:){1,2}(?::[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:(?::[0-9a-fA-F]{1,4}){1,6}|:(?:(?::[0-9a-fA-F]{1,4}){1,7}|:)|::(?:[fF]{4}(?::0{1,4})?:)?(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[0-9a-fA-F]{1,4}:){1,4}:(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))$/,
33
+ /**
34
+ * ISO 8601 date-time, anchored: `YYYY-MM-DDTHH:mm:ss` with optional
35
+ * fractional seconds and an optional `Z` or `±hh:mm` offset.
36
+ */
37
+ ISO_DATE_TIME: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})?$/,
20
38
  /** ISO 8601 date only */
21
39
  ISO_DATE: /^\d{4}-\d{2}-\d{2}$/,
22
40
  /** Alphanumeric string (no special chars) */
23
41
  ALPHANUMERIC: /^[a-zA-Z0-9]+$/,
24
42
  /** Alphanumeric with hyphens and underscores */
25
43
  SLUG: /^[a-z0-9]+(?:-[a-z0-9]+)*$/,
26
- /** Strong password: 8+ chars, uppercase, lowercase, digit, special */
27
- STRONG_PASSWORD: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]).{8,}$/,
44
+ /**
45
+ * Strong password: 8+ chars, uppercase, lowercase, digit, special
46
+ * (specials include space, backtick, and tilde).
47
+ */
48
+ STRONG_PASSWORD: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[ !@#$%^&*()_+\-=[\]{};':"\\|,.<>/?`~]).{8,}$/,
28
49
  /** Hex colour code (3 or 6 digits) */
29
50
  HEX_COLOR: /^#(?:[0-9a-fA-F]{3}){1,2}$/,
30
51
  /** URL pattern (http/https) */
31
52
  URL: /^https?:\/\/[^\s/$.?#].[^\s]*$/i,
32
- /** Semantic version (v1.2.3) */
33
- SEMVER: /^\d+\.\d+\.\d+(?:-[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?(?:\+[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*)?$/,
34
- /** Phone number (international format with optional + prefix) */
53
+ /**
54
+ * Semantic version per semver.org (e.g. `1.2.3`, `1.0.0-alpha-1`,
55
+ * `2.0.0-rc.1+build.5`). No leading `v` prefix; leading zeros are rejected.
56
+ */
57
+ SEMVER: /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/,
58
+ /** Phone number (E.164 international format with optional + prefix) */
35
59
  PHONE: /^\+?[1-9]\d{6,14}$/,
36
- /** File name (no path separators) */
37
- FILE_NAME: /^[^<>:"/\\|?*\x00-\x1f]+$/,
60
+ /**
61
+ * File name (no path separators). Rejects `.` and `..` (path traversal),
62
+ * names ending with a dot or space, and Windows reserved device names
63
+ * (`CON`, `PRN`, `AUX`, `NUL`, `COM1`-`COM9`, `LPT1`-`LPT9`, with or
64
+ * without an extension, case-insensitively).
65
+ */
66
+ FILE_NAME: /^(?!\.{1,2}$)(?!(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.|$))(?!.*[. ]$)[^<>:"/\\|?*\x00-\x1f]+$/i,
38
67
  });
39
68
  //# sourceMappingURL=validation.pattern.type.js.map
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@zudojs/constants",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "Shared constants, enums, and type-safe literals for the Zudojs framework.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
+ "sideEffects": false,
7
8
  "main": "./dist/index.js",
8
9
  "module": "./dist/index.js",
9
10
  "types": "./dist/index.d.ts",
@@ -15,23 +16,19 @@
15
16
  }
16
17
  },
17
18
  "files": [
18
- "dist"
19
+ "dist",
20
+ "!dist/**/*.map",
21
+ "!dist/**/*.tsbuildinfo",
22
+ "!dist/.tsbuildinfo"
19
23
  ],
20
- "scripts": {
21
- "build": "tsc -p tsconfig.json",
22
- "typecheck": "tsc -p tsconfig.json --noEmit",
23
- "clean": "rm -rf dist",
24
- "test": "vitest run",
25
- "test:watch": "vitest"
26
- },
27
24
  "dependencies": {
28
- "@zudojs/errors": "0.1.0"
25
+ "@zudojs/errors": "1.0.0"
29
26
  },
30
27
  "engines": {
31
28
  "node": ">=24.0.0"
32
29
  },
33
30
  "devDependencies": {
34
- "typescript": "^7.0.2",
31
+ "typescript": "7.0.2",
35
32
  "vitest": "^4.1.11"
36
33
  },
37
34
  "publishConfig": {
@@ -44,8 +41,19 @@
44
41
  "types"
45
42
  ],
46
43
  "homepage": "https://github.com/oyinlola-tech/zudo#readme",
44
+ "bugs": {
45
+ "url": "https://github.com/oyinlola-tech/zudo/issues"
46
+ },
47
47
  "repository": {
48
48
  "type": "git",
49
- "url": "https://github.com/oyinlola-tech/zudo"
49
+ "url": "https://github.com/oyinlola-tech/zudo",
50
+ "directory": "packages/constants"
51
+ },
52
+ "scripts": {
53
+ "build": "tsc -p tsconfig.json",
54
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
55
+ "clean": "rm -rf dist *.tsbuildinfo",
56
+ "test": "vitest run",
57
+ "test:watch": "vitest"
50
58
  }
51
- }
59
+ }