guarden 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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +370 -0
  3. package/dist/cjs/assert/assertions.js +82 -0
  4. package/dist/cjs/assert/assertions.js.map +1 -0
  5. package/dist/cjs/assert/index.js +13 -0
  6. package/dist/cjs/assert/index.js.map +1 -0
  7. package/dist/cjs/assert/invariant.js +43 -0
  8. package/dist/cjs/assert/invariant.js.map +1 -0
  9. package/dist/cjs/env/index.js +11 -0
  10. package/dist/cjs/env/index.js.map +1 -0
  11. package/dist/cjs/env/schema.js +313 -0
  12. package/dist/cjs/env/schema.js.map +1 -0
  13. package/dist/cjs/guards/advanced.js +190 -0
  14. package/dist/cjs/guards/advanced.js.map +1 -0
  15. package/dist/cjs/guards/combinators.js +195 -0
  16. package/dist/cjs/guards/combinators.js.map +1 -0
  17. package/dist/cjs/guards/index.js +68 -0
  18. package/dist/cjs/guards/index.js.map +1 -0
  19. package/dist/cjs/guards/primitives.js +123 -0
  20. package/dist/cjs/guards/primitives.js.map +1 -0
  21. package/dist/cjs/guards/structures.js +113 -0
  22. package/dist/cjs/guards/structures.js.map +1 -0
  23. package/dist/cjs/index.js +135 -0
  24. package/dist/cjs/index.js.map +1 -0
  25. package/dist/cjs/result/async.js +132 -0
  26. package/dist/cjs/result/async.js.map +1 -0
  27. package/dist/cjs/result/index.js +15 -0
  28. package/dist/cjs/result/index.js.map +1 -0
  29. package/dist/cjs/result/option.js +175 -0
  30. package/dist/cjs/result/option.js.map +1 -0
  31. package/dist/cjs/result/result.js +208 -0
  32. package/dist/cjs/result/result.js.map +1 -0
  33. package/dist/cjs/transform/coerce.js +151 -0
  34. package/dist/cjs/transform/coerce.js.map +1 -0
  35. package/dist/cjs/transform/index.js +36 -0
  36. package/dist/cjs/transform/index.js.map +1 -0
  37. package/dist/cjs/transform/pipe.js +18 -0
  38. package/dist/cjs/transform/pipe.js.map +1 -0
  39. package/dist/cjs/transform/sanitize.js +218 -0
  40. package/dist/cjs/transform/sanitize.js.map +1 -0
  41. package/dist/cjs/utils/errors.js +94 -0
  42. package/dist/cjs/utils/errors.js.map +1 -0
  43. package/dist/cjs/utils/types.js +6 -0
  44. package/dist/cjs/utils/types.js.map +1 -0
  45. package/dist/esm/assert/assertions.js +75 -0
  46. package/dist/esm/assert/assertions.js.map +1 -0
  47. package/dist/esm/assert/index.js +3 -0
  48. package/dist/esm/assert/index.js.map +1 -0
  49. package/dist/esm/assert/invariant.js +39 -0
  50. package/dist/esm/assert/invariant.js.map +1 -0
  51. package/dist/esm/env/index.js +2 -0
  52. package/dist/esm/env/index.js.map +1 -0
  53. package/dist/esm/env/schema.js +304 -0
  54. package/dist/esm/env/schema.js.map +1 -0
  55. package/dist/esm/guards/advanced.js +170 -0
  56. package/dist/esm/guards/advanced.js.map +1 -0
  57. package/dist/esm/guards/combinators.js +182 -0
  58. package/dist/esm/guards/combinators.js.map +1 -0
  59. package/dist/esm/guards/index.js +8 -0
  60. package/dist/esm/guards/index.js.map +1 -0
  61. package/dist/esm/guards/primitives.js +108 -0
  62. package/dist/esm/guards/primitives.js.map +1 -0
  63. package/dist/esm/guards/structures.js +97 -0
  64. package/dist/esm/guards/structures.js.map +1 -0
  65. package/dist/esm/index.js +17 -0
  66. package/dist/esm/index.js.map +1 -0
  67. package/dist/esm/result/async.js +127 -0
  68. package/dist/esm/result/async.js.map +1 -0
  69. package/dist/esm/result/index.js +4 -0
  70. package/dist/esm/result/index.js.map +1 -0
  71. package/dist/esm/result/option.js +170 -0
  72. package/dist/esm/result/option.js.map +1 -0
  73. package/dist/esm/result/result.js +203 -0
  74. package/dist/esm/result/result.js.map +1 -0
  75. package/dist/esm/transform/coerce.js +143 -0
  76. package/dist/esm/transform/coerce.js.map +1 -0
  77. package/dist/esm/transform/index.js +4 -0
  78. package/dist/esm/transform/index.js.map +1 -0
  79. package/dist/esm/transform/pipe.js +14 -0
  80. package/dist/esm/transform/pipe.js.map +1 -0
  81. package/dist/esm/transform/sanitize.js +195 -0
  82. package/dist/esm/transform/sanitize.js.map +1 -0
  83. package/dist/esm/utils/errors.js +84 -0
  84. package/dist/esm/utils/errors.js.map +1 -0
  85. package/dist/esm/utils/types.js +5 -0
  86. package/dist/esm/utils/types.js.map +1 -0
  87. package/dist/types/assert/assertions.d.ts +52 -0
  88. package/dist/types/assert/assertions.d.ts.map +1 -0
  89. package/dist/types/assert/index.d.ts +3 -0
  90. package/dist/types/assert/index.d.ts.map +1 -0
  91. package/dist/types/assert/invariant.d.ts +29 -0
  92. package/dist/types/assert/invariant.d.ts.map +1 -0
  93. package/dist/types/env/index.d.ts +2 -0
  94. package/dist/types/env/index.d.ts.map +1 -0
  95. package/dist/types/env/schema.d.ts +131 -0
  96. package/dist/types/env/schema.d.ts.map +1 -0
  97. package/dist/types/guards/advanced.d.ts +101 -0
  98. package/dist/types/guards/advanced.d.ts.map +1 -0
  99. package/dist/types/guards/combinators.d.ts +120 -0
  100. package/dist/types/guards/combinators.d.ts.map +1 -0
  101. package/dist/types/guards/index.d.ts +5 -0
  102. package/dist/types/guards/index.d.ts.map +1 -0
  103. package/dist/types/guards/primitives.d.ts +75 -0
  104. package/dist/types/guards/primitives.d.ts.map +1 -0
  105. package/dist/types/guards/structures.d.ts +58 -0
  106. package/dist/types/guards/structures.d.ts.map +1 -0
  107. package/dist/types/index.d.ts +8 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/result/async.d.ts +72 -0
  110. package/dist/types/result/async.d.ts.map +1 -0
  111. package/dist/types/result/index.d.ts +4 -0
  112. package/dist/types/result/index.d.ts.map +1 -0
  113. package/dist/types/result/option.d.ts +106 -0
  114. package/dist/types/result/option.d.ts.map +1 -0
  115. package/dist/types/result/result.d.ts +126 -0
  116. package/dist/types/result/result.d.ts.map +1 -0
  117. package/dist/types/transform/coerce.d.ts +73 -0
  118. package/dist/types/transform/coerce.d.ts.map +1 -0
  119. package/dist/types/transform/index.d.ts +4 -0
  120. package/dist/types/transform/index.d.ts.map +1 -0
  121. package/dist/types/transform/pipe.d.ts +44 -0
  122. package/dist/types/transform/pipe.d.ts.map +1 -0
  123. package/dist/types/transform/sanitize.d.ts +108 -0
  124. package/dist/types/transform/sanitize.d.ts.map +1 -0
  125. package/dist/types/utils/errors.d.ts +51 -0
  126. package/dist/types/utils/errors.d.ts.map +1 -0
  127. package/dist/types/utils/types.d.ts +29 -0
  128. package/dist/types/utils/types.d.ts.map +1 -0
  129. package/package.json +144 -0
@@ -0,0 +1,170 @@
1
+ // ============================================================================
2
+ // Guarden — Advanced Type Guards
3
+ // ============================================================================
4
+ // -- String guards ----------------------------------------------------------
5
+ /**
6
+ * Check if a value is a non-empty string.
7
+ */
8
+ export function isNonEmptyString(value) {
9
+ return typeof value === 'string' && value.length > 0;
10
+ }
11
+ /**
12
+ * Check if a value is a string matching an email pattern.
13
+ */
14
+ export function isEmail(value) {
15
+ if (typeof value !== 'string')
16
+ return false;
17
+ // RFC 5322 simplified pattern
18
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
19
+ }
20
+ /**
21
+ * Check if a value is a valid URL string.
22
+ */
23
+ export function isURL(value) {
24
+ if (typeof value !== 'string')
25
+ return false;
26
+ try {
27
+ new URL(value);
28
+ return true;
29
+ }
30
+ catch {
31
+ return false;
32
+ }
33
+ }
34
+ /**
35
+ * Check if a value is a valid UUID (v1-v5).
36
+ */
37
+ export function isUUID(value) {
38
+ if (typeof value !== 'string')
39
+ return false;
40
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);
41
+ }
42
+ /**
43
+ * Check if a value is a valid ISO 8601 date string.
44
+ */
45
+ export function isISO8601(value) {
46
+ if (typeof value !== 'string')
47
+ return false;
48
+ const date = new Date(value);
49
+ return !Number.isNaN(date.getTime()) && /^\d{4}-\d{2}-\d{2}/.test(value);
50
+ }
51
+ /**
52
+ * Check if a value is a valid JSON string.
53
+ */
54
+ export function isJSONString(value) {
55
+ if (typeof value !== 'string')
56
+ return false;
57
+ try {
58
+ JSON.parse(value);
59
+ return true;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ /**
66
+ * Check if a value is a string matching a hex color (#fff or #ffffff).
67
+ */
68
+ export function isHexColor(value) {
69
+ if (typeof value !== 'string')
70
+ return false;
71
+ return /^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(value);
72
+ }
73
+ // -- Number guards ----------------------------------------------------------
74
+ /**
75
+ * Check if a value is a positive number (> 0).
76
+ */
77
+ export function isPositiveNumber(value) {
78
+ return typeof value === 'number' && !Number.isNaN(value) && value > 0;
79
+ }
80
+ /**
81
+ * Check if a value is a negative number (< 0).
82
+ */
83
+ export function isNegativeNumber(value) {
84
+ return typeof value === 'number' && !Number.isNaN(value) && value < 0;
85
+ }
86
+ /**
87
+ * Check if a value is an integer.
88
+ */
89
+ export function isInteger(value) {
90
+ return typeof value === 'number' && Number.isInteger(value);
91
+ }
92
+ /**
93
+ * Check if a value is a safe integer (within Number.MAX_SAFE_INTEGER bounds).
94
+ */
95
+ export function isSafeInteger(value) {
96
+ return typeof value === 'number' && Number.isSafeInteger(value);
97
+ }
98
+ // -- Array guards -----------------------------------------------------------
99
+ /**
100
+ * Check if a value is a non-empty array.
101
+ */
102
+ export function isNonEmptyArray(value) {
103
+ return Array.isArray(value) && value.length > 0;
104
+ }
105
+ // -- Factory guards ---------------------------------------------------------
106
+ /**
107
+ * Create a guard that checks if a number is within a range [min, max].
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * const isPercent = isInRange(0, 100);
112
+ * isPercent(50) // true
113
+ * isPercent(150) // false
114
+ * ```
115
+ */
116
+ export function isInRange(min, max) {
117
+ return (value) => typeof value === 'number' && !Number.isNaN(value) && value >= min && value <= max;
118
+ }
119
+ /**
120
+ * Create a guard that checks if a value is one of the specified values.
121
+ *
122
+ * @example
123
+ * ```ts
124
+ * const isDirection = isOneOf(['up', 'down', 'left', 'right'] as const);
125
+ * if (isDirection(input)) {
126
+ * // input is 'up' | 'down' | 'left' | 'right'
127
+ * }
128
+ * ```
129
+ */
130
+ export function isOneOf(values) {
131
+ const valueSet = new Set(values);
132
+ return (value) => valueSet.has(value);
133
+ }
134
+ /**
135
+ * Create a guard that checks if a string matches a pattern.
136
+ *
137
+ * @example
138
+ * ```ts
139
+ * const isSlug = isMatch(/^[a-z0-9-]+$/);
140
+ * isSlug("hello-world") // true
141
+ * isSlug("Hello World") // false
142
+ * ```
143
+ */
144
+ export function isMatch(pattern) {
145
+ return (value) => typeof value === 'string' && pattern.test(value);
146
+ }
147
+ /**
148
+ * Create a guard that checks if a string has a minimum length.
149
+ */
150
+ export function isMinLength(min) {
151
+ return (value) => typeof value === 'string' && value.length >= min;
152
+ }
153
+ /**
154
+ * Create a guard that checks if a string has a maximum length.
155
+ */
156
+ export function isMaxLength(max) {
157
+ return (value) => typeof value === 'string' && value.length <= max;
158
+ }
159
+ /**
160
+ * Check if a value is an instance of a given class.
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * const isMyError = isInstanceOf(TypeError);
165
+ * ```
166
+ */
167
+ export function isInstanceOf(constructor) {
168
+ return (value) => value instanceof constructor;
169
+ }
170
+ //# sourceMappingURL=advanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.js","sourceRoot":"","sources":["../../../src/guards/advanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ // ============================================================================
2
+ // Guarden — Guard Combinators
3
+ // ============================================================================
4
+ /**
5
+ * Combine two guards with AND logic (intersection).
6
+ * Value must satisfy both guards.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * const isPositiveInteger = and(isInteger, isPositiveNumber);
11
+ * ```
12
+ */
13
+ export function and(guardA, guardB) {
14
+ return (value) => guardA(value) && guardB(value);
15
+ }
16
+ /**
17
+ * Combine two guards with OR logic (union).
18
+ * Value must satisfy at least one guard.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const isStringOrNumber = or(isString, isNumber);
23
+ * ```
24
+ */
25
+ export function or(guardA, guardB) {
26
+ return (value) => guardA(value) || guardB(value);
27
+ }
28
+ /**
29
+ * Negate a guard.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const isNotNull = not(isNull);
34
+ * ```
35
+ */
36
+ export function not(guard) {
37
+ return (value) => !guard(value);
38
+ }
39
+ /**
40
+ * Create a guard that validates an object shape.
41
+ * Each property is validated by its corresponding guard.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * const isUser = shape({
46
+ * name: isString,
47
+ * age: isNumber,
48
+ * email: isEmail,
49
+ * });
50
+ *
51
+ * if (isUser(data)) {
52
+ * data.name; // string
53
+ * data.age; // number
54
+ * data.email; // string
55
+ * }
56
+ * ```
57
+ */
58
+ export function shape(schema) {
59
+ return (value) => {
60
+ if (typeof value !== 'object' || value === null)
61
+ return false;
62
+ const obj = value;
63
+ for (const key in schema) {
64
+ if (!Object.prototype.hasOwnProperty.call(schema, key))
65
+ continue;
66
+ if (!schema[key](obj[key]))
67
+ return false;
68
+ }
69
+ return true;
70
+ };
71
+ }
72
+ /**
73
+ * Create a guard that validates a tuple.
74
+ *
75
+ * @example
76
+ * ```ts
77
+ * const isCoord = tuple(isNumber, isNumber);
78
+ * if (isCoord(data)) {
79
+ * const [x, y] = data; // [number, number]
80
+ * }
81
+ * ```
82
+ */
83
+ export function tuple(...guards) {
84
+ return (value) => {
85
+ if (!Array.isArray(value))
86
+ return false;
87
+ if (value.length !== guards.length)
88
+ return false;
89
+ return guards.every((guard, i) => guard(value[i]));
90
+ };
91
+ }
92
+ /**
93
+ * Create a guard that validates each element of an array.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const isStringArray = arrayOf(isString);
98
+ * if (isStringArray(data)) {
99
+ * data.forEach(s => s.toUpperCase()); // string[]
100
+ * }
101
+ * ```
102
+ */
103
+ export function arrayOf(guard) {
104
+ return (value) => {
105
+ if (!Array.isArray(value))
106
+ return false;
107
+ return value.every((item) => guard(item));
108
+ };
109
+ }
110
+ /**
111
+ * Create a guard that validates Map entries.
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * const isStringNumberMap = mapOf(isString, isNumber);
116
+ * ```
117
+ */
118
+ export function mapOf(keyGuard, valueGuard) {
119
+ return (value) => {
120
+ if (!(value instanceof Map))
121
+ return false;
122
+ for (const [k, v] of value) {
123
+ if (!keyGuard(k) || !valueGuard(v))
124
+ return false;
125
+ }
126
+ return true;
127
+ };
128
+ }
129
+ /**
130
+ * Create a guard that validates Record (object) entries.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * const isScoreBoard = recordOf(isString, isNumber);
135
+ * ```
136
+ */
137
+ export function recordOf(valueGuard) {
138
+ return (value) => {
139
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
140
+ return false;
141
+ const obj = value;
142
+ for (const key in obj) {
143
+ if (!Object.prototype.hasOwnProperty.call(obj, key))
144
+ continue;
145
+ if (!valueGuard(obj[key]))
146
+ return false;
147
+ }
148
+ return true;
149
+ };
150
+ }
151
+ /**
152
+ * Create a guard with a custom refinement predicate.
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * const isEvenNumber = refine(isNumber, (n) => n % 2 === 0);
157
+ * ```
158
+ */
159
+ export function refine(guard, predicate) {
160
+ return (value) => guard(value) && predicate(value);
161
+ }
162
+ /**
163
+ * Create an optional guard — allows undefined in addition to the guarded type.
164
+ *
165
+ * @example
166
+ * ```ts
167
+ * const isOptionalString = optional(isString);
168
+ * isOptionalString(undefined) // true
169
+ * isOptionalString("hello") // true
170
+ * isOptionalString(42) // false
171
+ * ```
172
+ */
173
+ export function optional(guard) {
174
+ return (value) => value === undefined || guard(value);
175
+ }
176
+ /**
177
+ * Create a nullable guard — allows null in addition to the guarded type.
178
+ */
179
+ export function nullable(guard) {
180
+ return (value) => value === null || guard(value);
181
+ }
182
+ //# sourceMappingURL=combinators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combinators.js","sourceRoot":"","sources":["../../../src/guards/combinators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ // ============================================================================
2
+ // Guarden — Guards Module Barrel Export
3
+ // ============================================================================
4
+ export { isString, isNumber, isNumberIncludingNaN, isFiniteNumber, isBoolean, isBigInt, isSymbol, isNull, isUndefined, isNullish, isNonNullish, isFunction, isPrimitive, } from './primitives.js';
5
+ export { isArray, isObject, isPlainObject, isMap, isSet, isWeakMap, isWeakSet, isDate, isValidDate, isRegExp, isError, isPromise, isArrayBuffer, isTypedArray, } from './structures.js';
6
+ export { isNonEmptyString, isEmail, isURL, isUUID, isISO8601, isJSONString, isHexColor, isPositiveNumber, isNegativeNumber, isInteger, isSafeInteger, isNonEmptyArray, isInRange, isOneOf, isMatch, isMinLength, isMaxLength, isInstanceOf, } from './advanced.js';
7
+ export { and, or, not, shape, tuple, arrayOf, mapOf, recordOf, refine, optional, nullable, } from './combinators.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/guards/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wCAAwC;AACxC,+EAA+E;AAE/E,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,GACZ,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,OAAO,EACP,QAAQ,EACR,aAAa,EACb,KAAK,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,WAAW,EACX,WAAW,EACX,YAAY,GACb,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,GAAG,EACH,EAAE,EACF,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,108 @@
1
+ // ============================================================================
2
+ // Guarden — Primitive Type Guards
3
+ // ============================================================================
4
+ /**
5
+ * Check if a value is a string.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const val: unknown = "hello";
10
+ * if (isString(val)) {
11
+ * val.toUpperCase(); // TypeScript knows val is string
12
+ * }
13
+ * ```
14
+ */
15
+ export function isString(value) {
16
+ return typeof value === 'string';
17
+ }
18
+ /**
19
+ * Check if a value is a number (excludes NaN by default).
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * isNumber(42) // true
24
+ * isNumber(NaN) // false
25
+ * isNumber("42") // false
26
+ * ```
27
+ */
28
+ export function isNumber(value) {
29
+ return typeof value === 'number' && !Number.isNaN(value);
30
+ }
31
+ /**
32
+ * Check if a value is a number, including NaN.
33
+ */
34
+ export function isNumberIncludingNaN(value) {
35
+ return typeof value === 'number';
36
+ }
37
+ /**
38
+ * Check if a value is a finite number (excludes NaN and Infinity).
39
+ */
40
+ export function isFiniteNumber(value) {
41
+ return typeof value === 'number' && Number.isFinite(value);
42
+ }
43
+ /**
44
+ * Check if a value is a boolean.
45
+ */
46
+ export function isBoolean(value) {
47
+ return typeof value === 'boolean';
48
+ }
49
+ /**
50
+ * Check if a value is a bigint.
51
+ */
52
+ export function isBigInt(value) {
53
+ return typeof value === 'bigint';
54
+ }
55
+ /**
56
+ * Check if a value is a symbol.
57
+ */
58
+ export function isSymbol(value) {
59
+ return typeof value === 'symbol';
60
+ }
61
+ /**
62
+ * Check if a value is null.
63
+ */
64
+ export function isNull(value) {
65
+ return value === null;
66
+ }
67
+ /**
68
+ * Check if a value is undefined.
69
+ */
70
+ export function isUndefined(value) {
71
+ return value === undefined;
72
+ }
73
+ /**
74
+ * Check if a value is null or undefined.
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * if (!isNullish(val)) {
79
+ * // val is narrowed to exclude null | undefined
80
+ * }
81
+ * ```
82
+ */
83
+ export function isNullish(value) {
84
+ return value === null || value === undefined;
85
+ }
86
+ /**
87
+ * Check if a value is NOT null and NOT undefined.
88
+ */
89
+ export function isNonNullish(value) {
90
+ return value !== null && value !== undefined;
91
+ }
92
+ /**
93
+ * Check if a value is a function.
94
+ */
95
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
96
+ export function isFunction(value) {
97
+ return typeof value === 'function';
98
+ }
99
+ /**
100
+ * Check if a value is a primitive type.
101
+ */
102
+ export function isPrimitive(value) {
103
+ if (value === null || value === undefined)
104
+ return true;
105
+ const t = typeof value;
106
+ return t === 'string' || t === 'number' || t === 'boolean' || t === 'bigint' || t === 'symbol';
107
+ }
108
+ //# sourceMappingURL=primitives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.js","sourceRoot":"","sources":["../../../src/guards/primitives.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,KAAK,SAAS,CAAC;AAC7B,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAI,KAAQ;IACtC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,sEAAsE;AACtE,MAAM,UAAU,UAAU,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CACzB,KAAc;IAEd,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,CAAC,GAAG,OAAO,KAAK,CAAC;IACvB,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,CAAC;AACjG,CAAC"}
@@ -0,0 +1,97 @@
1
+ // ============================================================================
2
+ // Guarden — Structure Type Guards
3
+ // ============================================================================
4
+ /**
5
+ * Check if a value is an array.
6
+ */
7
+ export function isArray(value) {
8
+ return Array.isArray(value);
9
+ }
10
+ /**
11
+ * Check if a value is an object (excludes null and arrays).
12
+ */
13
+ export function isObject(value) {
14
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
15
+ }
16
+ /**
17
+ * Check if a value is a plain object (created by `{}` or `Object.create(null)`).
18
+ * Excludes class instances, arrays, and other special objects.
19
+ */
20
+ export function isPlainObject(value) {
21
+ if (typeof value !== 'object' || value === null)
22
+ return false;
23
+ const proto = Object.getPrototypeOf(value);
24
+ return proto === Object.prototype || proto === null;
25
+ }
26
+ /**
27
+ * Check if a value is a Map.
28
+ */
29
+ export function isMap(value) {
30
+ return value instanceof Map;
31
+ }
32
+ /**
33
+ * Check if a value is a Set.
34
+ */
35
+ export function isSet(value) {
36
+ return value instanceof Set;
37
+ }
38
+ /**
39
+ * Check if a value is a WeakMap.
40
+ */
41
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
42
+ export function isWeakMap(value) {
43
+ return value instanceof WeakMap;
44
+ }
45
+ /**
46
+ * Check if a value is a WeakSet.
47
+ */
48
+ export function isWeakSet(value) {
49
+ return value instanceof WeakSet;
50
+ }
51
+ /**
52
+ * Check if a value is a Date instance.
53
+ */
54
+ export function isDate(value) {
55
+ return value instanceof Date;
56
+ }
57
+ /**
58
+ * Check if a value is a valid Date (not Invalid Date).
59
+ */
60
+ export function isValidDate(value) {
61
+ return value instanceof Date && !Number.isNaN(value.getTime());
62
+ }
63
+ /**
64
+ * Check if a value is a RegExp.
65
+ */
66
+ export function isRegExp(value) {
67
+ return value instanceof RegExp;
68
+ }
69
+ /**
70
+ * Check if a value is an Error instance.
71
+ */
72
+ export function isError(value) {
73
+ return value instanceof Error;
74
+ }
75
+ /**
76
+ * Check if a value is a Promise.
77
+ */
78
+ export function isPromise(value) {
79
+ return (value instanceof Promise ||
80
+ (typeof value === 'object' &&
81
+ value !== null &&
82
+ 'then' in value &&
83
+ typeof value['then'] === 'function'));
84
+ }
85
+ /**
86
+ * Check if a value is an ArrayBuffer.
87
+ */
88
+ export function isArrayBuffer(value) {
89
+ return value instanceof ArrayBuffer;
90
+ }
91
+ /**
92
+ * Check if a value is a typed array (Uint8Array, Float32Array, etc.).
93
+ */
94
+ export function isTypedArray(value) {
95
+ return ArrayBuffer.isView(value) && !(value instanceof DataView);
96
+ }
97
+ //# sourceMappingURL=structures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structures.js","sourceRoot":"","sources":["../../../src/guards/structures.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,kCAAkC;AAClC,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAY,CAAC;IACtD,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,GAAG,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,GAAG,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,sEAAsE;AACtE,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,OAAO,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,KAAK,YAAY,OAAO,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM,CAAC,KAAc;IACnC,OAAO,KAAK,YAAY,IAAI,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,KAAK,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,MAAM,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,OAAO,KAAK,YAAY,KAAK,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,OAAO,CACL,KAAK,YAAY,OAAO;QACxB,CAAC,OAAO,KAAK,KAAK,QAAQ;YACxB,KAAK,KAAK,IAAI;YACd,MAAM,IAAI,KAAK;YACf,OAAQ,KAAiC,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC,CACpE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,WAAW,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAc;IAWd,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,QAAQ,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,17 @@
1
+ // ============================================================================
2
+ // Guarden — Main Entry Point
3
+ // TypeScript-First Runtime Safety Toolkit
4
+ // ============================================================================
5
+ // Guards
6
+ export { isString, isNumber, isNumberIncludingNaN, isFiniteNumber, isBoolean, isBigInt, isSymbol, isNull, isUndefined, isNullish, isNonNullish, isFunction, isPrimitive, isArray, isObject, isPlainObject, isMap, isSet, isWeakMap, isWeakSet, isDate, isValidDate, isRegExp, isError, isPromise, isArrayBuffer, isTypedArray, isNonEmptyString, isEmail, isURL, isUUID, isISO8601, isJSONString, isHexColor, isPositiveNumber, isNegativeNumber, isInteger, isSafeInteger, isNonEmptyArray, isInRange, isOneOf, isMatch, isMinLength, isMaxLength, isInstanceOf, and, or, not, shape, tuple, arrayOf, mapOf, recordOf, refine, optional, nullable, } from './guards/index.js';
7
+ // Assert
8
+ export { assert, assertDefined, assertNonNull, assertType, assertTruthy, invariant, unreachable, } from './assert/index.js';
9
+ // Result & Option
10
+ export { Ok, Err, ResultUtils, Some, None, OptionUtils, ResultAsync, OptionAsync, } from './result/index.js';
11
+ // Transform
12
+ export { pipe, flow, toNumber, toString, toBoolean, toDate, toArray, toInteger, trim, trimStart, trimEnd, lowercase, uppercase, capitalize, titleCase, camelCase, kebabCase, snakeCase, stripHtml, escapeHtml, unescapeHtml, truncate, slugify, removeWhitespace, collapseWhitespace, padStart, padEnd, reverse, countOccurrences, } from './transform/index.js';
13
+ // Env
14
+ export { createEnv, envString, envNumber, envBoolean, envEnum, EnvField, } from './env/index.js';
15
+ // Errors
16
+ export { GuardenError, AssertionError, InvariantError, CoercionError, EnvValidationError, EnvConfigError, UnreachableError, } from './utils/errors.js';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6BAA6B;AAC7B,0CAA0C;AAC1C,+EAA+E;AAE/E,SAAS;AACT,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACV,WAAW,EACX,OAAO,EACP,QAAQ,EACR,aAAa,EACb,KAAK,EACL,KAAK,EACL,SAAS,EACT,SAAS,EACT,MAAM,EACN,WAAW,EACX,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,KAAK,EACL,MAAM,EACN,SAAS,EACT,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,SAAS,EACT,OAAO,EACP,OAAO,EACP,WAAW,EACX,WAAW,EACX,YAAY,EACZ,GAAG,EACH,EAAE,EACF,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAE3B,SAAS;AACT,OAAO,EACL,MAAM,EACN,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACZ,SAAS,EACT,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,kBAAkB;AAClB,OAAO,EACL,EAAE,EACF,GAAG,EACH,WAAW,EAEX,IAAI,EACJ,IAAI,EACJ,WAAW,EAEX,WAAW,EACX,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,YAAY;AACZ,OAAO,EACL,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,SAAS,EACT,IAAI,EACJ,SAAS,EACT,OAAO,EACP,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,QAAQ,EACR,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,EACR,MAAM,EACN,OAAO,EACP,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAE9B,MAAM;AACN,OAAO,EACL,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,GACT,MAAM,gBAAgB,CAAC;AAExB,SAAS;AACT,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,mBAAmB,CAAC"}