@fgv/ts-utils 5.0.0-22 → 5.0.0-24

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 (187) hide show
  1. package/CHANGELOG.json +0 -21
  2. package/lib/index.d.ts +2 -1
  3. package/lib/index.js +3 -1
  4. package/lib/packlets/base/index.d.ts +0 -2
  5. package/lib/packlets/base/index.js +1 -25
  6. package/lib/packlets/base/result.d.ts +49 -0
  7. package/lib/packlets/base/result.js +36 -0
  8. package/lib/packlets/collections/collector.d.ts +9 -0
  9. package/lib/packlets/collections/collector.js +6 -0
  10. package/lib/packlets/collections/validatingCollector.d.ts +5 -1
  11. package/lib/packlets/hash/hashingNormalizer.js +4 -3
  12. package/lib/packlets/logging/index.d.ts +3 -0
  13. package/{src/packlets/base/index.ts → lib/packlets/logging/index.js} +19 -10
  14. package/lib/packlets/logging/logReporter.d.ts +69 -0
  15. package/lib/packlets/logging/logReporter.js +72 -0
  16. package/lib/packlets/logging/logger.d.ts +183 -0
  17. package/lib/packlets/logging/logger.js +237 -0
  18. package/package.json +6 -6
  19. package/.vscode/launch.json +0 -16
  20. package/.vscode/settings.json +0 -36
  21. package/dist/ts-utils.d.ts +0 -4832
  22. package/dist/tsdoc-metadata.json +0 -11
  23. package/lib/packlets/base/logger.d.ts +0 -52
  24. package/lib/packlets/base/logger.js +0 -128
  25. package/lib/test/helpers/jest/helpers/fsHelpers.d.ts +0 -52
  26. package/lib/test/helpers/jest/helpers/fsHelpers.js +0 -180
  27. package/lib/test/helpers/jest/helpers/index.d.ts +0 -2
  28. package/lib/test/helpers/jest/helpers/index.js +0 -18
  29. package/lib/test/helpers/jest/index.d.ts +0 -3
  30. package/lib/test/helpers/jest/index.js +0 -27
  31. package/lib/test/helpers/jest/matchers/index.d.ts +0 -16
  32. package/lib/test/helpers/jest/matchers/index.js +0 -19
  33. package/lib/test/helpers/jest/matchers/toFail/index.d.ts +0 -16
  34. package/lib/test/helpers/jest/matchers/toFail/index.js +0 -25
  35. package/lib/test/helpers/jest/matchers/toFail/predicate.d.ts +0 -4
  36. package/lib/test/helpers/jest/matchers/toFail/predicate.js +0 -9
  37. package/lib/test/helpers/jest/matchers/toFailTest/index.d.ts +0 -16
  38. package/lib/test/helpers/jest/matchers/toFailTest/index.js +0 -30
  39. package/lib/test/helpers/jest/matchers/toFailTest/predicate.d.ts +0 -3
  40. package/lib/test/helpers/jest/matchers/toFailTest/predicate.js +0 -12
  41. package/lib/test/helpers/jest/matchers/toFailTestAndMatchSnapshot/index.d.ts +0 -17
  42. package/lib/test/helpers/jest/matchers/toFailTestAndMatchSnapshot/index.js +0 -26
  43. package/lib/test/helpers/jest/matchers/toFailTestAndMatchSnapshot/predicate.d.ts +0 -4
  44. package/lib/test/helpers/jest/matchers/toFailTestAndMatchSnapshot/predicate.js +0 -15
  45. package/lib/test/helpers/jest/matchers/toFailTestWith/index.d.ts +0 -18
  46. package/lib/test/helpers/jest/matchers/toFailTestWith/index.js +0 -31
  47. package/lib/test/helpers/jest/matchers/toFailTestWith/predicate.d.ts +0 -4
  48. package/lib/test/helpers/jest/matchers/toFailTestWith/predicate.js +0 -30
  49. package/lib/test/helpers/jest/matchers/toFailWith/index.d.ts +0 -18
  50. package/lib/test/helpers/jest/matchers/toFailWith/index.js +0 -29
  51. package/lib/test/helpers/jest/matchers/toFailWith/predicate.d.ts +0 -4
  52. package/lib/test/helpers/jest/matchers/toFailWith/predicate.js +0 -20
  53. package/lib/test/helpers/jest/matchers/toFailWithDetail/index.d.ts +0 -19
  54. package/lib/test/helpers/jest/matchers/toFailWithDetail/index.js +0 -29
  55. package/lib/test/helpers/jest/matchers/toFailWithDetail/predicate.d.ts +0 -4
  56. package/lib/test/helpers/jest/matchers/toFailWithDetail/predicate.js +0 -26
  57. package/lib/test/helpers/jest/matchers/toSucceed/index.d.ts +0 -16
  58. package/lib/test/helpers/jest/matchers/toSucceed/index.js +0 -25
  59. package/lib/test/helpers/jest/matchers/toSucceed/predicate.d.ts +0 -4
  60. package/lib/test/helpers/jest/matchers/toSucceed/predicate.js +0 -9
  61. package/lib/test/helpers/jest/matchers/toSucceedAndMatchInlineSnapshot/index.d.ts +0 -17
  62. package/lib/test/helpers/jest/matchers/toSucceedAndMatchInlineSnapshot/index.js +0 -26
  63. package/lib/test/helpers/jest/matchers/toSucceedAndMatchSnapshot/index.d.ts +0 -17
  64. package/lib/test/helpers/jest/matchers/toSucceedAndMatchSnapshot/index.js +0 -26
  65. package/lib/test/helpers/jest/matchers/toSucceedAndSatisfy/index.d.ts +0 -19
  66. package/lib/test/helpers/jest/matchers/toSucceedAndSatisfy/index.js +0 -55
  67. package/lib/test/helpers/jest/matchers/toSucceedAndSatisfy/predicate.d.ts +0 -4
  68. package/lib/test/helpers/jest/matchers/toSucceedAndSatisfy/predicate.js +0 -21
  69. package/lib/test/helpers/jest/matchers/toSucceedWith/index.d.ts +0 -18
  70. package/lib/test/helpers/jest/matchers/toSucceedWith/index.js +0 -29
  71. package/lib/test/helpers/jest/matchers/toSucceedWith/predicate.d.ts +0 -4
  72. package/lib/test/helpers/jest/matchers/toSucceedWith/predicate.js +0 -16
  73. package/lib/test/helpers/jest/matchers/toSucceedWithDetail/index.d.ts +0 -18
  74. package/lib/test/helpers/jest/matchers/toSucceedWithDetail/index.js +0 -29
  75. package/lib/test/helpers/jest/matchers/toSucceedWithDetail/predicate.d.ts +0 -4
  76. package/lib/test/helpers/jest/matchers/toSucceedWithDetail/predicate.js +0 -21
  77. package/lib/test/helpers/jest/resolvers/cli.d.ts +0 -5
  78. package/lib/test/helpers/jest/resolvers/cli.js +0 -48
  79. package/lib/test/helpers/jest/resolvers/ide.d.ts +0 -5
  80. package/lib/test/helpers/jest/resolvers/ide.js +0 -48
  81. package/lib/test/helpers/jest/ts-utils.d.ts +0 -2
  82. package/lib/test/helpers/jest/ts-utils.js +0 -18
  83. package/lib/test/helpers/jest/types/index.d.ts +0 -79
  84. package/lib/test/helpers/jest/types/index.js +0 -4
  85. package/lib/test/helpers/jest/utils/matcherHelpers.d.ts +0 -6
  86. package/lib/test/helpers/jest/utils/matcherHelpers.js +0 -53
  87. package/lib/test/helpers/jest/utils/snapshotResolver.d.ts +0 -4
  88. package/lib/test/helpers/jest/utils/snapshotResolver.js +0 -19
  89. package/lib/test/unit/collections/collectible.test.d.ts +0 -2
  90. package/lib/test/unit/collections/collector.test.d.ts +0 -2
  91. package/lib/test/unit/collections/collectors.test.d.ts +0 -2
  92. package/lib/test/unit/collections/convertingCollector.test.d.ts +0 -2
  93. package/lib/test/unit/collections/helpers.d.ts +0 -44
  94. package/lib/test/unit/collections/helpers.js +0 -115
  95. package/lib/test/unit/collections/resultMap.test.d.ts +0 -2
  96. package/lib/test/unit/collections/validatingCollector.test.d.ts +0 -2
  97. package/lib/test/unit/collections/validatingConvertingCollector.test.d.ts +0 -2
  98. package/lib/test/unit/collections/validatingResultMap.test.d.ts +0 -2
  99. package/lib/test/unit/converter.test.d.ts +0 -2
  100. package/lib/test/unit/converters.test.d.ts +0 -2
  101. package/lib/test/unit/defaultingConverter.test.d.ts +0 -2
  102. package/lib/test/unit/file-tree/fileItem.test.d.ts +0 -2
  103. package/lib/test/unit/file-tree/fileTree.test.d.ts +0 -2
  104. package/lib/test/unit/file-tree/fsTree.test.d.ts +0 -2
  105. package/lib/test/unit/file-tree/inMemoryTree.test.d.ts +0 -2
  106. package/lib/test/unit/file-tree/sample/rootFile.json +0 -1
  107. package/lib/test/unit/file-tree/sample/some/other/path/file2.json +0 -1
  108. package/lib/test/unit/file-tree/sample/some/path/below/file4.json +0 -1
  109. package/lib/test/unit/file-tree/sample/some/path/file1.json +0 -1
  110. package/lib/test/unit/file-tree/sample/some/path/file3.json +0 -1
  111. package/lib/test/unit/hash.test.d.ts +0 -2
  112. package/lib/test/unit/logger.test.d.ts +0 -2
  113. package/lib/test/unit/mapResults.test.d.ts +0 -3
  114. package/lib/test/unit/messageAggregator.test.d.ts +0 -3
  115. package/lib/test/unit/normalize.test.d.ts +0 -2
  116. package/lib/test/unit/result.test.d.ts +0 -3
  117. package/lib/test/unit/utils.test.d.ts +0 -3
  118. package/lib/test/unit/validation/array.test.d.ts +0 -2
  119. package/lib/test/unit/validation/boolean.test.d.ts +0 -2
  120. package/lib/test/unit/validation/genericValidator.test.d.ts +0 -2
  121. package/lib/test/unit/validation/number.test.d.ts +0 -2
  122. package/lib/test/unit/validation/object.test.d.ts +0 -2
  123. package/lib/test/unit/validation/oneOf.test.d.ts +0 -2
  124. package/lib/test/unit/validation/recordOf.test.d.ts +0 -2
  125. package/lib/test/unit/validation/recursiveValidation.test.d.ts +0 -2
  126. package/lib/test/unit/validation/string.test.d.ts +0 -2
  127. package/lib/test/unit/validation/traits.test.d.ts +0 -2
  128. package/lib/test/unit/validation/typeGuard.test.d.ts +0 -2
  129. package/lib/test/unit/validation/validators.test.d.ts +0 -2
  130. package/src/index.ts +0 -63
  131. package/src/packlets/base/brand.ts +0 -28
  132. package/src/packlets/base/logger.ts +0 -156
  133. package/src/packlets/base/mapResults.ts +0 -302
  134. package/src/packlets/base/messageAggregator.ts +0 -120
  135. package/src/packlets/base/normalize.ts +0 -144
  136. package/src/packlets/base/result.ts +0 -961
  137. package/src/packlets/base/utils.ts +0 -236
  138. package/src/packlets/collections/collectible.ts +0 -238
  139. package/src/packlets/collections/collector.ts +0 -273
  140. package/src/packlets/collections/collectorValidator.ts +0 -178
  141. package/src/packlets/collections/common.ts +0 -27
  142. package/src/packlets/collections/convertingCollector.ts +0 -223
  143. package/src/packlets/collections/convertingCollectorValidator.ts +0 -164
  144. package/src/packlets/collections/index.ts +0 -39
  145. package/src/packlets/collections/keyValueConverters.ts +0 -142
  146. package/src/packlets/collections/readonlyResultMap.ts +0 -99
  147. package/src/packlets/collections/resultMap.ts +0 -322
  148. package/src/packlets/collections/resultMapValidator.ts +0 -188
  149. package/src/packlets/collections/utils.ts +0 -33
  150. package/src/packlets/collections/validatingCollector.ts +0 -123
  151. package/src/packlets/collections/validatingConvertingCollector.ts +0 -113
  152. package/src/packlets/collections/validatingResultMap.ts +0 -94
  153. package/src/packlets/conversion/baseConverter.ts +0 -330
  154. package/src/packlets/conversion/converter.ts +0 -260
  155. package/src/packlets/conversion/converters.ts +0 -1039
  156. package/src/packlets/conversion/defaultingConverter.ts +0 -188
  157. package/src/packlets/conversion/index.ts +0 -30
  158. package/src/packlets/conversion/objectConverter.ts +0 -259
  159. package/src/packlets/conversion/stringConverter.ts +0 -165
  160. package/src/packlets/file-tree/directoryItem.ts +0 -84
  161. package/src/packlets/file-tree/fileItem.ts +0 -119
  162. package/src/packlets/file-tree/fileTree.ts +0 -152
  163. package/src/packlets/file-tree/fileTreeAccessors.ts +0 -176
  164. package/src/packlets/file-tree/fsTree.ts +0 -118
  165. package/src/packlets/file-tree/in-memory/inMemoryTree.ts +0 -171
  166. package/src/packlets/file-tree/in-memory/index.ts +0 -23
  167. package/src/packlets/file-tree/in-memory/treeBuilder.ts +0 -203
  168. package/src/packlets/file-tree/index.ts +0 -31
  169. package/src/packlets/hash/crcNormalizer.ts +0 -81
  170. package/src/packlets/hash/hashingNormalizer.ts +0 -102
  171. package/src/packlets/hash/index.ts +0 -24
  172. package/src/packlets/validation/array.ts +0 -84
  173. package/src/packlets/validation/boolean.ts +0 -63
  174. package/src/packlets/validation/classes.ts +0 -38
  175. package/src/packlets/validation/common.ts +0 -28
  176. package/src/packlets/validation/field.ts +0 -99
  177. package/src/packlets/validation/genericValidator.ts +0 -204
  178. package/src/packlets/validation/index.ts +0 -31
  179. package/src/packlets/validation/number.ts +0 -66
  180. package/src/packlets/validation/object.ts +0 -208
  181. package/src/packlets/validation/oneOf.ts +0 -78
  182. package/src/packlets/validation/string.ts +0 -66
  183. package/src/packlets/validation/traits.ts +0 -113
  184. package/src/packlets/validation/typeGuard.ts +0 -83
  185. package/src/packlets/validation/validator.ts +0 -157
  186. package/src/packlets/validation/validatorBase.ts +0 -66
  187. package/src/packlets/validation/validators.ts +0 -254
package/CHANGELOG.json CHANGED
@@ -1,27 +1,6 @@
1
1
  {
2
2
  "name": "@fgv/ts-utils",
3
3
  "entries": [
4
- {
5
- "version": "5.0.0",
6
- "tag": "@fgv/ts-utils_v5.0.0",
7
- "date": "Thu, 17 Jul 2025 00:13:24 GMT",
8
- "comments": {
9
- "none": [
10
- {
11
- "comment": "add result helpers, clean up object converter"
12
- },
13
- {
14
- "comment": "object converter partial/required helpers"
15
- },
16
- {
17
- "comment": "add Result.withErrorFormat"
18
- },
19
- {
20
- "comment": "bump version"
21
- }
22
- ]
23
- }
24
- },
25
4
  {
26
5
  "version": "4.6.0",
27
6
  "tag": "@fgv/ts-utils_v4.6.0",
package/lib/index.d.ts CHANGED
@@ -2,10 +2,11 @@ import * as Collections from './packlets/collections';
2
2
  import * as Conversion from './packlets/conversion';
3
3
  import * as Hash from './packlets/hash';
4
4
  import * as FileTree from './packlets/file-tree';
5
+ import * as Logging from './packlets/logging';
5
6
  import * as Validation from './packlets/validation';
6
7
  import { Collector, ICollectible, ConvertingCollector, IReadOnlyResultMap, ResultMap, ValidatingCollector, ValidatingConvertingCollector, ValidatingResultMap } from './packlets/collections';
7
8
  import { Converter, Converters, ObjectConverter, StringConverter } from './packlets/conversion';
8
9
  import { Validator, Validators } from './packlets/validation';
9
10
  export * from './packlets/base';
10
- export { Collections, Collector, ConvertingCollector, Conversion, Converter, Converters, FileTree, Hash, ICollectible, IReadOnlyResultMap, ObjectConverter, ResultMap, StringConverter, ValidatingCollector, ValidatingConvertingCollector, ValidatingResultMap, Validation, Validator, Validators };
11
+ export { Collections, Collector, ConvertingCollector, Conversion, Converter, Converters, FileTree, Hash, ICollectible, IReadOnlyResultMap, Logging, ObjectConverter, ResultMap, StringConverter, ValidatingCollector, ValidatingConvertingCollector, ValidatingResultMap, Validation, Validator, Validators };
11
12
  //# sourceMappingURL=index.d.ts.map
package/lib/index.js CHANGED
@@ -57,7 +57,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
57
57
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
58
58
  };
59
59
  Object.defineProperty(exports, "__esModule", { value: true });
60
- exports.Validators = exports.Validation = exports.ValidatingResultMap = exports.ValidatingConvertingCollector = exports.ValidatingCollector = exports.StringConverter = exports.ResultMap = exports.ObjectConverter = exports.Hash = exports.FileTree = exports.Converters = exports.Conversion = exports.ConvertingCollector = exports.Collector = exports.Collections = void 0;
60
+ exports.Validators = exports.Validation = exports.ValidatingResultMap = exports.ValidatingConvertingCollector = exports.ValidatingCollector = exports.StringConverter = exports.ResultMap = exports.ObjectConverter = exports.Logging = exports.Hash = exports.FileTree = exports.Converters = exports.Conversion = exports.ConvertingCollector = exports.Collector = exports.Collections = void 0;
61
61
  const Collections = __importStar(require("./packlets/collections"));
62
62
  exports.Collections = Collections;
63
63
  const Conversion = __importStar(require("./packlets/conversion"));
@@ -66,6 +66,8 @@ const Hash = __importStar(require("./packlets/hash"));
66
66
  exports.Hash = Hash;
67
67
  const FileTree = __importStar(require("./packlets/file-tree"));
68
68
  exports.FileTree = FileTree;
69
+ const Logging = __importStar(require("./packlets/logging"));
70
+ exports.Logging = Logging;
69
71
  const Validation = __importStar(require("./packlets/validation"));
70
72
  exports.Validation = Validation;
71
73
  const collections_1 = require("./packlets/collections");
@@ -1,9 +1,7 @@
1
- import * as Logging from './logger';
2
1
  export * from './brand';
3
2
  export * from './mapResults';
4
3
  export * from './messageAggregator';
5
4
  export { Normalizer } from './normalize';
6
5
  export * from './result';
7
6
  export * from './utils';
8
- export { Logging };
9
7
  //# sourceMappingURL=index.d.ts.map
@@ -31,35 +31,11 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
31
31
  if (k2 === undefined) k2 = k;
32
32
  o[k2] = m[k];
33
33
  }));
34
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
- Object.defineProperty(o, "default", { enumerable: true, value: v });
36
- }) : function(o, v) {
37
- o["default"] = v;
38
- });
39
- var __importStar = (this && this.__importStar) || (function () {
40
- var ownKeys = function(o) {
41
- ownKeys = Object.getOwnPropertyNames || function (o) {
42
- var ar = [];
43
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
44
- return ar;
45
- };
46
- return ownKeys(o);
47
- };
48
- return function (mod) {
49
- if (mod && mod.__esModule) return mod;
50
- var result = {};
51
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
52
- __setModuleDefault(result, mod);
53
- return result;
54
- };
55
- })();
56
34
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
57
35
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
58
36
  };
59
37
  Object.defineProperty(exports, "__esModule", { value: true });
60
- exports.Logging = exports.Normalizer = void 0;
61
- const Logging = __importStar(require("./logger"));
62
- exports.Logging = Logging;
38
+ exports.Normalizer = void 0;
63
39
  __exportStar(require("./brand"), exports);
64
40
  __exportStar(require("./mapResults"), exports);
65
41
  __exportStar(require("./messageAggregator"), exports);
@@ -41,6 +41,33 @@ export interface IResultLogger<TD = unknown> {
41
41
  */
42
42
  error(message: string, detail?: TD): void;
43
43
  }
44
+ /**
45
+ * The severity level at which a message should be logged.
46
+ * @public
47
+ */
48
+ export type MessageLogLevel = 'quiet' | 'detail' | 'info' | 'warning' | 'error';
49
+ /**
50
+ * Options for reporting a result.
51
+ * @public
52
+ */
53
+ export interface IResultReportOptions {
54
+ /**
55
+ * The level of reporting to be used for failure results. Default is 'error'.
56
+ */
57
+ failure?: MessageLogLevel;
58
+ /**
59
+ * The level of reporting to be used for success results. Default is 'quiet'.
60
+ */
61
+ success?: MessageLogLevel;
62
+ }
63
+ /**
64
+ * Interface for reporting a result.
65
+ * @public
66
+ */
67
+ export interface IResultReporter<T, TD = unknown> {
68
+ reportSuccess(level: MessageLogLevel, value: T, detail?: TD): void;
69
+ reportFailure(level: MessageLogLevel, message: string, detail?: TD): void;
70
+ }
44
71
  /**
45
72
  * Simple error aggregator to simplify collecting all errors in
46
73
  * a flow.
@@ -237,6 +264,12 @@ export interface IResult<T> {
237
264
  * errors will be aggregated.
238
265
  */
239
266
  aggregateError(errors: IMessageAggregator): this;
267
+ /**
268
+ * Reports the result to the supplied reporter
269
+ * @param reporter - The {@link IResultReporter | reporter} to which the result will be reported.
270
+ * @param options - The {@link IResultReportOptions | options} for reporting the result.
271
+ */
272
+ report(reporter: IResultReporter<T>, options?: IResultReportOptions): this;
240
273
  }
241
274
  /**
242
275
  * Reports a successful {@link IResult | result} from some operation and the
@@ -323,6 +356,10 @@ export declare class Success<T> implements IResult<T> {
323
356
  * {@inheritdoc IResult.aggregateError}
324
357
  */
325
358
  aggregateError(__errors: IMessageAggregator): this;
359
+ /**
360
+ * {@inheritdoc IResult.report}
361
+ */
362
+ report(reporter: IResultReporter<T>, options?: IResultReportOptions): this;
326
363
  /**
327
364
  * Creates a {@link Success | Success<T>} with the supplied value.
328
365
  * @param value - The value to be returned.
@@ -415,6 +452,10 @@ export declare class Failure<T> implements IResult<T> {
415
452
  * {@inheritdoc IResult.aggregateError}
416
453
  */
417
454
  aggregateError(errors: IMessageAggregator): this;
455
+ /**
456
+ * {@inheritdoc IResult.report}
457
+ */
458
+ report(reporter: IResultReporter<T>, options?: IResultReportOptions): this;
418
459
  /**
419
460
  * Get a 'friendly' string representation of this object.
420
461
  * @remarks
@@ -537,6 +578,10 @@ export declare class DetailedSuccess<T, TD> extends Success<T> {
537
578
  * {@inheritdoc Success.withErrorFormat}
538
579
  */
539
580
  withErrorFormat(cb: ErrorFormatter): DetailedResult<T, TD>;
581
+ /**
582
+ * {@inheritdoc IResult.report}
583
+ */
584
+ report(reporter: IResultReporter<T, TD>, options?: IResultReportOptions): this;
540
585
  /**
541
586
  * Creates a {@link DetailedSuccess | DetailedSuccess<T, TD>} with the supplied value and
542
587
  * optional detail.
@@ -599,6 +644,10 @@ export declare class DetailedFailure<T, TD> extends Failure<T> {
599
644
  * {@inheritdoc IResult.withErrorFormat}
600
645
  */
601
646
  withErrorFormat(cb: ErrorFormatter<TD>): DetailedResult<T, TD>;
647
+ /**
648
+ * {@inheritdoc IResult.report}
649
+ */
650
+ report(reporter: IResultReporter<T, TD>, options?: IResultReportOptions): this;
602
651
  orThrow(logOrFormat?: IResultLogger<TD> | ErrorFormatter<TD>): never;
603
652
  orThrow(cb: ErrorFormatter): never;
604
653
  /**
@@ -130,6 +130,15 @@ class Success {
130
130
  aggregateError(__errors) {
131
131
  return this;
132
132
  }
133
+ /**
134
+ * {@inheritdoc IResult.report}
135
+ */
136
+ report(reporter, options) {
137
+ var _a;
138
+ const level = (_a = options === null || options === void 0 ? void 0 : options.success) !== null && _a !== void 0 ? _a : 'quiet';
139
+ reporter.reportSuccess(level, this._value);
140
+ return this;
141
+ }
133
142
  /**
134
143
  * Creates a {@link Success | Success<T>} with the supplied value.
135
144
  * @param value - The value to be returned.
@@ -247,6 +256,15 @@ class Failure {
247
256
  errors.addMessage(this._message);
248
257
  return this;
249
258
  }
259
+ /**
260
+ * {@inheritdoc IResult.report}
261
+ */
262
+ report(reporter, options) {
263
+ var _a;
264
+ const level = (_a = options === null || options === void 0 ? void 0 : options.failure) !== null && _a !== void 0 ? _a : 'error';
265
+ reporter.reportFailure(level, this._message);
266
+ return this;
267
+ }
250
268
  /**
251
269
  * Get a 'friendly' string representation of this object.
252
270
  * @remarks
@@ -376,6 +394,15 @@ class DetailedSuccess extends Success {
376
394
  withErrorFormat(cb) {
377
395
  return this;
378
396
  }
397
+ /**
398
+ * {@inheritdoc IResult.report}
399
+ */
400
+ report(reporter, options) {
401
+ var _a;
402
+ const level = (_a = options === null || options === void 0 ? void 0 : options.success) !== null && _a !== void 0 ? _a : 'quiet';
403
+ reporter.reportSuccess(level, this._value, this._detail);
404
+ return this;
405
+ }
379
406
  /**
380
407
  * Creates a {@link DetailedSuccess | DetailedSuccess<T, TD>} with the supplied value and
381
408
  * optional detail.
@@ -452,6 +479,15 @@ class DetailedFailure extends Failure {
452
479
  withErrorFormat(cb) {
453
480
  return failWithDetail(cb(this._message, this._detail), this._detail);
454
481
  }
482
+ /**
483
+ * {@inheritdoc IResult.report}
484
+ */
485
+ report(reporter, options) {
486
+ var _a;
487
+ const level = (_a = options === null || options === void 0 ? void 0 : options.failure) !== null && _a !== void 0 ? _a : 'error';
488
+ reporter.reportFailure(level, this._message, this._detail);
489
+ return this;
490
+ }
455
491
  orThrow(logOrFormat) {
456
492
  if (logOrFormat !== undefined) {
457
493
  if (typeof logOrFormat === 'function') {
@@ -19,6 +19,11 @@ export interface IReadOnlyCollector<TITEM extends ICollectible<any, any>> extend
19
19
  * with an error if the index is out of range.
20
20
  */
21
21
  getAt(index: number): Result<TITEM>;
22
+ /**
23
+ * Gets all items in the collection, ordered by index.
24
+ * @returns An array of items in the collection, ordered by index.
25
+ */
26
+ valuesByIndex(): ReadonlyArray<TITEM>;
22
27
  }
23
28
  /**
24
29
  * Parameters for constructing a {@link Collections.Collector | ICollector}.
@@ -115,6 +120,10 @@ export declare class Collector<TITEM extends ICollectible<any, any>> implements
115
120
  * {@inheritdoc Collections.ResultMap.values}
116
121
  */
117
122
  values(): IterableIterator<TITEM>;
123
+ /**
124
+ * {@inheritdoc Collections.IReadOnlyCollector.valuesByIndex}
125
+ */
126
+ valuesByIndex(): ReadonlyArray<TITEM>;
118
127
  /**
119
128
  * Gets a read-only version of this collector.
120
129
  */
@@ -157,6 +157,12 @@ class Collector {
157
157
  values() {
158
158
  return this._byKey.values();
159
159
  }
160
+ /**
161
+ * {@inheritdoc Collections.IReadOnlyCollector.valuesByIndex}
162
+ */
163
+ valuesByIndex() {
164
+ return this._byIndex;
165
+ }
160
166
  /**
161
167
  * Gets a read-only version of this collector.
162
168
  */
@@ -18,7 +18,11 @@ export interface IReadOnlyValidatingCollector<TITEM extends ICollectible<any, an
18
18
  /**
19
19
  * {@inheritdoc Collections.IReadOnlyValidatingCollector.getAt}
20
20
  */
21
- readonly getAt: (index: number) => Result<TITEM>;
21
+ getAt(index: number): Result<TITEM>;
22
+ /**
23
+ * {@inheritdoc Collections.IReadOnlyCollector.valuesByIndex}
24
+ */
25
+ valuesByIndex(): ReadonlyArray<TITEM>;
22
26
  }
23
27
  /**
24
28
  * Parameters for constructing a {@link Collections.ValidatingCollector | ValidatingCollector}.
@@ -51,13 +51,14 @@ class HashingNormalizer extends base_1.Normalizer {
51
51
  }
52
52
  else if (Array.isArray(from)) {
53
53
  return (0, base_1.mapResults)(from.map((e) => this.computeHash(e))).onSuccess((a) => {
54
- return (0, base_1.captureResult)(() => this._hash(a));
54
+ return (0, base_1.captureResult)(() => this._hash(['array', ...a]));
55
55
  });
56
56
  }
57
57
  else if (from instanceof Map || from instanceof Set) {
58
- return this.computeHash(this.normalizeEntries(from.entries()));
58
+ const type = from instanceof Map ? 'map' : 'set';
59
+ return this.computeHash([type, ...this.normalizeEntries(from.entries())]);
59
60
  }
60
- return this.computeHash(this.normalizeEntries(Object.entries(from)));
61
+ return this.computeHash(['object', ...this.normalizeEntries(Object.entries(from))]);
61
62
  }
62
63
  return (0, base_1.fail)(`computeHash: Unexpected type - cannot hash '${typeof from}'`);
63
64
  }
@@ -0,0 +1,3 @@
1
+ export * from './logger';
2
+ export * from './logReporter';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,4 @@
1
+ "use strict";
1
2
  /*
2
3
  * Copyright (c) 2020 Erik Fortune
3
4
  *
@@ -19,13 +20,21 @@
19
20
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
21
  * SOFTWARE.
21
22
  */
22
-
23
- import * as Logging from './logger';
24
-
25
- export * from './brand';
26
- export * from './mapResults';
27
- export * from './messageAggregator';
28
- export { Normalizer } from './normalize';
29
- export * from './result';
30
- export * from './utils';
31
- export { Logging };
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
35
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ __exportStar(require("./logger"), exports);
39
+ __exportStar(require("./logReporter"), exports);
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,69 @@
1
+ import { ILogger, ReporterLogLevel } from './logger';
2
+ import { IResultReporter, MessageLogLevel, Success } from '../base';
3
+ /**
4
+ * A function that formats a value for logging.
5
+ * @public
6
+ */
7
+ export type LogValueFormatter<T, TD = unknown> = (value: T, detail?: TD) => string;
8
+ /**
9
+ * A function that formats a message for logging.
10
+ * @public
11
+ */
12
+ export type LogMessageFormatter<TD = unknown> = (message: string, detail?: TD) => string;
13
+ /**
14
+ * Parameters for creating a {@link Logging.LogReporter | LogReporter}.
15
+ * @public
16
+ */
17
+ export interface ILogReporterCreateParams<T, TD = unknown> {
18
+ logger: ILogger;
19
+ valueFormatter?: LogValueFormatter<T, TD>;
20
+ messageFormatter?: LogMessageFormatter<TD>;
21
+ }
22
+ /**
23
+ * Abstract base class which wraps an existing {@link Logging.ILogger | ILogger} to implement
24
+ * both {@link Logging.ILogger | ILogger} and {@link IResultReporter | IResultReporter}.
25
+ * @public
26
+ */
27
+ export declare class LogReporter<T, TD = unknown> implements ILogger, IResultReporter<T, TD> {
28
+ protected readonly _logger: ILogger;
29
+ protected readonly _valueFormatter: LogValueFormatter<T, TD>;
30
+ protected readonly _messageFormatter: LogMessageFormatter<TD>;
31
+ /**
32
+ * Creates a new {@link Logging.LogReporter | LogReporter}.
33
+ * @param params - The parameters for creating the {@link Logging.LogReporter | LogReporter}.
34
+ */
35
+ constructor(params: ILogReporterCreateParams<T, TD>);
36
+ /**
37
+ * {@inheritDoc Logging.ILogger.logLevel}
38
+ */
39
+ get logLevel(): ReporterLogLevel;
40
+ /**
41
+ * {@inheritDoc Logging.ILogger.detail}
42
+ */
43
+ detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
44
+ /**
45
+ * {@inheritDoc Logging.ILogger.info}
46
+ */
47
+ info(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
48
+ /**
49
+ * {@inheritDoc Logging.ILogger.warn}
50
+ */
51
+ warn(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
52
+ /**
53
+ * {@inheritDoc Logging.ILogger.error}
54
+ */
55
+ error(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
56
+ /**
57
+ * {@inheritDoc Logging.ILogger.log}
58
+ */
59
+ log(level: MessageLogLevel, message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
60
+ /**
61
+ * {@inheritDoc IResultReporter.reportSuccess}
62
+ */
63
+ reportSuccess(level: MessageLogLevel, value: T, detail?: TD): void;
64
+ /**
65
+ * {@inheritDoc IResultReporter.reportFailure}
66
+ */
67
+ reportFailure(level: MessageLogLevel, message: string, detail?: TD): void;
68
+ }
69
+ //# sourceMappingURL=logReporter.d.ts.map
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogReporter = void 0;
4
+ /**
5
+ * Abstract base class which wraps an existing {@link Logging.ILogger | ILogger} to implement
6
+ * both {@link Logging.ILogger | ILogger} and {@link IResultReporter | IResultReporter}.
7
+ * @public
8
+ */
9
+ class LogReporter {
10
+ /**
11
+ * Creates a new {@link Logging.LogReporter | LogReporter}.
12
+ * @param params - The parameters for creating the {@link Logging.LogReporter | LogReporter}.
13
+ */
14
+ constructor(params) {
15
+ var _a, _b;
16
+ this._logger = params.logger;
17
+ this._valueFormatter = (_a = params.valueFormatter) !== null && _a !== void 0 ? _a : ((message, __detail) => String(message));
18
+ this._messageFormatter = (_b = params.messageFormatter) !== null && _b !== void 0 ? _b : ((message, __detail) => message);
19
+ }
20
+ /**
21
+ * {@inheritDoc Logging.ILogger.logLevel}
22
+ */
23
+ get logLevel() {
24
+ return this._logger.logLevel;
25
+ }
26
+ /**
27
+ * {@inheritDoc Logging.ILogger.detail}
28
+ */
29
+ detail(message, ...parameters) {
30
+ return this._logger.detail(message, ...parameters);
31
+ }
32
+ /**
33
+ * {@inheritDoc Logging.ILogger.info}
34
+ */
35
+ info(message, ...parameters) {
36
+ return this._logger.info(message, ...parameters);
37
+ }
38
+ /**
39
+ * {@inheritDoc Logging.ILogger.warn}
40
+ */
41
+ warn(message, ...parameters) {
42
+ return this._logger.warn(message, ...parameters);
43
+ }
44
+ /**
45
+ * {@inheritDoc Logging.ILogger.error}
46
+ */
47
+ error(message, ...parameters) {
48
+ return this._logger.error(message, ...parameters);
49
+ }
50
+ /**
51
+ * {@inheritDoc Logging.ILogger.log}
52
+ */
53
+ log(level, message, ...parameters) {
54
+ return this._logger.log(level, message, ...parameters);
55
+ }
56
+ /**
57
+ * {@inheritDoc IResultReporter.reportSuccess}
58
+ */
59
+ reportSuccess(level, value, detail) {
60
+ const formatted = this._valueFormatter(value, detail);
61
+ this.log(level, formatted);
62
+ }
63
+ /**
64
+ * {@inheritDoc IResultReporter.reportFailure}
65
+ */
66
+ reportFailure(level, message, detail) {
67
+ const formatted = this._messageFormatter(message, detail);
68
+ this.log(level, formatted);
69
+ }
70
+ }
71
+ exports.LogReporter = LogReporter;
72
+ //# sourceMappingURL=logReporter.js.map