@fgv/ts-utils 5.1.0-4 → 5.1.0-40
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 +21 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -0
- package/dist/packlets/base/brand.js.map +1 -0
- package/dist/packlets/base/index.js +2 -0
- package/dist/packlets/base/index.js.map +1 -0
- package/dist/packlets/base/mapResults.js.map +1 -0
- package/dist/packlets/base/messageAggregator.js.map +1 -0
- package/dist/packlets/base/normalize.js +54 -1
- package/dist/packlets/base/normalize.js.map +1 -0
- package/dist/packlets/base/result.js +326 -2
- package/dist/packlets/base/result.js.map +1 -0
- package/dist/packlets/base/shouldNotFail.js +123 -0
- package/dist/packlets/base/shouldNotFail.js.map +1 -0
- package/dist/packlets/base/utils.js.map +1 -0
- package/dist/packlets/base/uuid.js +55 -0
- package/dist/packlets/base/uuid.js.map +1 -0
- package/dist/packlets/collections/aggregatedResultMap.js.map +1 -0
- package/dist/packlets/collections/collectible.js.map +1 -0
- package/dist/packlets/collections/collector.js +23 -9
- package/dist/packlets/collections/collector.js.map +1 -0
- package/dist/packlets/collections/collectorValidator.js +6 -1
- package/dist/packlets/collections/collectorValidator.js.map +1 -0
- package/dist/packlets/collections/common.js.map +1 -0
- package/dist/packlets/collections/converters.js.map +1 -0
- package/dist/packlets/collections/convertingCollector.js.map +1 -0
- package/dist/packlets/collections/convertingCollectorValidator.js.map +1 -0
- package/dist/packlets/collections/convertingResultMap.js.map +1 -0
- package/dist/packlets/collections/index.js +1 -0
- package/dist/packlets/collections/index.js.map +1 -0
- package/dist/packlets/collections/keyValueConverters.js.map +1 -0
- package/dist/packlets/collections/readOnlyConvertingResultMap.js +18 -0
- package/dist/packlets/collections/readOnlyConvertingResultMap.js.map +1 -0
- package/dist/packlets/collections/readonlyResultMap.js.map +1 -0
- package/dist/packlets/collections/resultMap.js.map +1 -0
- package/dist/packlets/collections/resultMapValidator.js.map +1 -0
- package/dist/packlets/collections/retainingRingBuffer.js +159 -0
- package/dist/packlets/collections/retainingRingBuffer.js.map +1 -0
- package/dist/packlets/collections/utils.js.map +1 -0
- package/dist/packlets/collections/validatingCollector.js.map +1 -0
- package/dist/packlets/collections/validatingConvertingCollector.js.map +1 -0
- package/dist/packlets/collections/validatingConvertingResultMap.js.map +1 -0
- package/dist/packlets/collections/validatingResultMap.js.map +1 -0
- package/dist/packlets/conversion/advancedConverters.js.map +1 -0
- package/dist/packlets/conversion/baseConverter.js +107 -18
- package/dist/packlets/conversion/baseConverter.js.map +1 -0
- package/dist/packlets/conversion/basicConverters.js +24 -5
- package/dist/packlets/conversion/basicConverters.js.map +1 -0
- package/dist/packlets/conversion/converter.js +11 -1
- package/dist/packlets/conversion/converter.js.map +1 -0
- package/dist/packlets/conversion/converters.js.map +1 -0
- package/dist/packlets/conversion/defaultingConverter.js.map +1 -0
- package/dist/packlets/conversion/index.js.map +1 -0
- package/dist/packlets/conversion/objectConverter.js.map +1 -0
- package/dist/packlets/conversion/stringConverter.js.map +1 -0
- package/dist/packlets/hash/crcNormalizer.js.map +1 -0
- package/dist/packlets/hash/hashingNormalizer.js.map +1 -0
- package/dist/packlets/hash/index.js.map +1 -0
- package/dist/packlets/logging/bootLogger.js.map +1 -0
- package/dist/packlets/logging/index.js +2 -0
- package/dist/packlets/logging/index.js.map +1 -0
- package/dist/packlets/logging/logReporter.js.map +1 -0
- package/dist/packlets/logging/logger.js +51 -18
- package/dist/packlets/logging/logger.js.map +1 -0
- package/dist/packlets/logging/multiLogger.js +104 -0
- package/dist/packlets/logging/multiLogger.js.map +1 -0
- package/dist/packlets/logging/retainingLogger.js +114 -0
- package/dist/packlets/logging/retainingLogger.js.map +1 -0
- package/dist/packlets/logging-interface/index.js +28 -0
- package/dist/packlets/logging-interface/index.js.map +1 -0
- package/dist/packlets/validation/array.js.map +1 -0
- package/dist/packlets/validation/boolean.js.map +1 -0
- package/dist/packlets/validation/classes.js.map +1 -0
- package/dist/packlets/validation/common.js.map +1 -0
- package/dist/packlets/validation/compositeId.js.map +1 -0
- package/dist/packlets/validation/field.js.map +1 -0
- package/dist/packlets/validation/genericValidator.js.map +1 -0
- package/dist/packlets/validation/index.js.map +1 -0
- package/dist/packlets/validation/number.js.map +1 -0
- package/dist/packlets/validation/object.js.map +1 -0
- package/dist/packlets/validation/oneOf.js.map +1 -0
- package/dist/packlets/validation/string.js.map +1 -0
- package/dist/packlets/validation/traits.js.map +1 -0
- package/dist/packlets/validation/typeGuard.js.map +1 -0
- package/dist/packlets/validation/validator.js.map +1 -0
- package/dist/packlets/validation/validatorBase.js.map +1 -0
- package/dist/packlets/validation/validators.js.map +1 -0
- package/dist/ts-utils.d.ts +1089 -59
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -0
- package/lib/packlets/base/brand.d.ts.map +1 -0
- package/lib/packlets/base/brand.js.map +1 -0
- package/lib/packlets/base/index.d.ts +2 -0
- package/lib/packlets/base/index.d.ts.map +1 -0
- package/lib/packlets/base/index.js +2 -0
- package/lib/packlets/base/index.js.map +1 -0
- package/lib/packlets/base/mapResults.d.ts.map +1 -0
- package/lib/packlets/base/mapResults.js.map +1 -0
- package/lib/packlets/base/messageAggregator.d.ts.map +1 -0
- package/lib/packlets/base/messageAggregator.js.map +1 -0
- package/lib/packlets/base/normalize.d.ts +24 -0
- package/lib/packlets/base/normalize.d.ts.map +1 -0
- package/lib/packlets/base/normalize.js +53 -0
- package/lib/packlets/base/normalize.js.map +1 -0
- package/lib/packlets/base/result.d.ts +295 -1
- package/lib/packlets/base/result.d.ts.map +1 -0
- package/lib/packlets/base/result.js +330 -3
- package/lib/packlets/base/result.js.map +1 -0
- package/lib/packlets/base/shouldNotFail.d.ts +53 -0
- package/lib/packlets/base/shouldNotFail.d.ts.map +1 -0
- package/lib/packlets/base/shouldNotFail.js +129 -0
- package/lib/packlets/base/shouldNotFail.js.map +1 -0
- package/lib/packlets/base/utils.d.ts +12 -0
- package/lib/packlets/base/utils.d.ts.map +1 -0
- package/lib/packlets/base/utils.js.map +1 -0
- package/lib/packlets/base/uuid.d.ts +27 -0
- package/lib/packlets/base/uuid.d.ts.map +1 -0
- package/lib/packlets/base/uuid.js +59 -0
- package/lib/packlets/base/uuid.js.map +1 -0
- package/lib/packlets/collections/aggregatedResultMap.d.ts.map +1 -0
- package/lib/packlets/collections/aggregatedResultMap.js.map +1 -0
- package/lib/packlets/collections/collectible.d.ts.map +1 -0
- package/lib/packlets/collections/collectible.js.map +1 -0
- package/lib/packlets/collections/collector.d.ts +23 -9
- package/lib/packlets/collections/collector.d.ts.map +1 -0
- package/lib/packlets/collections/collector.js +23 -9
- package/lib/packlets/collections/collector.js.map +1 -0
- package/lib/packlets/collections/collectorValidator.d.ts +29 -5
- package/lib/packlets/collections/collectorValidator.d.ts.map +1 -0
- package/lib/packlets/collections/collectorValidator.js +6 -1
- package/lib/packlets/collections/collectorValidator.js.map +1 -0
- package/lib/packlets/collections/common.d.ts.map +1 -0
- package/lib/packlets/collections/common.js.map +1 -0
- package/lib/packlets/collections/converters.d.ts.map +1 -0
- package/lib/packlets/collections/converters.js.map +1 -0
- package/lib/packlets/collections/convertingCollector.d.ts +21 -3
- package/lib/packlets/collections/convertingCollector.d.ts.map +1 -0
- package/lib/packlets/collections/convertingCollector.js.map +1 -0
- package/lib/packlets/collections/convertingCollectorValidator.d.ts +22 -3
- package/lib/packlets/collections/convertingCollectorValidator.d.ts.map +1 -0
- package/lib/packlets/collections/convertingCollectorValidator.js.map +1 -0
- package/lib/packlets/collections/convertingResultMap.d.ts.map +1 -0
- package/lib/packlets/collections/convertingResultMap.js.map +1 -0
- package/lib/packlets/collections/index.d.ts +1 -0
- package/lib/packlets/collections/index.d.ts.map +1 -0
- package/lib/packlets/collections/index.js +1 -0
- package/lib/packlets/collections/index.js.map +1 -0
- package/lib/packlets/collections/keyValueConverters.d.ts.map +1 -0
- package/lib/packlets/collections/keyValueConverters.js.map +1 -0
- package/lib/packlets/collections/readOnlyConvertingResultMap.d.ts +13 -1
- package/lib/packlets/collections/readOnlyConvertingResultMap.d.ts.map +1 -0
- package/lib/packlets/collections/readOnlyConvertingResultMap.js +19 -1
- package/lib/packlets/collections/readOnlyConvertingResultMap.js.map +1 -0
- package/lib/packlets/collections/readonlyResultMap.d.ts +18 -7
- package/lib/packlets/collections/readonlyResultMap.d.ts.map +1 -0
- package/lib/packlets/collections/readonlyResultMap.js.map +1 -0
- package/lib/packlets/collections/resultMap.d.ts.map +1 -0
- package/lib/packlets/collections/resultMap.js.map +1 -0
- package/lib/packlets/collections/resultMapValidator.d.ts.map +1 -0
- package/lib/packlets/collections/resultMapValidator.js.map +1 -0
- package/lib/packlets/collections/retainingRingBuffer.d.ts +147 -0
- package/lib/packlets/collections/retainingRingBuffer.d.ts.map +1 -0
- package/lib/packlets/collections/retainingRingBuffer.js +163 -0
- package/lib/packlets/collections/retainingRingBuffer.js.map +1 -0
- package/lib/packlets/collections/utils.d.ts.map +1 -0
- package/lib/packlets/collections/utils.js.map +1 -0
- package/lib/packlets/collections/validatingCollector.d.ts +7 -3
- package/lib/packlets/collections/validatingCollector.d.ts.map +1 -0
- package/lib/packlets/collections/validatingCollector.js.map +1 -0
- package/lib/packlets/collections/validatingConvertingCollector.d.ts.map +1 -0
- package/lib/packlets/collections/validatingConvertingCollector.js.map +1 -0
- package/lib/packlets/collections/validatingConvertingResultMap.d.ts.map +1 -0
- package/lib/packlets/collections/validatingConvertingResultMap.js.map +1 -0
- package/lib/packlets/collections/validatingResultMap.d.ts +2 -1
- package/lib/packlets/collections/validatingResultMap.d.ts.map +1 -0
- package/lib/packlets/collections/validatingResultMap.js.map +1 -0
- package/lib/packlets/conversion/advancedConverters.d.ts.map +1 -0
- package/lib/packlets/conversion/advancedConverters.js.map +1 -0
- package/lib/packlets/conversion/baseConverter.d.ts +108 -19
- package/lib/packlets/conversion/baseConverter.d.ts.map +1 -0
- package/lib/packlets/conversion/baseConverter.js +107 -18
- package/lib/packlets/conversion/baseConverter.js.map +1 -0
- package/lib/packlets/conversion/basicConverters.d.ts +14 -0
- package/lib/packlets/conversion/basicConverters.d.ts.map +1 -0
- package/lib/packlets/conversion/basicConverters.js +24 -5
- package/lib/packlets/conversion/basicConverters.js.map +1 -0
- package/lib/packlets/conversion/converter.d.ts +9 -1
- package/lib/packlets/conversion/converter.d.ts.map +1 -0
- package/lib/packlets/conversion/converter.js +12 -0
- package/lib/packlets/conversion/converter.js.map +1 -0
- package/lib/packlets/conversion/converters.d.ts.map +1 -0
- package/lib/packlets/conversion/converters.js.map +1 -0
- package/lib/packlets/conversion/defaultingConverter.d.ts.map +1 -0
- package/lib/packlets/conversion/defaultingConverter.js.map +1 -0
- package/lib/packlets/conversion/index.d.ts.map +1 -0
- package/lib/packlets/conversion/index.js.map +1 -0
- package/lib/packlets/conversion/objectConverter.d.ts.map +1 -0
- package/lib/packlets/conversion/objectConverter.js.map +1 -0
- package/lib/packlets/conversion/stringConverter.d.ts.map +1 -0
- package/lib/packlets/conversion/stringConverter.js.map +1 -0
- package/lib/packlets/hash/crcNormalizer.d.ts.map +1 -0
- package/lib/packlets/hash/crcNormalizer.js.map +1 -0
- package/lib/packlets/hash/hashingNormalizer.d.ts.map +1 -0
- package/lib/packlets/hash/hashingNormalizer.js.map +1 -0
- package/lib/packlets/hash/index.d.ts.map +1 -0
- package/lib/packlets/hash/index.js.map +1 -0
- package/lib/packlets/logging/bootLogger.d.ts.map +1 -0
- package/lib/packlets/logging/bootLogger.js.map +1 -0
- package/lib/packlets/logging/index.d.ts +2 -0
- package/lib/packlets/logging/index.d.ts.map +1 -0
- package/lib/packlets/logging/index.js +2 -0
- package/lib/packlets/logging/index.js.map +1 -0
- package/lib/packlets/logging/logReporter.d.ts.map +1 -0
- package/lib/packlets/logging/logReporter.js.map +1 -0
- package/lib/packlets/logging/logger.d.ts +25 -70
- package/lib/packlets/logging/logger.d.ts.map +1 -0
- package/lib/packlets/logging/logger.js +54 -20
- package/lib/packlets/logging/logger.js.map +1 -0
- package/lib/packlets/logging/multiLogger.d.ts +54 -0
- package/lib/packlets/logging/multiLogger.d.ts.map +1 -0
- package/lib/packlets/logging/multiLogger.js +108 -0
- package/lib/packlets/logging/multiLogger.js.map +1 -0
- package/lib/packlets/logging/retainingLogger.d.ts +123 -0
- package/lib/packlets/logging/retainingLogger.d.ts.map +1 -0
- package/lib/packlets/logging/retainingLogger.js +118 -0
- package/lib/packlets/logging/retainingLogger.js.map +1 -0
- package/lib/packlets/logging-interface/index.d.ts +98 -0
- package/lib/packlets/logging-interface/index.d.ts.map +1 -0
- package/lib/packlets/logging-interface/index.js +32 -0
- package/lib/packlets/logging-interface/index.js.map +1 -0
- package/lib/packlets/validation/array.d.ts.map +1 -0
- package/lib/packlets/validation/array.js.map +1 -0
- package/lib/packlets/validation/boolean.d.ts.map +1 -0
- package/lib/packlets/validation/boolean.js.map +1 -0
- package/lib/packlets/validation/classes.d.ts.map +1 -0
- package/lib/packlets/validation/classes.js.map +1 -0
- package/lib/packlets/validation/common.d.ts.map +1 -0
- package/lib/packlets/validation/common.js.map +1 -0
- package/lib/packlets/validation/compositeId.d.ts.map +1 -0
- package/lib/packlets/validation/compositeId.js.map +1 -0
- package/lib/packlets/validation/field.d.ts.map +1 -0
- package/lib/packlets/validation/field.js.map +1 -0
- package/lib/packlets/validation/genericValidator.d.ts.map +1 -0
- package/lib/packlets/validation/genericValidator.js.map +1 -0
- package/lib/packlets/validation/index.d.ts.map +1 -0
- package/lib/packlets/validation/index.js.map +1 -0
- package/lib/packlets/validation/number.d.ts.map +1 -0
- package/lib/packlets/validation/number.js.map +1 -0
- package/lib/packlets/validation/object.d.ts.map +1 -0
- package/lib/packlets/validation/object.js.map +1 -0
- package/lib/packlets/validation/oneOf.d.ts.map +1 -0
- package/lib/packlets/validation/oneOf.js.map +1 -0
- package/lib/packlets/validation/string.d.ts.map +1 -0
- package/lib/packlets/validation/string.js.map +1 -0
- package/lib/packlets/validation/traits.d.ts.map +1 -0
- package/lib/packlets/validation/traits.js.map +1 -0
- package/lib/packlets/validation/typeGuard.d.ts.map +1 -0
- package/lib/packlets/validation/typeGuard.js.map +1 -0
- package/lib/packlets/validation/validator.d.ts.map +1 -0
- package/lib/packlets/validation/validator.js.map +1 -0
- package/lib/packlets/validation/validatorBase.d.ts +2 -1
- package/lib/packlets/validation/validatorBase.d.ts.map +1 -0
- package/lib/packlets/validation/validatorBase.js.map +1 -0
- package/lib/packlets/validation/validators.d.ts.map +1 -0
- package/lib/packlets/validation/validators.js.map +1 -0
- package/package.json +3 -3
- package/dist/test/helpers/jest/helpers/fsHelpers.js +0 -139
- package/dist/test/helpers/jest/helpers/index.js +0 -2
- package/dist/test/helpers/jest/index.js +0 -17
- package/dist/test/helpers/jest/matchers/index.js +0 -14
- package/dist/test/helpers/jest/matchers/toFail/index.js +0 -23
- package/dist/test/helpers/jest/matchers/toFail/predicate.js +0 -5
- package/dist/test/helpers/jest/matchers/toFailTest/index.js +0 -28
- package/dist/test/helpers/jest/matchers/toFailTest/predicate.js +0 -8
- package/dist/test/helpers/jest/matchers/toFailTestAndMatchSnapshot/index.js +0 -24
- package/dist/test/helpers/jest/matchers/toFailTestAndMatchSnapshot/predicate.js +0 -11
- package/dist/test/helpers/jest/matchers/toFailTestWith/index.js +0 -29
- package/dist/test/helpers/jest/matchers/toFailTestWith/predicate.js +0 -26
- package/dist/test/helpers/jest/matchers/toFailWith/index.js +0 -27
- package/dist/test/helpers/jest/matchers/toFailWith/predicate.js +0 -16
- package/dist/test/helpers/jest/matchers/toFailWithDetail/index.js +0 -27
- package/dist/test/helpers/jest/matchers/toFailWithDetail/predicate.js +0 -22
- package/dist/test/helpers/jest/matchers/toSucceed/index.js +0 -23
- package/dist/test/helpers/jest/matchers/toSucceed/predicate.js +0 -5
- package/dist/test/helpers/jest/matchers/toSucceedAndMatchInlineSnapshot/index.js +0 -24
- package/dist/test/helpers/jest/matchers/toSucceedAndMatchSnapshot/index.js +0 -24
- package/dist/test/helpers/jest/matchers/toSucceedAndSatisfy/index.js +0 -53
- package/dist/test/helpers/jest/matchers/toSucceedAndSatisfy/predicate.js +0 -17
- package/dist/test/helpers/jest/matchers/toSucceedWith/index.js +0 -27
- package/dist/test/helpers/jest/matchers/toSucceedWith/predicate.js +0 -12
- package/dist/test/helpers/jest/matchers/toSucceedWithDetail/index.js +0 -27
- package/dist/test/helpers/jest/matchers/toSucceedWithDetail/predicate.js +0 -17
- package/dist/test/helpers/jest/resolvers/cli.js +0 -10
- package/dist/test/helpers/jest/resolvers/ide.js +0 -10
- package/dist/test/helpers/jest/ts-utils.js +0 -2
- package/dist/test/helpers/jest/types/index.js +0 -3
- package/dist/test/helpers/jest/utils/matcherHelpers.js +0 -47
- package/dist/test/helpers/jest/utils/snapshotResolver.js +0 -11
- package/dist/test/unit/collections/helpers.js +0 -106
- package/dist/test/unit/hashTextEncodeCompat.js +0 -23
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/packlets/logging/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,2CAAyB;AACzB,gDAA8B;AAC9B,gDAA8B;AAC9B,oDAAkC","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport * from './bootLogger';\nexport * from './logger';\nexport * from './logReporter';\nexport * from './multiLogger';\nexport * from './retainingLogger';\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logReporter.d.ts","sourceRoot":"","sources":["../../../src/packlets/logging/logReporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logReporter.js","sourceRoot":"","sources":["../../../src/packlets/logging/logReporter.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport {\n IDetailLogger,\n ILogger,\n isDetailLogger,\n ReporterLogLevel,\n NoOpLogger,\n stringifyLogValue\n} from './logger';\nimport { captureResult, ErrorFormatter, IResultReporter, MessageLogLevel, Result, Success } from '../base';\n\n/**\n * A function that formats a value for logging.\n * @public\n */\nexport type LogValueFormatter<T, TD = unknown> = (value: T, detail?: TD) => string;\n\n/**\n * A function that formats a message for logging.\n * @public\n */\nexport type LogMessageFormatter<TD = unknown> = (message: string, detail?: TD) => string;\n\n/**\n * Parameters for creating a {@link Logging.LogReporter | LogReporter}.\n * @public\n */\nexport interface ILogReporterCreateParams<T, TD = unknown> {\n logger?: ILogger;\n valueFormatter?: LogValueFormatter<T, TD>;\n messageFormatter?: LogMessageFormatter<TD>;\n}\n\n/**\n * Abstract base class which wraps an existing {@link Logging.ILogger | ILogger} to implement\n * both {@link Logging.ILogger | ILogger} and {@link IResultReporter | IResultReporter}.\n * @public\n */\nexport class LogReporter<T, TD = unknown> implements IDetailLogger, IResultReporter<T, TD> {\n /**\n * Base logger used to by this reporter.\n * @public\n */\n public readonly logger: ILogger;\n\n /**\n * The formatter to use for values.\n * @internal\n */\n protected readonly _valueFormatter: LogValueFormatter<T, TD>;\n\n /**\n * The formatter to use for messages.\n * @internal\n */\n protected readonly _messageFormatter: LogMessageFormatter<TD>;\n\n /**\n * Creates a new {@link Logging.LogReporter | LogReporter}.\n * @param params - The parameters for creating the {@link Logging.LogReporter | LogReporter}.\n */\n public constructor(params?: ILogReporterCreateParams<T, TD>) {\n /* c8 ignore next 1 */\n params = params ?? {};\n this.logger = params.logger ?? new NoOpLogger();\n this._valueFormatter = params.valueFormatter ?? LogReporter.tryFormatObject;\n this._messageFormatter = params.messageFormatter ?? ((message, __detail) => message);\n }\n\n /**\n * Creates a default {@link Logging.LogReporter | LogReporter} with a {@link Logging.NoOpLogger | NoOpLogger} with the\n * supplied parameters, returning both the logger and reporter.\n * @param logger - Optional logger to use; defaults to a new {@link Logging.NoOpLogger | NoOpLogger} if not provided.\n * @returns\n */\n public static createDefault(logger?: ILogger): Result<LogReporter<unknown>> {\n logger = logger ?? new NoOpLogger();\n return captureResult(() => new LogReporter<unknown>({ logger }));\n }\n\n /**\n * {@inheritDoc Logging.ILogger.logLevel}\n */\n public get logLevel(): ReporterLogLevel {\n return this.logger.logLevel;\n }\n\n /**\n * {@inheritDoc Logging.ILogger.detail}\n */\n public detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.logger.detail(message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.info}\n */\n public info(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.logger.info(message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.warn}\n */\n public warn(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.logger.warn(message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.error}\n */\n public error(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.logger.error(message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.IDetailLogger.errorWithDetail}\n */\n public errorWithDetail(message: string, detail: unknown): Success<string | undefined> {\n if (isDetailLogger(this.logger)) {\n return this.logger.errorWithDetail(message, detail);\n }\n this.logger.detail(detail);\n return this.logger.error(message);\n }\n\n /**\n * {@inheritDoc Logging.IDetailLogger.warnWithDetail}\n */\n public warnWithDetail(message: string, detail: unknown): Success<string | undefined> {\n if (isDetailLogger(this.logger)) {\n return this.logger.warnWithDetail(message, detail);\n }\n this.logger.detail(detail);\n return this.logger.warn(message);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.log}\n */\n public log(\n level: MessageLogLevel,\n message?: unknown,\n ...parameters: unknown[]\n ): Success<string | undefined> {\n return this.logger.log(level, message, ...parameters);\n }\n\n /**\n * {@inheritDoc IResultReporter.reportSuccess}\n */\n public reportSuccess(level: MessageLogLevel, value: T, detail?: TD, message?: ErrorFormatter<TD>): void {\n const formattedValue = this._valueFormatter(value, detail);\n const formatted = message ? message(formattedValue, detail) : formattedValue;\n this.log(level, formatted);\n }\n\n /**\n * {@inheritDoc IResultReporter.reportFailure}\n */\n public reportFailure(level: MessageLogLevel, message: string, detail?: TD): void {\n const formatted = this._messageFormatter(message, detail);\n this.log(level, formatted);\n }\n\n /**\n * Creates a new {@link Logging.LogReporter | LogReporter} with the same logger but a different value formatter.\n * @param valueFormatter - The value formatter to use.\n * @returns A new {@link Logging.LogReporter | LogReporter} with the same logger but a different value formatter.\n */\n public withValueFormatter<TN>(valueFormatter: LogValueFormatter<TN, TD>): LogReporter<TN, TD> {\n return new LogReporter<TN, TD>({\n logger: this.logger,\n valueFormatter,\n messageFormatter: this._messageFormatter\n });\n }\n\n /**\n * Generic method to try to format an object for logging.\n * @param value - The value to format.\n * @param detail - The detail to format.\n * @returns\n */\n public static tryFormatObject<T = unknown, TD = unknown>(value: T, detail?: TD): string {\n return stringifyLogValue(value);\n }\n}\n"]}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { MessageLogLevel, Success } from '../base';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* @public
|
|
5
|
-
*/
|
|
6
|
-
export type ReporterLogLevel = 'all' | 'detail' | 'info' | 'warning' | 'error' | 'silent';
|
|
2
|
+
import { IDetailLogger, ILogger, ReporterLogLevel, allReporterLogLevels, isDetailLogger, reporterLogLevel } from '../logging-interface';
|
|
3
|
+
export { isDetailLogger, ReporterLogLevel, ILogger, IDetailLogger, allReporterLogLevels, reporterLogLevel };
|
|
7
4
|
/**
|
|
8
5
|
* Compares two log levels.
|
|
9
6
|
* @param message - The first log level.
|
|
@@ -21,23 +18,15 @@ export declare function shouldLog(message: MessageLogLevel, reporter: ReporterLo
|
|
|
21
18
|
*/
|
|
22
19
|
export declare function stringifyLogValue(value: unknown, maxLength?: number): string;
|
|
23
20
|
/**
|
|
24
|
-
*
|
|
21
|
+
* Abstract base class which implements {@link Logging.IDetailLogger | IDetailLogger}.
|
|
25
22
|
* @public
|
|
26
23
|
*/
|
|
27
|
-
export
|
|
24
|
+
export declare abstract class LoggerBase implements IDetailLogger {
|
|
28
25
|
/**
|
|
29
26
|
* The level of logging to be used.
|
|
30
27
|
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
* Logs a message at the given level.
|
|
34
|
-
* @param level - The level of the message.
|
|
35
|
-
* @param message - The message to log.
|
|
36
|
-
* @param parameters - The parameters to log.
|
|
37
|
-
* @returns `Success` with the logged message if the level is enabled, or
|
|
38
|
-
* `Success` with `undefined` if the message is suppressed.
|
|
39
|
-
*/
|
|
40
|
-
log(level: MessageLogLevel, message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
28
|
+
logLevel: ReporterLogLevel;
|
|
29
|
+
protected constructor(logLevel?: ReporterLogLevel);
|
|
41
30
|
/**
|
|
42
31
|
* Logs a detail message.
|
|
43
32
|
* @param message - The message to log.
|
|
@@ -70,16 +59,6 @@ export interface ILogger {
|
|
|
70
59
|
* `Success` with `undefined` if the message is suppressed.
|
|
71
60
|
*/
|
|
72
61
|
error(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Extended logger interface that supports logging a short summary message at a
|
|
76
|
-
* primary level (error/warn) while emitting the full detail at `detail` level.
|
|
77
|
-
*
|
|
78
|
-
* The detail is suppressed by default (requires log level `'detail'` or `'all'`),
|
|
79
|
-
* keeping the primary log clean while preserving the full context for debugging.
|
|
80
|
-
* @public
|
|
81
|
-
*/
|
|
82
|
-
export interface IDetailLogger extends ILogger {
|
|
83
62
|
/**
|
|
84
63
|
* Logs a short error summary at `error` level, then emits `detail` at `detail` level.
|
|
85
64
|
* @param message - Short human-readable summary.
|
|
@@ -92,50 +71,13 @@ export interface IDetailLogger extends ILogger {
|
|
|
92
71
|
* @param detail - Full detail logged at `detail` level.
|
|
93
72
|
*/
|
|
94
73
|
warnWithDetail(message: string, detail: unknown): Success<string | undefined>;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Type guard that checks whether a logger implements {@link IDetailLogger}.
|
|
98
|
-
* @param logger - The logger to check.
|
|
99
|
-
* @returns `true` if the logger implements `IDetailLogger`.
|
|
100
|
-
* @public
|
|
101
|
-
*/
|
|
102
|
-
export declare function isDetailLogger(logger: ILogger): logger is IDetailLogger;
|
|
103
|
-
/**
|
|
104
|
-
* Abstract base class which implements {@link Logging.IDetailLogger | IDetailLogger}.
|
|
105
|
-
* @public
|
|
106
|
-
*/
|
|
107
|
-
export declare abstract class LoggerBase implements IDetailLogger {
|
|
108
|
-
/**
|
|
109
|
-
* {@inheritDoc Logging.ILogger.logLevel}
|
|
110
|
-
*/
|
|
111
|
-
logLevel: ReporterLogLevel;
|
|
112
|
-
protected constructor(logLevel?: ReporterLogLevel);
|
|
113
|
-
/**
|
|
114
|
-
* {@inheritDoc Logging.ILogger.detail}
|
|
115
|
-
*/
|
|
116
|
-
detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
117
|
-
/**
|
|
118
|
-
* {@inheritDoc Logging.ILogger.info}
|
|
119
|
-
*/
|
|
120
|
-
info(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
121
|
-
/**
|
|
122
|
-
* {@inheritDoc Logging.ILogger.warn}
|
|
123
|
-
*/
|
|
124
|
-
warn(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
125
|
-
/**
|
|
126
|
-
* {@inheritDoc Logging.ILogger.error}
|
|
127
|
-
*/
|
|
128
|
-
error(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
129
|
-
/**
|
|
130
|
-
* {@inheritDoc Logging.IDetailLogger.errorWithDetail}
|
|
131
|
-
*/
|
|
132
|
-
errorWithDetail(message: string, detail: unknown): Success<string | undefined>;
|
|
133
|
-
/**
|
|
134
|
-
* {@inheritDoc Logging.IDetailLogger.warnWithDetail}
|
|
135
|
-
*/
|
|
136
|
-
warnWithDetail(message: string, detail: unknown): Success<string | undefined>;
|
|
137
74
|
/**
|
|
138
|
-
*
|
|
75
|
+
* Logs a message at the given level.
|
|
76
|
+
* @param level - The level of the message.
|
|
77
|
+
* @param message - The message to log.
|
|
78
|
+
* @param parameters - The parameters to log.
|
|
79
|
+
* @returns `Success` with the logged message if the level is enabled, or
|
|
80
|
+
* `Success` with `undefined` if the message is suppressed.
|
|
139
81
|
*/
|
|
140
82
|
log(level: MessageLogLevel, message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
141
83
|
/**
|
|
@@ -146,6 +88,19 @@ export declare abstract class LoggerBase implements IDetailLogger {
|
|
|
146
88
|
* @public
|
|
147
89
|
*/
|
|
148
90
|
protected _format(message?: unknown, ...parameters: unknown[]): string;
|
|
91
|
+
/**
|
|
92
|
+
* Inner hook called for logged messages alongside {@link Logging.LoggerBase._log | _log},
|
|
93
|
+
* exposing the structured `(level, formatted, message, parameters)` form before it is
|
|
94
|
+
* collapsed to the formatted string. The default implementation is a no-op; subclasses
|
|
95
|
+
* that need to retain structured records (e.g. {@link Logging.RetainingLogger | RetainingLogger})
|
|
96
|
+
* override this. Fired only in the `shouldLog` branch, so suppressed messages never reach it.
|
|
97
|
+
* @param __level - The {@link MessageLogLevel | level} of the message.
|
|
98
|
+
* @param __formatted - The formatted message (same string passed to `_log`).
|
|
99
|
+
* @param __message - The raw message argument before formatting.
|
|
100
|
+
* @param __parameters - The raw parameter arguments before formatting.
|
|
101
|
+
* @public
|
|
102
|
+
*/
|
|
103
|
+
protected _logStructured(__level: MessageLogLevel, __formatted: string, __message?: unknown, __parameters?: readonly unknown[]): void;
|
|
149
104
|
/**
|
|
150
105
|
* Inner method called for suppressed log messages.
|
|
151
106
|
* @public
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/packlets/logging/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NoOpLogger = exports.ConsoleLogger = exports.InMemoryLogger = exports.LoggerBase = void 0;
|
|
3
|
+
exports.NoOpLogger = exports.ConsoleLogger = exports.InMemoryLogger = exports.LoggerBase = exports.reporterLogLevel = exports.allReporterLogLevels = exports.isDetailLogger = void 0;
|
|
4
4
|
exports.shouldLog = shouldLog;
|
|
5
5
|
exports.stringifyLogValue = stringifyLogValue;
|
|
6
|
-
exports.isDetailLogger = isDetailLogger;
|
|
7
6
|
/*
|
|
8
7
|
* Copyright (c) 2020 Erik Fortune
|
|
9
8
|
*
|
|
@@ -26,6 +25,10 @@ exports.isDetailLogger = isDetailLogger;
|
|
|
26
25
|
* SOFTWARE.
|
|
27
26
|
*/
|
|
28
27
|
const base_1 = require("../base");
|
|
28
|
+
const logging_interface_1 = require("../logging-interface");
|
|
29
|
+
Object.defineProperty(exports, "allReporterLogLevels", { enumerable: true, get: function () { return logging_interface_1.allReporterLogLevels; } });
|
|
30
|
+
Object.defineProperty(exports, "isDetailLogger", { enumerable: true, get: function () { return logging_interface_1.isDetailLogger; } });
|
|
31
|
+
Object.defineProperty(exports, "reporterLogLevel", { enumerable: true, get: function () { return logging_interface_1.reporterLogLevel; } });
|
|
29
32
|
/**
|
|
30
33
|
* Compares two log levels.
|
|
31
34
|
* @param message - The first log level.
|
|
@@ -75,16 +78,6 @@ function stringifyLogValue(value, maxLength) {
|
|
|
75
78
|
}
|
|
76
79
|
return str;
|
|
77
80
|
}
|
|
78
|
-
/**
|
|
79
|
-
* Type guard that checks whether a logger implements {@link IDetailLogger}.
|
|
80
|
-
* @param logger - The logger to check.
|
|
81
|
-
* @returns `true` if the logger implements `IDetailLogger`.
|
|
82
|
-
* @public
|
|
83
|
-
*/
|
|
84
|
-
function isDetailLogger(logger) {
|
|
85
|
-
return (typeof logger.errorWithDetail === 'function' &&
|
|
86
|
-
typeof logger.warnWithDetail === 'function');
|
|
87
|
-
}
|
|
88
81
|
/**
|
|
89
82
|
* Abstract base class which implements {@link Logging.IDetailLogger | IDetailLogger}.
|
|
90
83
|
* @public
|
|
@@ -92,55 +85,81 @@ function isDetailLogger(logger) {
|
|
|
92
85
|
class LoggerBase {
|
|
93
86
|
constructor(logLevel) {
|
|
94
87
|
/**
|
|
95
|
-
*
|
|
88
|
+
* The level of logging to be used.
|
|
96
89
|
*/
|
|
97
90
|
this.logLevel = 'info';
|
|
98
91
|
this.logLevel = logLevel !== null && logLevel !== void 0 ? logLevel : 'info';
|
|
99
92
|
}
|
|
100
93
|
/**
|
|
101
|
-
*
|
|
94
|
+
* Logs a detail message.
|
|
95
|
+
* @param message - The message to log.
|
|
96
|
+
* @param parameters - The parameters to log.
|
|
97
|
+
* @returns `Success` with the logged message if the level is enabled, or
|
|
98
|
+
* `Success` with `undefined` if the message is suppressed.
|
|
102
99
|
*/
|
|
103
100
|
detail(message, ...parameters) {
|
|
104
101
|
return this.log('detail', message, ...parameters);
|
|
105
102
|
}
|
|
106
103
|
/**
|
|
107
|
-
*
|
|
104
|
+
* Logs an info message.
|
|
105
|
+
* @param message - The message to log.
|
|
106
|
+
* @param parameters - The parameters to log.
|
|
107
|
+
* @returns `Success` with the logged message if the level is enabled, or
|
|
108
|
+
* `Success` with `undefined` if the message is suppressed.
|
|
108
109
|
*/
|
|
109
110
|
info(message, ...parameters) {
|
|
110
111
|
return this.log('info', message, ...parameters);
|
|
111
112
|
}
|
|
112
113
|
/**
|
|
113
|
-
*
|
|
114
|
+
* Logs a warning message.
|
|
115
|
+
* @param message - The message to log.
|
|
116
|
+
* @param parameters - The parameters to log.
|
|
117
|
+
* @returns `Success` with the logged message if the level is enabled, or
|
|
118
|
+
* `Success` with `undefined` if the message is suppressed.
|
|
114
119
|
*/
|
|
115
120
|
warn(message, ...parameters) {
|
|
116
121
|
return this.log('warning', message, ...parameters);
|
|
117
122
|
}
|
|
118
123
|
/**
|
|
119
|
-
*
|
|
124
|
+
* Logs an error message.
|
|
125
|
+
* @param message - The message to log.
|
|
126
|
+
* @param parameters - The parameters to log.
|
|
127
|
+
* @returns `Success` with the logged message if the level is enabled, or
|
|
128
|
+
* `Success` with `undefined` if the message is suppressed.
|
|
120
129
|
*/
|
|
121
130
|
error(message, ...parameters) {
|
|
122
131
|
return this.log('error', message, ...parameters);
|
|
123
132
|
}
|
|
124
133
|
/**
|
|
125
|
-
*
|
|
134
|
+
* Logs a short error summary at `error` level, then emits `detail` at `detail` level.
|
|
135
|
+
* @param message - Short human-readable summary.
|
|
136
|
+
* @param detail - Full detail (e.g. raw converter error) logged at `detail` level.
|
|
126
137
|
*/
|
|
127
138
|
errorWithDetail(message, detail) {
|
|
128
139
|
this.detail(detail);
|
|
129
140
|
return this.error(message);
|
|
130
141
|
}
|
|
131
142
|
/**
|
|
132
|
-
*
|
|
143
|
+
* Logs a short warning summary at `warning` level, then emits `detail` at `detail` level.
|
|
144
|
+
* @param message - Short human-readable summary.
|
|
145
|
+
* @param detail - Full detail logged at `detail` level.
|
|
133
146
|
*/
|
|
134
147
|
warnWithDetail(message, detail) {
|
|
135
148
|
this.detail(detail);
|
|
136
149
|
return this.warn(message);
|
|
137
150
|
}
|
|
138
151
|
/**
|
|
139
|
-
*
|
|
152
|
+
* Logs a message at the given level.
|
|
153
|
+
* @param level - The level of the message.
|
|
154
|
+
* @param message - The message to log.
|
|
155
|
+
* @param parameters - The parameters to log.
|
|
156
|
+
* @returns `Success` with the logged message if the level is enabled, or
|
|
157
|
+
* `Success` with `undefined` if the message is suppressed.
|
|
140
158
|
*/
|
|
141
159
|
log(level, message, ...parameters) {
|
|
142
160
|
if (shouldLog(level, this.logLevel)) {
|
|
143
161
|
const formatted = this._format(message, ...parameters);
|
|
162
|
+
this._logStructured(level, formatted, message, parameters);
|
|
144
163
|
return this._log(formatted, level);
|
|
145
164
|
}
|
|
146
165
|
return this._suppressLog(level, message, ...parameters);
|
|
@@ -159,6 +178,21 @@ class LoggerBase {
|
|
|
159
178
|
const joined = strings.join('');
|
|
160
179
|
return joined;
|
|
161
180
|
}
|
|
181
|
+
/**
|
|
182
|
+
* Inner hook called for logged messages alongside {@link Logging.LoggerBase._log | _log},
|
|
183
|
+
* exposing the structured `(level, formatted, message, parameters)` form before it is
|
|
184
|
+
* collapsed to the formatted string. The default implementation is a no-op; subclasses
|
|
185
|
+
* that need to retain structured records (e.g. {@link Logging.RetainingLogger | RetainingLogger})
|
|
186
|
+
* override this. Fired only in the `shouldLog` branch, so suppressed messages never reach it.
|
|
187
|
+
* @param __level - The {@link MessageLogLevel | level} of the message.
|
|
188
|
+
* @param __formatted - The formatted message (same string passed to `_log`).
|
|
189
|
+
* @param __message - The raw message argument before formatting.
|
|
190
|
+
* @param __parameters - The raw parameter arguments before formatting.
|
|
191
|
+
* @public
|
|
192
|
+
*/
|
|
193
|
+
_logStructured(__level, __formatted, __message, __parameters) {
|
|
194
|
+
/* no-op; subclasses that retain structured records override this */
|
|
195
|
+
}
|
|
162
196
|
/**
|
|
163
197
|
* Inner method called for suppressed log messages.
|
|
164
198
|
* @public
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/packlets/logging/logger.ts"],"names":[],"mappings":";;;AAwCA,8BAmBC;AASD,8CAcC;AAlFD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,kCAA2E;AAC3E,4DAO8B;AAEqC,qGALjE,wCAAoB,OAKiE;AAA9E,+FAJP,kCAAc,OAIO;AAAkE,iGAHvF,oCAAgB,OAGuF;AAEzG;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,OAAwB,EAAE,QAA0B;IAC5E,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,CAAC,2CAA2C;IAC1D,CAAC;IACD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,CAAC,iCAAiC;IACjD,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC,CAAC,oDAAoD;IACpE,CAAC;IACD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,OAAO,KAAK,OAAO,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO,CAAC;QACtD,KAAK,MAAM;YACT,OAAO,OAAO,KAAK,QAAQ,CAAC;IAChC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAAC,KAAc,EAAE,SAAkB;IAClE,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,IAAI,GAAG,KAAK,iBAAiB,EAAE,CAAC;QAC9B,OAAO,IAAA,oBAAa,EAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;aAC9C,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;YACf,OAAO,IAAA,cAAO,EAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QACnF,CAAC,CAAC;aACD,SAAS,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAsB,UAAU;IAM9B,YAAsB,QAA2B;QALjD;;WAEG;QACI,aAAQ,GAAqB,MAAM,CAAC;QAGzC,IAAI,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,MAAM,CAAC;IACrC,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACpD,CAAC;IAED;;;;;;OAMG;IACI,IAAI,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;OAMG;IACI,IAAI,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,OAAe,EAAE,MAAe;QACrD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAe,EAAE,MAAe;QACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;;OAOG;IACI,GAAG,CACR,KAAsB,EACtB,OAAiB,EACjB,GAAG,UAAqB;QAExB,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;YACvD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED;;;;;;OAMG;IACO,OAAO,CAAC,OAAiB,EAAE,GAAG,UAAqB;QAC3D,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACjE,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;OAWG;IACO,cAAc,CACtB,OAAwB,EACxB,WAAmB,EACnB,SAAmB,EACnB,YAAiC;QAEjC,oEAAoE;IACtE,CAAC;IAED;;;OAGG;IACO,YAAY,CACpB,OAAwB,EACxB,SAAmB,EACnB,GAAG,YAAuB;QAE1B,OAAO,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;CAUF;AAvJD,gCAuJC;AAED;;;GAGG;AACH,MAAa,cAAe,SAAQ,UAAU;IAa5C;;;OAGG;IACH,YAAmB,QAA2B;QAC5C,KAAK,CAAC,QAAQ,CAAC,CAAC;QAjBlB;;;WAGG;QACK,YAAO,GAAa,EAAE,CAAC;QAE/B;;;WAGG;QACK,gBAAW,GAAa,EAAE,CAAC;IAQnC,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAED;;;OAGG;IACO,IAAI,CAAC,OAAe,EAAE,OAAwB;QACtD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACO,YAAY,CACpB,KAAsB,EACtB,OAAiB,EACjB,GAAG,UAAqB;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,IAAA,cAAO,EAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;CACF;AAjED,wCAiEC;AAED;;;GAGG;AACH,MAAa,aAAc,SAAQ,UAAU;IAC3C;;;OAGG;IACH,YAAmB,QAA2B;QAC5C,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IAED;;;OAGG;IACO,IAAI,CAAC,OAAe,EAAE,KAAsB;QACpD,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,OAAO;gBACV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM;YACR;gBACE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrB,MAAM;QACV,CAAC;QACD,OAAO,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AA9BD,sCA8BC;AAED;;;GAGG;AACH,MAAa,UAAW,SAAQ,UAAU;IACxC;;;OAGG;IACH,YAAmB,QAA2B;QAC5C,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IAED;;;OAGG;IACO,IAAI,CAAC,OAAe,EAAE,OAAwB;QACtD,QAAQ;QACR,OAAO,IAAA,cAAO,EAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAjBD,gCAiBC","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { MessageLogLevel, Success, captureResult, succeed } from '../base';\nimport {\n IDetailLogger,\n ILogger,\n ReporterLogLevel,\n allReporterLogLevels,\n isDetailLogger,\n reporterLogLevel\n} from '../logging-interface';\n\nexport { isDetailLogger, ReporterLogLevel, ILogger, IDetailLogger, allReporterLogLevels, reporterLogLevel };\n\n/**\n * Compares two log levels.\n * @param message - The first log level.\n * @param reporter - The second log level.\n * @returns `true` if the message should be logged, `false` if it should be suppressed.\n * @public\n */\nexport function shouldLog(message: MessageLogLevel, reporter: ReporterLogLevel): boolean {\n if (reporter === 'all') {\n return true; // 'all' logs everything, including 'quiet'\n }\n if (reporter === 'silent') {\n return false; // 'silent' suppresses everything\n }\n if (message === 'quiet') {\n return false; // 'quiet' messages only show when reporter is 'all'\n }\n switch (reporter) {\n case 'error':\n return message === 'error';\n case 'warning':\n return message === 'warning' || message === 'error';\n case 'info':\n return message !== 'detail';\n }\n return true;\n}\n\n/**\n * Stringifies an arbitrary value for logging.\n * @param value - The value to stringify.\n * @returns The stringified value.\n * @param maxLength - The maximum length of the stringified value.\n * @public\n */\nexport function stringifyLogValue(value: unknown, maxLength?: number): string {\n maxLength = maxLength ?? 40;\n if (typeof value === 'string') {\n return value;\n }\n const str = String(value);\n if (str === '[object Object]') {\n return captureResult(() => JSON.stringify(value))\n .onSuccess((s) => {\n return succeed(s.length < maxLength ? s : s.substring(0, maxLength - 3) + '...');\n })\n .orDefault(str);\n }\n return str;\n}\n\n/**\n * Abstract base class which implements {@link Logging.IDetailLogger | IDetailLogger}.\n * @public\n */\nexport abstract class LoggerBase implements IDetailLogger {\n /**\n * The level of logging to be used.\n */\n public logLevel: ReporterLogLevel = 'info';\n\n protected constructor(logLevel?: ReporterLogLevel) {\n this.logLevel = logLevel ?? 'info';\n }\n\n /**\n * Logs a detail message.\n * @param message - The message to log.\n * @param parameters - The parameters to log.\n * @returns `Success` with the logged message if the level is enabled, or\n * `Success` with `undefined` if the message is suppressed.\n */\n public detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('detail', message, ...parameters);\n }\n\n /**\n * Logs an info message.\n * @param message - The message to log.\n * @param parameters - The parameters to log.\n * @returns `Success` with the logged message if the level is enabled, or\n * `Success` with `undefined` if the message is suppressed.\n */\n public info(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('info', message, ...parameters);\n }\n\n /**\n * Logs a warning message.\n * @param message - The message to log.\n * @param parameters - The parameters to log.\n * @returns `Success` with the logged message if the level is enabled, or\n * `Success` with `undefined` if the message is suppressed.\n */\n public warn(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('warning', message, ...parameters);\n }\n\n /**\n * Logs an error message.\n * @param message - The message to log.\n * @param parameters - The parameters to log.\n * @returns `Success` with the logged message if the level is enabled, or\n * `Success` with `undefined` if the message is suppressed.\n */\n public error(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('error', message, ...parameters);\n }\n\n /**\n * Logs a short error summary at `error` level, then emits `detail` at `detail` level.\n * @param message - Short human-readable summary.\n * @param detail - Full detail (e.g. raw converter error) logged at `detail` level.\n */\n public errorWithDetail(message: string, detail: unknown): Success<string | undefined> {\n this.detail(detail);\n return this.error(message);\n }\n\n /**\n * Logs a short warning summary at `warning` level, then emits `detail` at `detail` level.\n * @param message - Short human-readable summary.\n * @param detail - Full detail logged at `detail` level.\n */\n public warnWithDetail(message: string, detail: unknown): Success<string | undefined> {\n this.detail(detail);\n return this.warn(message);\n }\n\n /**\n * Logs a message at the given level.\n * @param level - The level of the message.\n * @param message - The message to log.\n * @param parameters - The parameters to log.\n * @returns `Success` with the logged message if the level is enabled, or\n * `Success` with `undefined` if the message is suppressed.\n */\n public log(\n level: MessageLogLevel,\n message?: unknown,\n ...parameters: unknown[]\n ): Success<string | undefined> {\n if (shouldLog(level, this.logLevel)) {\n const formatted = this._format(message, ...parameters);\n this._logStructured(level, formatted, message, parameters);\n return this._log(formatted, level);\n }\n return this._suppressLog(level, message, ...parameters);\n }\n\n /**\n * Formats a message and parameters into a string.\n * @param message - The message to format.\n * @param parameters - The parameters to format.\n * @returns The formatted message.\n * @public\n */\n protected _format(message?: unknown, ...parameters: unknown[]): string {\n const raw = [message, ...parameters];\n const filtered = raw.filter((m): m is string => m !== undefined);\n const strings = filtered.map((m) => stringifyLogValue(m));\n const joined = strings.join('');\n return joined;\n }\n\n /**\n * Inner hook called for logged messages alongside {@link Logging.LoggerBase._log | _log},\n * exposing the structured `(level, formatted, message, parameters)` form before it is\n * collapsed to the formatted string. The default implementation is a no-op; subclasses\n * that need to retain structured records (e.g. {@link Logging.RetainingLogger | RetainingLogger})\n * override this. Fired only in the `shouldLog` branch, so suppressed messages never reach it.\n * @param __level - The {@link MessageLogLevel | level} of the message.\n * @param __formatted - The formatted message (same string passed to `_log`).\n * @param __message - The raw message argument before formatting.\n * @param __parameters - The raw parameter arguments before formatting.\n * @public\n */\n protected _logStructured(\n __level: MessageLogLevel,\n __formatted: string,\n __message?: unknown,\n __parameters?: readonly unknown[]\n ): void {\n /* no-op; subclasses that retain structured records override this */\n }\n\n /**\n * Inner method called for suppressed log messages.\n * @public\n */\n protected _suppressLog(\n __level: MessageLogLevel,\n __message?: unknown,\n ...__parameters: unknown[]\n ): Success<undefined> {\n return succeed(undefined);\n }\n\n /**\n * Inner method called for logged messages. Should be implemented by derived classes.\n * @param message - The message to log.\n * @param level - The {@link MessageLogLevel | level} of the message.\n * @returns `Success` with the logged message, or `Success` with `undefined` if the message is suppressed.\n * @public\n */\n protected abstract _log(message: string, level: MessageLogLevel): Success<string | undefined>;\n}\n\n/**\n * An in-memory logger that stores logged and suppressed messages.\n * @public\n */\nexport class InMemoryLogger extends LoggerBase {\n /**\n * The messages that have been logged.\n * @internal\n */\n private _logged: string[] = [];\n\n /**\n * The messages that have been suppressed.\n * @internal\n */\n private _suppressed: string[] = [];\n\n /**\n * Creates a new in-memory logger.\n * @param logLevel - The level of logging to be used.\n */\n public constructor(logLevel?: ReporterLogLevel) {\n super(logLevel);\n }\n\n /**\n * The messages that have been logged.\n */\n public get logged(): string[] {\n return this._logged;\n }\n\n /**\n * The messages that have been suppressed.\n */\n public get suppressed(): string[] {\n return this._suppressed;\n }\n\n /**\n * Clears the logged and suppressed messages.\n */\n public clear(): void {\n this._logged = [];\n this._suppressed = [];\n }\n\n /**\n * {@inheritDoc Logging.LoggerBase._log}\n * @internal\n */\n protected _log(message: string, __level: MessageLogLevel): Success<string | undefined> {\n this._logged.push(message);\n return succeed(message);\n }\n\n /**\n * {@inheritDoc Logging.LoggerBase._suppressLog}\n * @internal\n */\n protected _suppressLog(\n level: MessageLogLevel,\n message?: unknown,\n ...parameters: unknown[]\n ): Success<undefined> {\n const formatted = this._format(message, ...parameters);\n this._suppressed.push(formatted);\n return succeed(undefined);\n }\n}\n\n/**\n * A console logger that outputs messages to the console.\n * @public\n */\nexport class ConsoleLogger extends LoggerBase {\n /**\n * Creates a new console logger.\n * @param logLevel - The level of logging to be used.\n */\n public constructor(logLevel?: ReporterLogLevel) {\n super(logLevel);\n }\n\n /**\n * {@inheritDoc Logging.LoggerBase._log}\n * @internal\n */\n protected _log(message: string, level: MessageLogLevel): Success<string | undefined> {\n switch (level) {\n case 'error':\n console.error(message);\n break;\n case 'warning':\n console.warn(message);\n break;\n case 'info':\n console.info(message);\n break;\n default:\n console.log(message);\n break;\n }\n return succeed(message);\n }\n}\n\n/**\n * A no-op {@link Logging.LoggerBase | LoggerBase} that does not log anything.\n * @public\n */\nexport class NoOpLogger extends LoggerBase {\n /**\n * Creates a new no-op logger.\n * @param logLevel - The level of logging to be used.\n */\n public constructor(logLevel?: ReporterLogLevel) {\n super(logLevel);\n }\n\n /**\n * {@inheritDoc Logging.LoggerBase._log}\n * @internal\n */\n protected _log(message: string, __level: MessageLogLevel): Success<string | undefined> {\n // no-op\n return succeed(message);\n }\n}\n"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { MessageLogLevel, Success } from '../base';
|
|
2
|
+
import { ILogger, ReporterLogLevel } from './logger';
|
|
3
|
+
/**
|
|
4
|
+
* An {@link Logging.ILogger | ILogger} that fans every log call out to N child loggers,
|
|
5
|
+
* each applying its own threshold.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* The composite does not pre-filter — it forwards the raw `(level, message, ...params)`
|
|
9
|
+
* to each child's public method so each child formats and filters per its own rules.
|
|
10
|
+
* This lets a single pinned logger feed, for example, a {@link Logging.ConsoleLogger | ConsoleLogger}
|
|
11
|
+
* (stdout) and a {@link Logging.RetainingLogger | RetainingLogger} (observability buffer)
|
|
12
|
+
* with independent log levels.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare class MultiLogger implements ILogger {
|
|
17
|
+
/**
|
|
18
|
+
* The child loggers calls are fanned out to.
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
private readonly _loggers;
|
|
22
|
+
/**
|
|
23
|
+
* Creates a new multi logger.
|
|
24
|
+
* @param loggers - The child loggers to fan calls out to.
|
|
25
|
+
*/
|
|
26
|
+
constructor(loggers: ReadonlyArray<ILogger>);
|
|
27
|
+
/**
|
|
28
|
+
* The most-verbose (most-permissive) level among the children, so an upstream
|
|
29
|
+
* `shouldLog` gate does not suppress a call before it can fan out to a more
|
|
30
|
+
* permissive child. Computed on access, since a child's level may change.
|
|
31
|
+
*/
|
|
32
|
+
get logLevel(): ReporterLogLevel;
|
|
33
|
+
/**
|
|
34
|
+
* {@inheritDoc Logging.ILogger.log}
|
|
35
|
+
*/
|
|
36
|
+
log(level: MessageLogLevel, message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
37
|
+
/**
|
|
38
|
+
* {@inheritDoc Logging.ILogger.detail}
|
|
39
|
+
*/
|
|
40
|
+
detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
41
|
+
/**
|
|
42
|
+
* {@inheritDoc Logging.ILogger.info}
|
|
43
|
+
*/
|
|
44
|
+
info(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
45
|
+
/**
|
|
46
|
+
* {@inheritDoc Logging.ILogger.warn}
|
|
47
|
+
*/
|
|
48
|
+
warn(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
49
|
+
/**
|
|
50
|
+
* {@inheritDoc Logging.ILogger.error}
|
|
51
|
+
*/
|
|
52
|
+
error(message?: unknown, ...parameters: unknown[]): Success<string | undefined>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=multiLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiLogger.d.ts","sourceRoot":"","sources":["../../../src/packlets/logging/multiLogger.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,eAAe,EAAE,OAAO,EAAW,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAiBrD;;;;;;;;;;;;GAYG;AACH,qBAAa,WAAY,YAAW,OAAO;IACzC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAElD;;;OAGG;gBACgB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;IAIlD;;;;OAIG;IACH,IAAW,QAAQ,IAAI,gBAAgB,CAKtC;IAED;;OAEG;IACI,GAAG,CACR,KAAK,EAAE,eAAe,EACtB,OAAO,CAAC,EAAE,OAAO,EACjB,GAAG,UAAU,EAAE,OAAO,EAAE,GACvB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAW9B;;OAEG;IACI,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIvF;;OAEG;IACI,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIrF;;OAEG;IACI,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIrF;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAGvF"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MultiLogger = void 0;
|
|
4
|
+
/*
|
|
5
|
+
* Copyright (c) 2020 Erik Fortune
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
* SOFTWARE.
|
|
24
|
+
*/
|
|
25
|
+
const base_1 = require("../base");
|
|
26
|
+
/**
|
|
27
|
+
* Verbosity rank for each {@link Logging.ReporterLogLevel | ReporterLogLevel}, materializing
|
|
28
|
+
* the {@link Logging.shouldLog | shouldLog} ordering. A higher rank is more permissive
|
|
29
|
+
* (emits strictly more message levels).
|
|
30
|
+
* @internal
|
|
31
|
+
*/
|
|
32
|
+
const verbosityRank = {
|
|
33
|
+
silent: 0,
|
|
34
|
+
error: 1,
|
|
35
|
+
warning: 2,
|
|
36
|
+
info: 3,
|
|
37
|
+
detail: 4,
|
|
38
|
+
all: 5
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* An {@link Logging.ILogger | ILogger} that fans every log call out to N child loggers,
|
|
42
|
+
* each applying its own threshold.
|
|
43
|
+
*
|
|
44
|
+
* @remarks
|
|
45
|
+
* The composite does not pre-filter — it forwards the raw `(level, message, ...params)`
|
|
46
|
+
* to each child's public method so each child formats and filters per its own rules.
|
|
47
|
+
* This lets a single pinned logger feed, for example, a {@link Logging.ConsoleLogger | ConsoleLogger}
|
|
48
|
+
* (stdout) and a {@link Logging.RetainingLogger | RetainingLogger} (observability buffer)
|
|
49
|
+
* with independent log levels.
|
|
50
|
+
*
|
|
51
|
+
* @public
|
|
52
|
+
*/
|
|
53
|
+
class MultiLogger {
|
|
54
|
+
/**
|
|
55
|
+
* Creates a new multi logger.
|
|
56
|
+
* @param loggers - The child loggers to fan calls out to.
|
|
57
|
+
*/
|
|
58
|
+
constructor(loggers) {
|
|
59
|
+
this._loggers = [...loggers];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The most-verbose (most-permissive) level among the children, so an upstream
|
|
63
|
+
* `shouldLog` gate does not suppress a call before it can fan out to a more
|
|
64
|
+
* permissive child. Computed on access, since a child's level may change.
|
|
65
|
+
*/
|
|
66
|
+
get logLevel() {
|
|
67
|
+
return this._loggers.reduce((most, logger) => (verbosityRank[logger.logLevel] > verbosityRank[most] ? logger.logLevel : most), 'silent');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* {@inheritDoc Logging.ILogger.log}
|
|
71
|
+
*/
|
|
72
|
+
log(level, message, ...parameters) {
|
|
73
|
+
let logged;
|
|
74
|
+
for (const logger of this._loggers) {
|
|
75
|
+
const value = logger.log(level, message, ...parameters).value;
|
|
76
|
+
if (value !== undefined) {
|
|
77
|
+
logged = value;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return (0, base_1.succeed)(logged);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* {@inheritDoc Logging.ILogger.detail}
|
|
84
|
+
*/
|
|
85
|
+
detail(message, ...parameters) {
|
|
86
|
+
return this.log('detail', message, ...parameters);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* {@inheritDoc Logging.ILogger.info}
|
|
90
|
+
*/
|
|
91
|
+
info(message, ...parameters) {
|
|
92
|
+
return this.log('info', message, ...parameters);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* {@inheritDoc Logging.ILogger.warn}
|
|
96
|
+
*/
|
|
97
|
+
warn(message, ...parameters) {
|
|
98
|
+
return this.log('warning', message, ...parameters);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* {@inheritDoc Logging.ILogger.error}
|
|
102
|
+
*/
|
|
103
|
+
error(message, ...parameters) {
|
|
104
|
+
return this.log('error', message, ...parameters);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
exports.MultiLogger = MultiLogger;
|
|
108
|
+
//# sourceMappingURL=multiLogger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multiLogger.js","sourceRoot":"","sources":["../../../src/packlets/logging/multiLogger.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,kCAA4D;AAG5D;;;;;GAKG;AACH,MAAM,aAAa,GAAqC;IACtD,MAAM,EAAE,CAAC;IACT,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;IACP,MAAM,EAAE,CAAC;IACT,GAAG,EAAE,CAAC;CACP,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAa,WAAW;IAOtB;;;OAGG;IACH,YAAmB,OAA+B;QAChD,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EACjG,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,GAAG,CACR,KAAsB,EACtB,OAAiB,EACjB,GAAG,UAAqB;QAExB,IAAI,MAA0B,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC,KAAK,CAAC;YAC9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,GAAG,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,IAAA,cAAO,EAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACvD,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACrD,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAiB,EAAE,GAAG,UAAqB;QACtD,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,CAAC;IACnD,CAAC;CACF;AAxED,kCAwEC","sourcesContent":["/*\n * Copyright (c) 2020 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nimport { MessageLogLevel, Success, succeed } from '../base';\nimport { ILogger, ReporterLogLevel } from './logger';\n\n/**\n * Verbosity rank for each {@link Logging.ReporterLogLevel | ReporterLogLevel}, materializing\n * the {@link Logging.shouldLog | shouldLog} ordering. A higher rank is more permissive\n * (emits strictly more message levels).\n * @internal\n */\nconst verbosityRank: Record<ReporterLogLevel, number> = {\n silent: 0,\n error: 1,\n warning: 2,\n info: 3,\n detail: 4,\n all: 5\n};\n\n/**\n * An {@link Logging.ILogger | ILogger} that fans every log call out to N child loggers,\n * each applying its own threshold.\n *\n * @remarks\n * The composite does not pre-filter — it forwards the raw `(level, message, ...params)`\n * to each child's public method so each child formats and filters per its own rules.\n * This lets a single pinned logger feed, for example, a {@link Logging.ConsoleLogger | ConsoleLogger}\n * (stdout) and a {@link Logging.RetainingLogger | RetainingLogger} (observability buffer)\n * with independent log levels.\n *\n * @public\n */\nexport class MultiLogger implements ILogger {\n /**\n * The child loggers calls are fanned out to.\n * @internal\n */\n private readonly _loggers: ReadonlyArray<ILogger>;\n\n /**\n * Creates a new multi logger.\n * @param loggers - The child loggers to fan calls out to.\n */\n public constructor(loggers: ReadonlyArray<ILogger>) {\n this._loggers = [...loggers];\n }\n\n /**\n * The most-verbose (most-permissive) level among the children, so an upstream\n * `shouldLog` gate does not suppress a call before it can fan out to a more\n * permissive child. Computed on access, since a child's level may change.\n */\n public get logLevel(): ReporterLogLevel {\n return this._loggers.reduce<ReporterLogLevel>(\n (most, logger) => (verbosityRank[logger.logLevel] > verbosityRank[most] ? logger.logLevel : most),\n 'silent'\n );\n }\n\n /**\n * {@inheritDoc Logging.ILogger.log}\n */\n public log(\n level: MessageLogLevel,\n message?: unknown,\n ...parameters: unknown[]\n ): Success<string | undefined> {\n let logged: string | undefined;\n for (const logger of this._loggers) {\n const value = logger.log(level, message, ...parameters).value;\n if (value !== undefined) {\n logged = value;\n }\n }\n return succeed(logged);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.detail}\n */\n public detail(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('detail', message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.info}\n */\n public info(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('info', message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.warn}\n */\n public warn(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('warning', message, ...parameters);\n }\n\n /**\n * {@inheritDoc Logging.ILogger.error}\n */\n public error(message?: unknown, ...parameters: unknown[]): Success<string | undefined> {\n return this.log('error', message, ...parameters);\n }\n}\n"]}
|