@pawells/typescript-common 1.0.1 → 1.1.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.
- package/README.md +177 -2
- package/build/array/assert.d.ts +115 -0
- package/build/array/assert.d.ts.map +1 -0
- package/build/array/assert.js +182 -0
- package/build/array/assert.js.map +1 -0
- package/build/array/index.d.ts +1 -0
- package/build/array/index.d.ts.map +1 -1
- package/build/array/index.js +1 -0
- package/build/array/index.js.map +1 -1
- package/build/asserts/errors.d.ts +45 -0
- package/build/asserts/errors.d.ts.map +1 -0
- package/build/asserts/errors.js +65 -0
- package/build/asserts/errors.js.map +1 -0
- package/build/asserts/generic.d.ts +432 -0
- package/build/asserts/generic.d.ts.map +1 -0
- package/build/asserts/generic.js +539 -0
- package/build/asserts/generic.js.map +1 -0
- package/build/asserts/index.d.ts +41 -0
- package/build/asserts/index.d.ts.map +1 -0
- package/build/asserts/index.js +41 -0
- package/build/asserts/index.js.map +1 -0
- package/build/asserts/internal-utils.d.ts +53 -0
- package/build/asserts/internal-utils.d.ts.map +1 -0
- package/build/asserts/internal-utils.js +108 -0
- package/build/asserts/internal-utils.js.map +1 -0
- package/build/asserts/object.d.ts +138 -0
- package/build/asserts/object.d.ts.map +1 -0
- package/build/asserts/object.js +204 -0
- package/build/asserts/object.js.map +1 -0
- package/build/asserts/string.d.ts +100 -0
- package/build/asserts/string.d.ts.map +1 -0
- package/build/asserts/string.js +185 -0
- package/build/asserts/string.js.map +1 -0
- package/build/asserts/types.d.ts +180 -0
- package/build/asserts/types.d.ts.map +1 -0
- package/build/asserts/types.js +2 -0
- package/build/asserts/types.js.map +1 -0
- package/build/asserts/utils.d.ts +92 -0
- package/build/asserts/utils.d.ts.map +1 -0
- package/build/asserts/utils.js +103 -0
- package/build/asserts/utils.js.map +1 -0
- package/build/boolean/assert.d.ts +66 -0
- package/build/boolean/assert.d.ts.map +1 -0
- package/build/boolean/assert.js +76 -0
- package/build/boolean/assert.js.map +1 -0
- package/build/boolean/index.d.ts +9 -0
- package/build/boolean/index.d.ts.map +1 -0
- package/build/boolean/index.js +9 -0
- package/build/boolean/index.js.map +1 -0
- package/build/index.d.ts +4 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +12 -0
- package/build/index.js.map +1 -1
- package/build/number/assert.d.ts +154 -0
- package/build/number/assert.d.ts.map +1 -0
- package/build/number/assert.js +153 -0
- package/build/number/assert.js.map +1 -0
- package/build/number/index.d.ts +9 -0
- package/build/number/index.d.ts.map +1 -0
- package/build/number/index.js +9 -0
- package/build/number/index.js.map +1 -0
- package/build/object/assert.d.ts +138 -0
- package/build/object/assert.d.ts.map +1 -0
- package/build/object/assert.js +204 -0
- package/build/object/assert.js.map +1 -0
- package/build/object/index.d.ts +1 -0
- package/build/object/index.d.ts.map +1 -1
- package/build/object/index.js +1 -0
- package/build/object/index.js.map +1 -1
- package/build/string/assert.d.ts +100 -0
- package/build/string/assert.d.ts.map +1 -0
- package/build/string/assert.js +185 -0
- package/build/string/assert.js.map +1 -0
- package/build/string/index.d.ts +1 -0
- package/build/string/index.d.ts.map +1 -1
- package/build/string/index.js +1 -0
- package/build/string/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import { SetExceptionClass, SetExceptionMessage, ThrowException } from '../asserts/utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* Cache for compiled regex patterns to improve performance when the same patterns are used repeatedly.
|
|
4
|
+
* Maps regex source + flags to the compiled RegExp object for efficient reuse.
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
const REGEX_PATTERN_CACHE = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Maximum number of cached regex patterns to prevent unbounded memory growth.
|
|
11
|
+
* When this limit is reached, the cache will be cleared to maintain memory efficiency.
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
const MAX_CACHE_SIZE = 100;
|
|
16
|
+
/**
|
|
17
|
+
* Number of oldest cache entries to evict in one batch when the cache is full.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
const CACHE_EVICTION_BATCH_SIZE = 20;
|
|
22
|
+
/**
|
|
23
|
+
* Gets a cached regex pattern or creates and caches a new one.
|
|
24
|
+
* This optimization improves performance when the same regex patterns are used repeatedly.
|
|
25
|
+
*
|
|
26
|
+
* @param source - The regex pattern source string
|
|
27
|
+
* @param flags - The regex flags string
|
|
28
|
+
* @returns The compiled RegExp object
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
function getCachedRegex(source, flags = '') {
|
|
32
|
+
const cacheKey = `${source}:::${flags}`;
|
|
33
|
+
let regex = REGEX_PATTERN_CACHE.get(cacheKey);
|
|
34
|
+
if (!regex) {
|
|
35
|
+
// Use LRU eviction: delete oldest entries when cache reaches limit
|
|
36
|
+
if (REGEX_PATTERN_CACHE.size >= MAX_CACHE_SIZE) {
|
|
37
|
+
const keysToDelete = Array.from(REGEX_PATTERN_CACHE.keys()).slice(0, CACHE_EVICTION_BATCH_SIZE);
|
|
38
|
+
keysToDelete.forEach(key => REGEX_PATTERN_CACHE.delete(key));
|
|
39
|
+
}
|
|
40
|
+
regex = new RegExp(source, flags);
|
|
41
|
+
REGEX_PATTERN_CACHE.set(cacheKey, regex);
|
|
42
|
+
}
|
|
43
|
+
return regex;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Error thrown when a value is not a valid string or fails a string assertion.
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* throw new StringError('Value is not a valid string');
|
|
50
|
+
*/
|
|
51
|
+
export class StringError extends Error {
|
|
52
|
+
constructor(message) {
|
|
53
|
+
super(message ?? 'String Assertion Failed');
|
|
54
|
+
this.name = 'StringError';
|
|
55
|
+
Object.setPrototypeOf(this, StringError.prototype);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Asserts that a value is a string primitive type.
|
|
60
|
+
*
|
|
61
|
+
* This method validates that the provided value is of type 'string'. It accepts
|
|
62
|
+
* any string including empty strings. This is a strict type check that will
|
|
63
|
+
* reject string objects created with new String().
|
|
64
|
+
*
|
|
65
|
+
* @template TError - Custom error type to throw on failure
|
|
66
|
+
* @param value - The value to validate as a string
|
|
67
|
+
* @param exception - Optional exception configuration for custom error handling
|
|
68
|
+
* @throws {StringError} When value is not a string primitive
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* AssertString("hello"); // ✓ Valid
|
|
73
|
+
* AssertString(""); // ✓ Valid (empty string is still a string)
|
|
74
|
+
* AssertString("123"); // ✓ Valid (numeric string)
|
|
75
|
+
* AssertString(123); // ✗ Throws StringError (number)
|
|
76
|
+
* AssertString(null); // ✗ Throws StringError
|
|
77
|
+
* AssertString(new String("hello")); // ✗ Throws StringError (String object)
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
export function AssertString(value, exception = {}) {
|
|
81
|
+
SetExceptionClass(exception, StringError);
|
|
82
|
+
if (typeof value !== 'string') {
|
|
83
|
+
SetExceptionMessage(exception, `Expected string but received ${typeof value}: ${String(value)}`);
|
|
84
|
+
ThrowException(exception);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Asserts that a value is a non-empty string (after trimming whitespace).
|
|
89
|
+
*
|
|
90
|
+
* This method validates that the provided value is a string and contains at least
|
|
91
|
+
* one non-whitespace character after trimming. This is useful for validating user
|
|
92
|
+
* inputs, form fields, and API parameters where empty or whitespace-only strings
|
|
93
|
+
* are not acceptable.
|
|
94
|
+
*
|
|
95
|
+
* @template TError - Custom error type to throw on failure
|
|
96
|
+
* @param value - The value to validate as a non-empty string
|
|
97
|
+
* @param exception - Optional exception configuration for custom error handling
|
|
98
|
+
* @throws {StringError} When value is not a string or is empty/whitespace-only
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* AssertStringNotEmpty("hello"); // ✓ Valid
|
|
103
|
+
* AssertStringNotEmpty(" a "); // ✓ Valid (has non-whitespace content)
|
|
104
|
+
* AssertStringNotEmpty("x"); // ✓ Valid (single character)
|
|
105
|
+
* AssertStringNotEmpty(""); // ✗ Throws StringError (empty)
|
|
106
|
+
* AssertStringNotEmpty(" "); // ✗ Throws StringError (whitespace only)
|
|
107
|
+
* AssertStringNotEmpty("\t\n "); // ✗ Throws StringError (whitespace only)
|
|
108
|
+
* AssertStringNotEmpty(123); // ✗ Throws StringError (not a string)
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export function AssertStringNotEmpty(value, exception = {}) {
|
|
112
|
+
SetExceptionClass(exception, StringError);
|
|
113
|
+
if (typeof value !== 'string') {
|
|
114
|
+
SetExceptionMessage(exception, `Expected non-empty string but received ${typeof value}: ${String(value)}`);
|
|
115
|
+
ThrowException(exception);
|
|
116
|
+
}
|
|
117
|
+
const str = value;
|
|
118
|
+
if (str === '') {
|
|
119
|
+
SetExceptionMessage(exception, 'Expected non-empty string but received empty string');
|
|
120
|
+
ThrowException(exception);
|
|
121
|
+
}
|
|
122
|
+
if (str.trim() === '') {
|
|
123
|
+
SetExceptionMessage(exception, 'Expected non-empty string but received whitespace-only string');
|
|
124
|
+
ThrowException(exception);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Asserts that a string matches a regular expression pattern.
|
|
129
|
+
*
|
|
130
|
+
* This method validates that the provided string matches the specified regular
|
|
131
|
+
* expression pattern. The string must be a valid string type (use AssertString first
|
|
132
|
+
* if needed). Useful for validating formats like emails, phone numbers, IDs, and
|
|
133
|
+
* other structured text data.
|
|
134
|
+
*
|
|
135
|
+
* For performance optimization, regex patterns are cached when possible to avoid
|
|
136
|
+
* recompilation of the same patterns. This provides significant performance benefits
|
|
137
|
+
* when validating many values against the same pattern.
|
|
138
|
+
*
|
|
139
|
+
* @template TError - Custom error type to throw on failure
|
|
140
|
+
* @param value - The string to test against the pattern
|
|
141
|
+
* @param regex - The regular expression pattern to match against
|
|
142
|
+
* @param exception - Optional exception configuration for custom error handling
|
|
143
|
+
* @throws {StringError} When string does not match the pattern
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* // Email validation
|
|
148
|
+
* AssertStringMatches("hello@example.com", /^[^\s@]+@[^\s@]+\.[^\s@]+$/); // ✓ Valid
|
|
149
|
+
*
|
|
150
|
+
* // Digits only validation
|
|
151
|
+
* AssertStringMatches("123", /^\d+$/); // ✓ Valid
|
|
152
|
+
* AssertStringMatches("12a", /^\d+$/); // ✗ Throws StringError
|
|
153
|
+
*
|
|
154
|
+
* // Phone number format
|
|
155
|
+
* AssertStringMatches("(555) 123-4567", /^\(\d{3}\) \d{3}-\d{4}$/); // ✓ Valid
|
|
156
|
+
*
|
|
157
|
+
* // Alphanumeric with length constraint
|
|
158
|
+
* AssertStringMatches("abc123", /^[a-zA-Z0-9]{3,10}$/); // ✓ Valid
|
|
159
|
+
* AssertStringMatches("ab", /^[a-zA-Z0-9]{3,10}$/); // ✗ Throws (too short)
|
|
160
|
+
*
|
|
161
|
+
* // Performance benefit with repeated pattern usage
|
|
162
|
+
* const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
163
|
+
* AssertStringMatches("user1@example.com", emailPattern); // Cached for future use
|
|
164
|
+
* AssertStringMatches("user2@example.com", emailPattern); // Uses cached pattern
|
|
165
|
+
* ```
|
|
166
|
+
*/
|
|
167
|
+
export function AssertStringMatches(value, regex, exception = {}) {
|
|
168
|
+
SetExceptionClass(exception, StringError);
|
|
169
|
+
AssertString(value, exception); // Ensure value is a string before matching
|
|
170
|
+
// Use cached regex for better performance when possible
|
|
171
|
+
// If the regex has a source and flags, we can cache it for reuse
|
|
172
|
+
let testRegex;
|
|
173
|
+
if (regex.source && regex.flags !== undefined) {
|
|
174
|
+
testRegex = getCachedRegex(regex.source, regex.flags);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
// Fallback to original regex if caching is not possible
|
|
178
|
+
testRegex = regex;
|
|
179
|
+
}
|
|
180
|
+
if (!testRegex.test(value)) {
|
|
181
|
+
SetExceptionMessage(exception, `String does not match the required pattern: ${regex.toString()}`);
|
|
182
|
+
ThrowException(exception);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=assert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.js","sourceRoot":"","sources":["../../src/string/assert.ts"],"names":[],"mappings":"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"}
|
package/build/string/index.d.ts
CHANGED
|
@@ -12,4 +12,5 @@ export * from './validation.js';
|
|
|
12
12
|
export * from './formatting.js';
|
|
13
13
|
export * from './transformation.js';
|
|
14
14
|
export type { TStringValidator, TStringFormatter, TStringTransformer, TCaseConverter, TStringPredicate, TFormatValue, TFormatParams, TFormatArgs } from './types.js';
|
|
15
|
+
export * from './assert.js';
|
|
15
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAEpC,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACrK,cAAc,aAAa,CAAC"}
|
package/build/string/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/string/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,aAAa,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pawells/typescript-common",
|
|
3
3
|
"displayName": "TypeScript Common Utilities",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"description": "Shared TypeScript utility library — array, object, string, time, and enum helpers. ESM-only, no runtime dependencies.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./build/index.js",
|