ts-data-forge 2.1.2 → 2.1.3

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.
@@ -71,7 +71,7 @@ var Json;
71
71
  }
72
72
  catch (error) {
73
73
  const errStr = unknownToString(error);
74
- return Result.err(Result.isOk(errStr) ? errStr.value : 'Failed to parse JSON');
74
+ return Result.err(errStr);
75
75
  }
76
76
  };
77
77
  /**
@@ -120,7 +120,7 @@ var Json;
120
120
  }
121
121
  catch (error) {
122
122
  const errStr = unknownToString(error);
123
- return Result.err(Result.isOk(errStr) ? errStr.value : 'Failed to stringify JSON');
123
+ return Result.err(errStr);
124
124
  }
125
125
  };
126
126
  /**
@@ -165,7 +165,7 @@ var Json;
165
165
  }
166
166
  catch (error) {
167
167
  const errStr = unknownToString(error);
168
- return Result.err(Result.isOk(errStr) ? errStr.value : 'Failed to stringify JSON');
168
+ return Result.err(errStr);
169
169
  }
170
170
  };
171
171
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"json.mjs","sources":["../../src/json/json.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json.mjs","sources":["../../src/json/json.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { Result } from '../functional/index.mjs';
2
1
  /**
3
2
  * Converts an unknown value to its string representation in a type-safe manner.
4
3
  *
@@ -18,22 +17,22 @@ import { Result } from '../functional/index.mjs';
18
17
  * @param value - The unknown value to convert to string
19
18
  * @param options - Optional configuration for the conversion
20
19
  * @param options.prettyPrintObject - If true, objects are formatted with 2-space indentation
21
- * @returns A Result containing either the string representation or an Error for failures
20
+ * @returns The string representation of the value. For circular references or non-serializable objects, returns an error message string
22
21
  *
23
22
  * @example Basic type conversions
24
23
  * ```typescript
25
24
  * // Primitive types
26
- * unknownToString('hello'); // Ok('hello')
27
- * unknownToString(123); // Ok('123')
28
- * unknownToString(true); // Ok('true')
29
- * unknownToString(null); // Ok('null')
30
- * unknownToString(undefined); // Ok('undefined')
31
- * unknownToString(Symbol('test')); // Ok('Symbol(test)')
32
- * unknownToString(123n); // Ok('123')
25
+ * unknownToString('hello'); // 'hello'
26
+ * unknownToString(123); // '123'
27
+ * unknownToString(true); // 'true'
28
+ * unknownToString(null); // 'null'
29
+ * unknownToString(undefined); // 'undefined'
30
+ * unknownToString(Symbol('test')); // 'Symbol(test)'
31
+ * unknownToString(123n); // '123'
33
32
  *
34
33
  * // Function conversion
35
34
  * const fn = () => 'test';
36
- * unknownToString(fn); // Ok('() => 'test'')
35
+ * unknownToString(fn); // "() => 'test'"
37
36
  * ```
38
37
  *
39
38
  * @example Object stringification
@@ -41,24 +40,20 @@ import { Result } from '../functional/index.mjs';
41
40
  * // Simple object
42
41
  * const obj = { a: 1, b: 'hello', c: [1, 2, 3] };
43
42
  * const result = unknownToString(obj);
44
- * if (Result.isOk(result)) {
45
- * console.log(result.value); // '{"a":1,"b":"hello","c":[1,2,3]}'
46
- * }
43
+ * console.log(result); // '{"a":1,"b":"hello","c":[1,2,3]}'
47
44
  *
48
45
  * // Pretty printing
49
46
  * const prettyResult = unknownToString(obj, { prettyPrintObject: true });
50
- * if (Result.isOk(prettyResult)) {
51
- * console.log(prettyResult.value);
52
- * // {
53
- * // "a": 1,
54
- * // "b": "hello",
55
- * // "c": [
56
- * // 1,
57
- * // 2,
58
- * // 3
59
- * // ]
60
- * // }
61
- * }
47
+ * console.log(prettyResult);
48
+ * // {
49
+ * // "a": 1,
50
+ * // "b": "hello",
51
+ * // "c": [
52
+ * // 1,
53
+ * // 2,
54
+ * // 3
55
+ * // ]
56
+ * // }
62
57
  * ```
63
58
  *
64
59
  * @example Error handling for circular references
@@ -68,19 +63,7 @@ import { Result } from '../functional/index.mjs';
68
63
  * circular.self = circular;
69
64
  *
70
65
  * const result = unknownToString(circular);
71
- * if (Result.isErr(result)) {
72
- * console.log(result.value.message);
73
- * // "Converting circular structure to JSON"
74
- * }
75
- *
76
- * // Handle with custom serialization
77
- * const safeStringify = (value: unknown): string => {
78
- * const result = unknownToString(value);
79
- * return Result.isOk(result)
80
- * ? result.value
81
- * : `[Error: ${result.value.message}]`;
82
- * };
83
- * ```
66
+ * console.log(result); // "Converting circular structure to JSON"
84
67
  *
85
68
  * @example Logging and debugging utilities
86
69
  * ```typescript
@@ -90,13 +73,9 @@ import { Result } from '../functional/index.mjs';
90
73
  * const timestamp = new Date().toISOString();
91
74
  * const dataStr = data !== undefined
92
75
  * ? unknownToString(data, { prettyPrintObject: true })
93
- * : Result.ok('');
76
+ * : '';
94
77
  *
95
- * if (Result.isOk(dataStr)) {
96
- * console.log(`[${timestamp}] ${message}`, dataStr.value);
97
- * } else {
98
- * console.log(`[${timestamp}] ${message} [Unstringifiable data]`);
99
- * }
78
+ * console.log(`[${timestamp}] ${message}`, dataStr);
100
79
  * }
101
80
  * }
102
81
  *
@@ -108,19 +87,11 @@ import { Result } from '../functional/index.mjs';
108
87
  * ```typescript
109
88
  * // Safe error response formatting
110
89
  * function formatErrorResponse(error: unknown): string {
111
- * const result = unknownToString(error, { prettyPrintObject: true });
90
+ * const errorStr = unknownToString(error, { prettyPrintObject: true });
112
91
  *
113
- * if (Result.isOk(result)) {
114
- * return JSON.stringify({
115
- * success: false,
116
- * error: result.value
117
- * });
118
- * }
119
- *
120
- * // Fallback for unstringifiable errors
121
92
  * return JSON.stringify({
122
93
  * success: false,
123
- * error: 'An unknown error occurred'
94
+ * error: errorStr
124
95
  * });
125
96
  * }
126
97
  *
@@ -136,45 +107,41 @@ import { Result } from '../functional/index.mjs';
136
107
  * ```typescript
137
108
  * // Date objects
138
109
  * unknownToString(new Date('2023-01-01'));
139
- * // Ok('"2023-01-01T00:00:00.000Z"') - JSON stringified
110
+ * // '"2023-01-01T00:00:00.000Z"' - JSON stringified
140
111
  *
141
112
  * // Regular expressions
142
113
  * unknownToString(/test/gi);
143
- * // Ok('{}') - RegExp has no enumerable properties
114
+ * // '{}' - RegExp has no enumerable properties
144
115
  *
145
116
  * // Arrays
146
117
  * unknownToString([1, 'two', { three: 3 }]);
147
- * // Ok('[1,"two",{"three":3}]')
118
+ * // '[1,"two",{"three":3}]'
148
119
  *
149
120
  * // Map and Set (converted to empty objects by JSON.stringify)
150
- * unknownToString(new Map([['a', 1]])); // Ok('{}')
151
- * unknownToString(new Set([1, 2, 3])); // Ok('{}')
121
+ * unknownToString(new Map([['a', 1]])); // '{}'
122
+ * unknownToString(new Set([1, 2, 3])); // '{}'
152
123
  * ```
153
124
  *
154
- * @example Integration with Result type
125
+ * @example Using with validation
155
126
  * ```typescript
156
- * import { Result, pipe } from '../functional';
157
- *
158
- * // Chain with other Result operations
159
- * function processUserInput(input: unknown): Result<string, Error> {
160
- * return pipe(input)
161
- * .map(val => unknownToString(val))
162
- * .map(Result.flatten) // Flatten Result<Result<string, Error>, never>
163
- * .map(str => Result.map(str, s => s.trim()))
164
- * .map(Result.flatten)
165
- * .map(str => Result.flatMap(str, s =>
166
- * s.length > 0
167
- * ? Result.ok(s)
168
- * : Result.err(new Error('Empty string'))
169
- * ))
170
- * .value;
127
+ * // Simple validation helper
128
+ * function validateAndStringify(input: unknown): string {
129
+ * const str = unknownToString(input);
130
+ * const trimmed = str.trim();
131
+ *
132
+ * if (trimmed.length === 0) {
133
+ * throw new Error('Empty string');
134
+ * }
135
+ *
136
+ * return trimmed;
171
137
  * }
172
138
  * ```
173
139
  *
174
- * @see Result - For error handling pattern used by this function
140
+ * **Error Handling:**
141
+ * Circular references and non-serializable objects return descriptive error messages instead of throwing
175
142
  * @see JSON.stringify - Underlying serialization for objects
176
143
  */
177
144
  export declare const unknownToString: (value: unknown, options?: Partial<Readonly<{
178
145
  prettyPrintObject: boolean;
179
- }>>) => Result<string, Error>;
146
+ }>>) => string;
180
147
  //# sourceMappingURL=unknown-to-string.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unknown-to-string.d.mts","sourceRoot":"","sources":["../../src/others/unknown-to-string.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAGjD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8KG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,UAAU,OAAO,CAAC,QAAQ,CAAC;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,KAC1D,MAAM,CAAC,MAAM,EAAE,KAAK,CAiCtB,CAAC"}
1
+ {"version":3,"file":"unknown-to-string.d.mts","sourceRoot":"","sources":["../../src/others/unknown-to-string.mts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8IG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,OAAO,EACd,UAAU,OAAO,CAAC,QAAQ,CAAC;IAAE,iBAAiB,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,KAC1D,MA+BF,CAAC"}
@@ -1,6 +1,4 @@
1
1
  import { isNonNullish } from '../guard/is-type.mjs';
2
- import '../functional/optional.mjs';
3
- import { Result } from '../functional/result.mjs';
4
2
 
5
3
  /**
6
4
  * Converts an unknown value to its string representation in a type-safe manner.
@@ -21,22 +19,22 @@ import { Result } from '../functional/result.mjs';
21
19
  * @param value - The unknown value to convert to string
22
20
  * @param options - Optional configuration for the conversion
23
21
  * @param options.prettyPrintObject - If true, objects are formatted with 2-space indentation
24
- * @returns A Result containing either the string representation or an Error for failures
22
+ * @returns The string representation of the value. For circular references or non-serializable objects, returns an error message string
25
23
  *
26
24
  * @example Basic type conversions
27
25
  * ```typescript
28
26
  * // Primitive types
29
- * unknownToString('hello'); // Ok('hello')
30
- * unknownToString(123); // Ok('123')
31
- * unknownToString(true); // Ok('true')
32
- * unknownToString(null); // Ok('null')
33
- * unknownToString(undefined); // Ok('undefined')
34
- * unknownToString(Symbol('test')); // Ok('Symbol(test)')
35
- * unknownToString(123n); // Ok('123')
27
+ * unknownToString('hello'); // 'hello'
28
+ * unknownToString(123); // '123'
29
+ * unknownToString(true); // 'true'
30
+ * unknownToString(null); // 'null'
31
+ * unknownToString(undefined); // 'undefined'
32
+ * unknownToString(Symbol('test')); // 'Symbol(test)'
33
+ * unknownToString(123n); // '123'
36
34
  *
37
35
  * // Function conversion
38
36
  * const fn = () => 'test';
39
- * unknownToString(fn); // Ok('() => 'test'')
37
+ * unknownToString(fn); // "() => 'test'"
40
38
  * ```
41
39
  *
42
40
  * @example Object stringification
@@ -44,24 +42,20 @@ import { Result } from '../functional/result.mjs';
44
42
  * // Simple object
45
43
  * const obj = { a: 1, b: 'hello', c: [1, 2, 3] };
46
44
  * const result = unknownToString(obj);
47
- * if (Result.isOk(result)) {
48
- * console.log(result.value); // '{"a":1,"b":"hello","c":[1,2,3]}'
49
- * }
45
+ * console.log(result); // '{"a":1,"b":"hello","c":[1,2,3]}'
50
46
  *
51
47
  * // Pretty printing
52
48
  * const prettyResult = unknownToString(obj, { prettyPrintObject: true });
53
- * if (Result.isOk(prettyResult)) {
54
- * console.log(prettyResult.value);
55
- * // {
56
- * // "a": 1,
57
- * // "b": "hello",
58
- * // "c": [
59
- * // 1,
60
- * // 2,
61
- * // 3
62
- * // ]
63
- * // }
64
- * }
49
+ * console.log(prettyResult);
50
+ * // {
51
+ * // "a": 1,
52
+ * // "b": "hello",
53
+ * // "c": [
54
+ * // 1,
55
+ * // 2,
56
+ * // 3
57
+ * // ]
58
+ * // }
65
59
  * ```
66
60
  *
67
61
  * @example Error handling for circular references
@@ -71,19 +65,7 @@ import { Result } from '../functional/result.mjs';
71
65
  * circular.self = circular;
72
66
  *
73
67
  * const result = unknownToString(circular);
74
- * if (Result.isErr(result)) {
75
- * console.log(result.value.message);
76
- * // "Converting circular structure to JSON"
77
- * }
78
- *
79
- * // Handle with custom serialization
80
- * const safeStringify = (value: unknown): string => {
81
- * const result = unknownToString(value);
82
- * return Result.isOk(result)
83
- * ? result.value
84
- * : `[Error: ${result.value.message}]`;
85
- * };
86
- * ```
68
+ * console.log(result); // "Converting circular structure to JSON"
87
69
  *
88
70
  * @example Logging and debugging utilities
89
71
  * ```typescript
@@ -93,13 +75,9 @@ import { Result } from '../functional/result.mjs';
93
75
  * const timestamp = new Date().toISOString();
94
76
  * const dataStr = data !== undefined
95
77
  * ? unknownToString(data, { prettyPrintObject: true })
96
- * : Result.ok('');
78
+ * : '';
97
79
  *
98
- * if (Result.isOk(dataStr)) {
99
- * console.log(`[${timestamp}] ${message}`, dataStr.value);
100
- * } else {
101
- * console.log(`[${timestamp}] ${message} [Unstringifiable data]`);
102
- * }
80
+ * console.log(`[${timestamp}] ${message}`, dataStr);
103
81
  * }
104
82
  * }
105
83
  *
@@ -111,19 +89,11 @@ import { Result } from '../functional/result.mjs';
111
89
  * ```typescript
112
90
  * // Safe error response formatting
113
91
  * function formatErrorResponse(error: unknown): string {
114
- * const result = unknownToString(error, { prettyPrintObject: true });
92
+ * const errorStr = unknownToString(error, { prettyPrintObject: true });
115
93
  *
116
- * if (Result.isOk(result)) {
117
- * return JSON.stringify({
118
- * success: false,
119
- * error: result.value
120
- * });
121
- * }
122
- *
123
- * // Fallback for unstringifiable errors
124
94
  * return JSON.stringify({
125
95
  * success: false,
126
- * error: 'An unknown error occurred'
96
+ * error: errorStr
127
97
  * });
128
98
  * }
129
99
  *
@@ -139,71 +109,67 @@ import { Result } from '../functional/result.mjs';
139
109
  * ```typescript
140
110
  * // Date objects
141
111
  * unknownToString(new Date('2023-01-01'));
142
- * // Ok('"2023-01-01T00:00:00.000Z"') - JSON stringified
112
+ * // '"2023-01-01T00:00:00.000Z"' - JSON stringified
143
113
  *
144
114
  * // Regular expressions
145
115
  * unknownToString(/test/gi);
146
- * // Ok('{}') - RegExp has no enumerable properties
116
+ * // '{}' - RegExp has no enumerable properties
147
117
  *
148
118
  * // Arrays
149
119
  * unknownToString([1, 'two', { three: 3 }]);
150
- * // Ok('[1,"two",{"three":3}]')
120
+ * // '[1,"two",{"three":3}]'
151
121
  *
152
122
  * // Map and Set (converted to empty objects by JSON.stringify)
153
- * unknownToString(new Map([['a', 1]])); // Ok('{}')
154
- * unknownToString(new Set([1, 2, 3])); // Ok('{}')
123
+ * unknownToString(new Map([['a', 1]])); // '{}'
124
+ * unknownToString(new Set([1, 2, 3])); // '{}'
155
125
  * ```
156
126
  *
157
- * @example Integration with Result type
127
+ * @example Using with validation
158
128
  * ```typescript
159
- * import { Result, pipe } from '../functional';
160
- *
161
- * // Chain with other Result operations
162
- * function processUserInput(input: unknown): Result<string, Error> {
163
- * return pipe(input)
164
- * .map(val => unknownToString(val))
165
- * .map(Result.flatten) // Flatten Result<Result<string, Error>, never>
166
- * .map(str => Result.map(str, s => s.trim()))
167
- * .map(Result.flatten)
168
- * .map(str => Result.flatMap(str, s =>
169
- * s.length > 0
170
- * ? Result.ok(s)
171
- * : Result.err(new Error('Empty string'))
172
- * ))
173
- * .value;
129
+ * // Simple validation helper
130
+ * function validateAndStringify(input: unknown): string {
131
+ * const str = unknownToString(input);
132
+ * const trimmed = str.trim();
133
+ *
134
+ * if (trimmed.length === 0) {
135
+ * throw new Error('Empty string');
136
+ * }
137
+ *
138
+ * return trimmed;
174
139
  * }
175
140
  * ```
176
141
  *
177
- * @see Result - For error handling pattern used by this function
142
+ * **Error Handling:**
143
+ * Circular references and non-serializable objects return descriptive error messages instead of throwing
178
144
  * @see JSON.stringify - Underlying serialization for objects
179
145
  */
180
146
  const unknownToString = (value, options) => {
181
147
  switch (typeof value) {
182
148
  case 'string':
183
- return Result.ok(value);
149
+ return value;
184
150
  case 'number':
185
151
  case 'bigint':
186
152
  case 'boolean':
187
153
  case 'symbol':
188
154
  case 'function':
189
- return Result.ok(value.toString());
155
+ return value.toString();
190
156
  case 'object':
191
157
  if (!isNonNullish(value)) {
192
- return Result.ok('null');
158
+ return 'null';
193
159
  }
194
160
  try {
195
161
  const stringified = options?.prettyPrintObject === true
196
162
  ? JSON.stringify(value, undefined, 2)
197
163
  : JSON.stringify(value);
198
- return Result.ok(stringified);
164
+ return stringified;
199
165
  }
200
166
  catch (error) {
201
- return Result.err(error instanceof Error
202
- ? error
203
- : new Error('Failed to stringify object'));
167
+ return error instanceof Error
168
+ ? error.message
169
+ : '[Circular or Non-serializable]';
204
170
  }
205
171
  case 'undefined':
206
- return Result.ok('undefined');
172
+ return 'undefined';
207
173
  }
208
174
  };
209
175
 
@@ -1 +1 @@
1
- {"version":3,"file":"unknown-to-string.mjs","sources":["../../src/others/unknown-to-string.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8KG;MACU,eAAe,GAAG,CAC7B,KAAc,EACd,OAA2D,KAClC;IACzB,QAAQ,OAAO,KAAK;AAClB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC;AAEzB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,UAAU;YACb,OAAO,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;AAEpC,QAAA,KAAK,QAAQ;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,OAAO,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;YAC1B;AACA,YAAA,IAAI;AACF,gBAAA,MAAM,WAAW,GACf,OAAO,EAAE,iBAAiB,KAAK;sBAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;AACpC,sBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3B,gBAAA,OAAO,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;YAC/B;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,MAAM,CAAC,GAAG,CACf,KAAK,YAAY;AACf,sBAAE;AACF,sBAAE,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAC5C;YACH;AAEF,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;;AAEnC;;;;"}
1
+ {"version":3,"file":"unknown-to-string.mjs","sources":["../../src/others/unknown-to-string.mts"],"sourcesContent":[null],"names":[],"mappings":";;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IG;MACU,eAAe,GAAG,CAC7B,KAAc,EACd,OAA2D,KACjD;IACV,QAAQ,OAAO,KAAK;AAClB,QAAA,KAAK,QAAQ;AACX,YAAA,OAAO,KAAK;AAEd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,UAAU;AACb,YAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AAEzB,QAAA,KAAK,QAAQ;AACX,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,OAAO,MAAM;YACf;AACA,YAAA,IAAI;AACF,gBAAA,MAAM,WAAW,GACf,OAAO,EAAE,iBAAiB,KAAK;sBAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;AACpC,sBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC3B,gBAAA,OAAO,WAAW;YACpB;YAAE,OAAO,KAAK,EAAE;gBACd,OAAO,KAAK,YAAY;sBACpB,KAAK,CAAC;sBACN,gCAAgC;YACtC;AAEF,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,WAAW;;AAExB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ts-data-forge",
3
- "version": "2.1.2",
3
+ "version": "2.1.3",
4
4
  "private": false,
5
5
  "keywords": [
6
6
  "typescript",
@@ -3460,11 +3460,7 @@ export namespace Arr {
3460
3460
  return Result.ok(result);
3461
3461
  } catch (error) {
3462
3462
  return Result.err(
3463
- error instanceof Error
3464
- ? error
3465
- : pipe(unknownToString(error))
3466
- .map(Result.unwrapOkOr('Failed to join array'))
3467
- .map((e) => new Error(e)).value,
3463
+ error instanceof Error ? error : new Error(unknownToString(error)),
3468
3464
  );
3469
3465
  }
3470
3466
  };
@@ -1,4 +1,4 @@
1
- import { Optional, Result } from '../functional/index.mjs';
1
+ import { Optional } from '../functional/index.mjs';
2
2
  import { asUint32 } from '../number/index.mjs';
3
3
  import { tp, unknownToString } from '../others/index.mjs';
4
4
 
@@ -487,9 +487,7 @@ class IMapClass<K extends MapSetKeyType, V>
487
487
  if (!this.has(key)) {
488
488
  if (this.#showNotFoundMessage) {
489
489
  const keyStr = unknownToString(key);
490
- console.warn(
491
- `IMap.delete: key not found: ${Result.isOk(keyStr) ? keyStr.value : '<error converting key to string>'}`,
492
- );
490
+ console.warn(`IMap.delete: key not found: ${keyStr}`);
493
491
  }
494
492
  return this;
495
493
  }
@@ -518,9 +516,7 @@ class IMapClass<K extends MapSetKeyType, V>
518
516
  if (Optional.isNone(curr)) {
519
517
  if (this.#showNotFoundMessage) {
520
518
  const keyStr = unknownToString(key);
521
- console.warn(
522
- `IMap.update: key not found: ${Result.isOk(keyStr) ? keyStr.value : '<error converting key to string>'}`,
523
- );
519
+ console.warn(`IMap.update: key not found: ${keyStr}`);
524
520
  }
525
521
  return this;
526
522
  }
@@ -560,9 +556,7 @@ class IMapClass<K extends MapSetKeyType, V>
560
556
  if (!mut_result.has(key) || curr === undefined) {
561
557
  if (this.#showNotFoundMessage) {
562
558
  const keyStr = unknownToString(key);
563
- console.warn(
564
- `IMap.withMutations: key not found: ${Result.isOk(keyStr) ? keyStr.value : '<error converting key to string>'}`,
565
- );
559
+ console.warn(`IMap.withMutations: key not found: ${keyStr}`);
566
560
  }
567
561
  break;
568
562
  }
@@ -1,4 +1,4 @@
1
- import { Result } from '../functional/index.mjs';
1
+ // No imports from functional needed anymore
2
2
  import { asUint32 } from '../number/index.mjs';
3
3
  import { unknownToString } from '../others/index.mjs';
4
4
 
@@ -560,9 +560,7 @@ class ISetClass<K extends MapSetKeyType> implements ISet<K>, Iterable<K> {
560
560
  if (!this.has(key)) {
561
561
  if (this.#showNotFoundMessage) {
562
562
  const keyStr = unknownToString(key);
563
- console.warn(
564
- `ISet.delete: key not found: ${Result.isOk(keyStr) ? keyStr.value : '<error converting key to string>'}`,
565
- );
563
+ console.warn(`ISet.delete: key not found: ${keyStr}`);
566
564
  }
567
565
  return this;
568
566
  }
@@ -1,5 +1,4 @@
1
1
  import { isRecord } from '../guard/index.mjs';
2
- import { pipe } from './pipe.mjs';
3
2
 
4
3
  /** @internal String literal tag to identify the 'Some' variant of Optional. */
5
4
  const SomeTypeTagName = 'ts-data-forge::Optional.some';
@@ -451,11 +450,12 @@ export namespace Optional {
451
450
  switch (args.length) {
452
451
  case 2: {
453
452
  const [optional, predicate] = args;
454
- return isSome(optional)
455
- ? pipe(unwrap(optional)).map((value) =>
456
- predicate(value) ? some(value) : none,
457
- ).value
458
- : none;
453
+ if (isSome(optional)) {
454
+ const value = unwrap(optional);
455
+ return predicate(value) ? some(value) : none;
456
+ }
457
+ // If the optional is None, return None
458
+ return none;
459
459
  }
460
460
 
461
461
  case 1: {
@@ -852,9 +852,7 @@ export namespace Result {
852
852
  return err(error);
853
853
  }
854
854
  const msg = unknownToString(error);
855
- return isErr(msg)
856
- ? err(new Error(String(error)))
857
- : err(new Error(msg.value));
855
+ return err(new Error(msg));
858
856
  }
859
857
  };
860
858
 
package/src/json/json.mts CHANGED
@@ -73,9 +73,7 @@ export namespace Json {
73
73
  );
74
74
  } catch (error: unknown) {
75
75
  const errStr = unknownToString(error);
76
- return Result.err(
77
- Result.isOk(errStr) ? errStr.value : 'Failed to parse JSON',
78
- );
76
+ return Result.err(errStr);
79
77
  }
80
78
  };
81
79
 
@@ -128,9 +126,7 @@ export namespace Json {
128
126
  return Result.ok(JSON.stringify(value, replacer, space));
129
127
  } catch (error) {
130
128
  const errStr = unknownToString(error);
131
- return Result.err(
132
- Result.isOk(errStr) ? errStr.value : 'Failed to stringify JSON',
133
- );
129
+ return Result.err(errStr);
134
130
  }
135
131
  };
136
132
 
@@ -181,9 +177,7 @@ export namespace Json {
181
177
  );
182
178
  } catch (error) {
183
179
  const errStr = unknownToString(error);
184
- return Result.err(
185
- Result.isOk(errStr) ? errStr.value : 'Failed to stringify JSON',
186
- );
180
+ return Result.err(errStr);
187
181
  }
188
182
  };
189
183