@microsoft/applicationinsights-core-js 3.4.0-nightlybeta3.2602-27 → 3.4.1
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/browser/es5/applicationinsights-core-js.cjs.js +997 -114
- package/browser/es5/applicationinsights-core-js.cjs.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.cjs.min.js +2 -2
- package/browser/es5/applicationinsights-core-js.cjs.min.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.gbl.js +999 -116
- package/browser/es5/applicationinsights-core-js.gbl.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.gbl.min.js +2 -2
- package/browser/es5/applicationinsights-core-js.gbl.min.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.integrity.json +25 -25
- package/browser/es5/applicationinsights-core-js.js +999 -116
- package/browser/es5/applicationinsights-core-js.js.map +1 -1
- package/browser/es5/applicationinsights-core-js.min.js +2 -2
- package/browser/es5/applicationinsights-core-js.min.js.map +1 -1
- package/dist/es5/index.js +997 -114
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/index.min.js +2 -2
- package/dist/es5/index.min.js.map +1 -1
- package/dist-es5/__DynamicConstants.js +44 -27
- package/dist-es5/__DynamicConstants.js.map +1 -1
- package/dist-es5/config/ConfigDefaultHelpers.js +1 -1
- package/dist-es5/config/ConfigDefaults.js +1 -1
- package/dist-es5/config/DynamicConfig.js +1 -1
- package/dist-es5/config/DynamicProperty.js +1 -1
- package/dist-es5/config/DynamicState.js +1 -1
- package/dist-es5/config/DynamicSupport.js +1 -1
- package/dist-es5/constants/Constants.js +1 -1
- package/dist-es5/constants/InternalConstants.js +4 -1
- package/dist-es5/constants/InternalConstants.js.map +1 -1
- package/dist-es5/core/AggregationError.js +1 -1
- package/dist-es5/core/AppInsightsCore.js +13 -13
- package/dist-es5/core/AppInsightsCore.js.map +1 -1
- package/dist-es5/core/AsyncUtils.js +1 -1
- package/dist-es5/core/BaseTelemetryPlugin.js +1 -1
- package/dist-es5/core/CookieMgr.js +1 -1
- package/dist-es5/core/DbgExtensionUtils.js +1 -1
- package/dist-es5/core/InstrumentHooks.js +1 -1
- package/dist-es5/core/NotificationManager.js +1 -1
- package/dist-es5/core/PerfManager.js +1 -1
- package/dist-es5/core/ProcessTelemetryContext.js +3 -3
- package/dist-es5/core/ProcessTelemetryContext.js.map +1 -1
- package/dist-es5/core/ResponseHelpers.js +1 -1
- package/dist-es5/core/SenderPostManager.js +1 -1
- package/dist-es5/core/StatsBeat.js +9 -9
- package/dist-es5/core/StatsBeat.js.map +1 -1
- package/dist-es5/core/TelemetryHelpers.js +3 -3
- package/dist-es5/core/TelemetryHelpers.js.map +1 -1
- package/dist-es5/core/TelemetryInitializerPlugin.js +1 -1
- package/dist-es5/core/UnloadHandlerContainer.js +1 -1
- package/dist-es5/core/UnloadHookContainer.js +3 -3
- package/dist-es5/core/UnloadHookContainer.js.map +1 -1
- package/dist-es5/diagnostics/DiagnosticLogger.js +3 -3
- package/dist-es5/diagnostics/DiagnosticLogger.js.map +1 -1
- package/dist-es5/diagnostics/ThrottleMgr.js +1 -1
- package/dist-es5/enums/EnumHelperFuncs.js +1 -1
- package/dist-es5/enums/W3CTraceFlags.js +1 -1
- package/dist-es5/enums/ai/DependencyTypes.js +1 -1
- package/dist-es5/enums/ai/Enums.js +1 -1
- package/dist-es5/enums/ai/EventsDiscardedReason.js +1 -1
- package/dist-es5/enums/ai/FeatureOptInEnums.js +1 -1
- package/dist-es5/enums/ai/InitActiveStatusEnum.js +1 -1
- package/dist-es5/enums/ai/LoggingEnums.js +1 -1
- package/dist-es5/enums/ai/SendRequestReason.js +1 -1
- package/dist-es5/enums/ai/StatsType.js +1 -1
- package/dist-es5/enums/ai/TelemetryUnloadReason.js +1 -1
- package/dist-es5/enums/ai/TelemetryUpdateReason.js +1 -1
- package/dist-es5/enums/ai/TraceHeadersMode.js +1 -1
- package/dist-es5/enums/ai/UrlRedactionOptions.js +36 -0
- package/dist-es5/enums/ai/UrlRedactionOptions.js.map +1 -0
- package/dist-es5/enums/ext/Enums.js +78 -0
- package/dist-es5/enums/ext/Enums.js.map +1 -0
- package/dist-es5/enums/otel/OTelSamplingDecision.js +1 -1
- package/dist-es5/enums/otel/OTelSpanKind.js +1 -1
- package/dist-es5/enums/otel/OTelSpanStatus.js +1 -1
- package/dist-es5/enums/otel/eAttributeChangeOp.js +1 -1
- package/dist-es5/ext/AppInsightsExtCore.js +98 -0
- package/dist-es5/ext/AppInsightsExtCore.js.map +1 -0
- package/dist-es5/ext/ValueSanitizer.js +260 -0
- package/dist-es5/ext/ValueSanitizer.js.map +1 -0
- package/dist-es5/ext/extSpanUtils.js +312 -0
- package/dist-es5/ext/extSpanUtils.js.map +1 -0
- package/dist-es5/ext/extUtils.js +412 -0
- package/dist-es5/ext/extUtils.js.map +1 -0
- package/dist-es5/index.js +14 -1
- package/dist-es5/index.js.map +1 -1
- package/dist-es5/interfaces/IException.js +1 -1
- package/dist-es5/interfaces/IOTelHrTime.js +1 -1
- package/dist-es5/interfaces/ai/ConnectionString.js +1 -1
- package/dist-es5/interfaces/ai/IAppInsights.js +1 -1
- package/dist-es5/interfaces/ai/IAppInsightsCore.js +1 -1
- package/dist-es5/interfaces/ai/IChannelControls.js +1 -1
- package/dist-es5/interfaces/ai/IChannelControlsHost.js +1 -1
- package/dist-es5/interfaces/ai/IConfig.js +1 -1
- package/dist-es5/interfaces/ai/IConfiguration.js +1 -1
- package/dist-es5/interfaces/ai/ICookieMgr.js +1 -1
- package/dist-es5/interfaces/ai/ICorrelationConfig.js +1 -1
- package/dist-es5/interfaces/ai/IDbgExtension.js +1 -1
- package/dist-es5/interfaces/ai/IDependencyTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IDiagnosticLogger.js +1 -1
- package/dist-es5/interfaces/ai/IDistributedTraceContext.js +1 -1
- package/dist-es5/interfaces/ai/IEventTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IExceptionConfig.js +1 -1
- package/dist-es5/interfaces/ai/IExceptionTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IFeatureOptIn.js +1 -1
- package/dist-es5/interfaces/ai/IInstrumentHooks.js +1 -1
- package/dist-es5/interfaces/ai/IMetricTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/INetworkStatsbeat.js +1 -1
- package/dist-es5/interfaces/ai/INotificationListener.js +1 -1
- package/dist-es5/interfaces/ai/INotificationManager.js +1 -1
- package/dist-es5/interfaces/ai/IPageViewPerformanceTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IPageViewTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IPartC.js +1 -1
- package/dist-es5/interfaces/ai/IPerfEvent.js +1 -1
- package/dist-es5/interfaces/ai/IPerfManager.js +1 -1
- package/dist-es5/interfaces/ai/IProcessTelemetryContext.js +1 -1
- package/dist-es5/interfaces/ai/IPropertiesPlugin.js +1 -1
- package/dist-es5/interfaces/ai/IRequestContext.js +1 -1
- package/dist-es5/interfaces/ai/IRequestTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/ISenderPostManager.js +1 -1
- package/dist-es5/interfaces/ai/IStatsBeat.js +1 -1
- package/dist-es5/interfaces/ai/IStatsEventData.js +1 -1
- package/dist-es5/interfaces/ai/IStatsMgr.js +1 -1
- package/dist-es5/interfaces/ai/IStorageBuffer.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryContext.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryInitializers.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryItem.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryPlugin.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryPluginChain.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryUnloadState.js +1 -1
- package/dist-es5/interfaces/ai/ITelemetryUpdateState.js +1 -1
- package/dist-es5/interfaces/ai/IThrottleMgr.js +1 -1
- package/dist-es5/interfaces/ai/ITraceParent.js +1 -1
- package/dist-es5/interfaces/ai/ITraceProvider.js +1 -1
- package/dist-es5/interfaces/ai/ITraceTelemetry.js +1 -1
- package/dist-es5/interfaces/ai/IUnloadHook.js +1 -1
- package/dist-es5/interfaces/ai/IUnloadableComponent.js +1 -1
- package/dist-es5/interfaces/ai/IW3cTraceState.js +1 -1
- package/dist-es5/interfaces/ai/IXDomainRequest.js +1 -1
- package/dist-es5/interfaces/ai/IXHROverride.js +1 -1
- package/dist-es5/interfaces/ai/PartAExtensions.js +1 -1
- package/dist-es5/interfaces/ai/context/IApplication.js +1 -1
- package/dist-es5/interfaces/ai/context/IDevice.js +1 -1
- package/dist-es5/interfaces/ai/context/IInternal.js +1 -1
- package/dist-es5/interfaces/ai/context/ILocation.js +1 -1
- package/dist-es5/interfaces/ai/context/IOperatingSystem.js +1 -1
- package/dist-es5/interfaces/ai/context/ISample.js +1 -1
- package/dist-es5/interfaces/ai/context/ISession.js +1 -1
- package/dist-es5/interfaces/ai/context/ISessionManager.js +1 -1
- package/dist-es5/interfaces/ai/context/ITelemetryTrace.js +1 -1
- package/dist-es5/interfaces/ai/context/IUser.js +1 -1
- package/dist-es5/interfaces/ai/context/IWeb.js +1 -1
- package/dist-es5/interfaces/ai/contracts/AvailabilityData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/ContextTagKeys.js +1 -1
- package/dist-es5/interfaces/ai/contracts/DataPointType.js +1 -1
- package/dist-es5/interfaces/ai/contracts/DependencyKind.js +1 -1
- package/dist-es5/interfaces/ai/contracts/DependencySourceType.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IBase.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IDataPoint.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IDomain.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IEventData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IExceptionData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IExceptionDetails.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IMessageData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IMetricData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IPageViewData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IPageViewPerfData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IRemoteDependencyData.js +1 -1
- package/dist-es5/interfaces/ai/contracts/IStackFrame.js +1 -1
- package/dist-es5/interfaces/ai/contracts/SeverityLevel.js +1 -1
- package/dist-es5/interfaces/ai/telemetry/IEnvelope.js +1 -1
- package/dist-es5/interfaces/ai/telemetry/ISerializable.js +1 -1
- package/dist-es5/interfaces/config/IConfigDefaults.js +1 -1
- package/dist-es5/interfaces/config/IDynamicConfigHandler.js +1 -1
- package/dist-es5/interfaces/config/IDynamicPropertyHandler.js +1 -1
- package/dist-es5/interfaces/config/IDynamicWatcher.js +1 -1
- package/dist-es5/interfaces/config/_IDynamicConfigHandlerState.js +1 -1
- package/dist-es5/interfaces/ext/DataModels.js +6 -0
- package/dist-es5/interfaces/ext/DataModels.js.map +1 -0
- package/dist-es5/interfaces/otel/IOTelApi.js +1 -1
- package/dist-es5/interfaces/otel/IOTelApiCtx.js +1 -1
- package/dist-es5/interfaces/otel/IOTelAttributes.js +1 -1
- package/dist-es5/interfaces/otel/attribute/IAttributeContainer.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelAttributeLimits.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelConfig.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelErrorHandlers.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelSpanLimits.js +1 -1
- package/dist-es5/interfaces/otel/config/IOTelTraceCfg.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpan.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanContext.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanCtx.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanOptions.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelSpanStatus.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTraceApi.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTraceState.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTracer.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTracerOptions.js +1 -1
- package/dist-es5/interfaces/otel/trace/IOTelTracerProvider.js +1 -1
- package/dist-es5/interfaces/otel/trace/IReadableSpan.js +1 -1
- package/dist-es5/internal/EventHelpers.js +5 -5
- package/dist-es5/internal/EventHelpers.js.map +1 -1
- package/dist-es5/internal/attributeHelpers.js +1 -1
- package/dist-es5/internal/commonUtils.js +1 -1
- package/dist-es5/internal/handleErrors.js +1 -1
- package/dist-es5/internal/noopHelpers.js +1 -1
- package/dist-es5/internal/timeHelpers.js +1 -1
- package/dist-es5/otel/api/OTelApi.js +1 -1
- package/dist-es5/otel/api/errors/OTelError.js +1 -1
- package/dist-es5/otel/api/errors/OTelInvalidAttributeError.js +1 -1
- package/dist-es5/otel/api/errors/OTelSpanError.js +1 -1
- package/dist-es5/otel/api/trace/span.js +4 -4
- package/dist-es5/otel/api/trace/span.js.map +1 -1
- package/dist-es5/otel/api/trace/spanContext.js +1 -1
- package/dist-es5/otel/api/trace/traceApi.js +1 -1
- package/dist-es5/otel/api/trace/traceProvider.js +3 -3
- package/dist-es5/otel/api/trace/traceProvider.js.map +1 -1
- package/dist-es5/otel/api/trace/traceState.js +1 -1
- package/dist-es5/otel/api/trace/tracer.js +1 -1
- package/dist-es5/otel/api/trace/tracerProvider.js +1 -1
- package/dist-es5/otel/api/trace/utils.js +1 -1
- package/dist-es5/otel/attribute/SemanticConventions.js +1 -1
- package/dist-es5/otel/attribute/attributeContainer.js +1 -1
- package/dist-es5/telemetry/ConnectionStringParser.js +1 -1
- package/dist-es5/telemetry/RequestResponseHeaders.js +1 -1
- package/dist-es5/telemetry/TelemetryItemCreator.js +1 -1
- package/dist-es5/telemetry/W3cTraceState.js +1 -1
- package/dist-es5/telemetry/ai/Common/Data.js +3 -2
- package/dist-es5/telemetry/ai/Common/Data.js.map +1 -1
- package/dist-es5/telemetry/ai/Common/DataPoint.js +1 -1
- package/dist-es5/telemetry/ai/Common/DataSanitizer.js +1 -1
- package/dist-es5/telemetry/ai/Common/Envelope.js +1 -1
- package/dist-es5/telemetry/ai/DataTypes.js +1 -1
- package/dist-es5/telemetry/ai/EnvelopeTypes.js +1 -1
- package/dist-es5/telemetry/ai/Event.js +1 -1
- package/dist-es5/telemetry/ai/Exception.js +1 -1
- package/dist-es5/telemetry/ai/Metric.js +1 -1
- package/dist-es5/telemetry/ai/PageView.js +1 -1
- package/dist-es5/telemetry/ai/PageViewPerformance.js +1 -1
- package/dist-es5/telemetry/ai/RemoteDependencyData.js +1 -1
- package/dist-es5/telemetry/ai/Trace.js +1 -1
- package/dist-es5/utils/CoreUtils.js +1 -1
- package/dist-es5/utils/DataCacheHelper.js +2 -2
- package/dist-es5/utils/DataCacheHelper.js.map +1 -1
- package/dist-es5/utils/DomHelperFuncs.js +1 -1
- package/dist-es5/utils/EnvUtils.js +16 -5
- package/dist-es5/utils/EnvUtils.js.map +1 -1
- package/dist-es5/utils/HelperFuncs.js +4 -4
- package/dist-es5/utils/HelperFuncs.js.map +1 -1
- package/dist-es5/utils/Offline.js +1 -1
- package/dist-es5/utils/RandomHelper.js +1 -1
- package/dist-es5/utils/StorageHelperFuncs.js +1 -1
- package/dist-es5/utils/TraceParent.js +5 -5
- package/dist-es5/utils/TraceParent.js.map +1 -1
- package/dist-es5/utils/UrlHelperFuncs.js +1 -1
- package/dist-es5/utils/Util.js +4 -4
- package/dist-es5/utils/Util.js.map +1 -1
- package/package.json +75 -78
- package/types/applicationinsights-core-js.d.ts +830 -11
- package/types/applicationinsights-core-js.namespaced.d.ts +829 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessTelemetryContext.js.map","sources":["ProcessTelemetryContext.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\nimport { arrForEach, dumpObj, isArray, isFunction, isNullOrUndefined, isUndefined, objForEachKey, objFreeze } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CONFIG, _DYN_CREATE_NEW, _DYN_DIAG_LOG, _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_IDENTIFIER, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_LOGGER, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_TEARDOWN, _DYN_UNLOAD, _DYN_UPDATE } from \"../__DynamicConstants\";\r\nimport { _applyDefaultValue } from \"../config/ConfigDefaults\";\r\nimport { createDynamicConfig } from \"../config/DynamicConfig\";\r\nimport { STR_CORE, STR_DISABLED, STR_EMPTY, STR_PRIORITY, STR_PROCESS_TELEMETRY } from \"../constants/InternalConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"../diagnostics/DiagnosticLogger\";\r\nimport { _noopVoid } from \"../internal/noopHelpers\";\r\nimport { doPerf } from \"./PerfManager\";\r\nimport { _getPluginState } from \"./TelemetryHelpers\";\r\nvar strTelemetryPluginChain = \"TelemetryPluginChain\";\r\nvar strHasRunFlags = \"_hasRun\";\r\nvar strGetTelCtx = \"_getTelCtx\";\r\nvar _chainId = 0;\r\nfunction _getNextProxyStart(proxy, core, startAt) {\r\n while (proxy) {\r\n if (proxy[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]() === startAt) {\r\n return proxy;\r\n }\r\n proxy = proxy[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n // This wasn't found in the existing chain so create an isolated one with just this plugin\r\n return createTelemetryProxyChain([startAt], core[_DYN_CONFIG /* @min:%2econfig */] || {}, core);\r\n}\r\n/**\r\n * @ignore\r\n * @param telemetryChain\r\n * @param dynamicHandler\r\n * @param core\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n * @returns\r\n */\r\nfunction _createInternalContext(telemetryChain, dynamicHandler, core, startAt) {\r\n // We have a special case where we want to start execution from this specific plugin\r\n // or we simply reuse the existing telemetry plugin chain (normal execution case)\r\n var _nextProxy = null; // By Default set as no next plugin\r\n var _onComplete = [];\r\n if (!dynamicHandler) {\r\n dynamicHandler = createDynamicConfig({}, null, core[_DYN_LOGGER /* @min:%2elogger */]);\r\n }\r\n if (startAt !== null) {\r\n // There is no next element (null) vs not defined (undefined) so use the full chain\r\n _nextProxy = startAt ? _getNextProxyStart(telemetryChain, core, startAt) : telemetryChain;\r\n }\r\n var context = {\r\n _next: _moveNext,\r\n ctx: {\r\n core: function () {\r\n return core;\r\n },\r\n diagLog: function () {\r\n return safeGetLogger(core, dynamicHandler.cfg);\r\n },\r\n getCfg: function () {\r\n return dynamicHandler.cfg;\r\n },\r\n getExtCfg: _resolveExtCfg,\r\n getConfig: _getConfig,\r\n hasNext: function () {\r\n return !!_nextProxy;\r\n },\r\n getNext: function () {\r\n return _nextProxy;\r\n },\r\n setNext: function (nextPlugin) {\r\n _nextProxy = nextPlugin;\r\n },\r\n iterate: _iterateChain,\r\n onComplete: _addOnComplete\r\n }\r\n };\r\n function _addOnComplete(onComplete, that) {\r\n var args = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n args[_i - 2] = arguments[_i];\r\n }\r\n if (onComplete) {\r\n _onComplete[_DYN_PUSH /* @min:%2epush */]({\r\n func: onComplete,\r\n self: !isUndefined(that) ? that : context.ctx,\r\n args: args\r\n });\r\n }\r\n }\r\n function _moveNext() {\r\n var nextProxy = _nextProxy;\r\n // Automatically move to the next plugin\r\n _nextProxy = nextProxy ? nextProxy[_DYN_GET_NEXT /* @min:%2egetNext */]() : null;\r\n if (!nextProxy) {\r\n var onComplete = _onComplete;\r\n if (onComplete && onComplete[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(onComplete, function (completeDetails) {\r\n try {\r\n completeDetails.func.call(completeDetails.self, completeDetails.args);\r\n }\r\n catch (e) {\r\n _throwInternal(core[_DYN_LOGGER /* @min:%2elogger */], 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, \"Unexpected Exception during onComplete - \" + dumpObj(e));\r\n }\r\n });\r\n _onComplete = [];\r\n }\r\n }\r\n return nextProxy;\r\n }\r\n function _getExtCfg(identifier, createIfMissing) {\r\n var idCfg = null;\r\n var extCfg = _getCfg(dynamicHandler.cfg, \"extensionConfig\", createIfMissing);\r\n if (extCfg) {\r\n idCfg = _getCfg(extCfg, identifier, createIfMissing);\r\n }\r\n return idCfg;\r\n }\r\n function _getCfg(cfg, identifier, createIfMissing) {\r\n var idCfg = null;\r\n if (cfg && identifier) {\r\n idCfg = cfg[identifier];\r\n if (!idCfg && createIfMissing) {\r\n idCfg = {};\r\n }\r\n // Always set the value so that the property always exists\r\n cfg[identifier] = idCfg; // Note: it is valid for the \"value\" to be undefined\r\n // Calling `ref()` has a side effect of causing the referenced property to become dynamic (if not already)\r\n idCfg = dynamicHandler.ref(cfg, identifier);\r\n }\r\n return idCfg;\r\n }\r\n function _resolveExtCfg(identifier, defaultValues, rootOnly) {\r\n var newConfig = rootOnly ? _getCfg(dynamicHandler.cfg, identifier, true) : _getExtCfg(identifier, true);\r\n if (defaultValues) {\r\n // Enumerate over the defaultValues and if not already populated attempt to\r\n // find a value from the root config or use the default value\r\n objForEachKey(defaultValues, function (field, defaultValue) {\r\n // for each unspecified field, set the default value\r\n if (isNullOrUndefined(newConfig[field])) {\r\n var cfgValue = dynamicHandler.cfg[field];\r\n if (cfgValue || !isNullOrUndefined(cfgValue)) {\r\n newConfig[field] = cfgValue;\r\n }\r\n }\r\n _applyDefaultValue(dynamicHandler, newConfig, field, defaultValue);\r\n });\r\n }\r\n return dynamicHandler.setDf(newConfig, defaultValues);\r\n }\r\n function _getConfig(identifier, field, defaultValue) {\r\n if (defaultValue === void 0) { defaultValue = false; }\r\n var theValue;\r\n var extConfig = _getExtCfg(identifier, false);\r\n var rootConfig = dynamicHandler.cfg;\r\n if (extConfig && (extConfig[field] || !isNullOrUndefined(extConfig[field]))) {\r\n theValue = extConfig[field];\r\n }\r\n else if (rootConfig[field] || !isNullOrUndefined(rootConfig[field])) {\r\n theValue = rootConfig[field];\r\n }\r\n return (theValue || !isNullOrUndefined(theValue)) ? theValue : defaultValue;\r\n }\r\n function _iterateChain(cb) {\r\n // Keep processing until we reach the end of the chain\r\n var nextPlugin;\r\n while (!!(nextPlugin = context._next())) {\r\n var plugin = nextPlugin[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]();\r\n if (plugin) {\r\n // callback with the current on\r\n cb(plugin);\r\n }\r\n }\r\n }\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryContext(telemetryChain, cfg, core, startAt) {\r\n var config = createDynamicConfig(cfg);\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(env) {\r\n var nextPlugin = internalContext._next();\r\n if (nextPlugin) {\r\n // Run the next plugin which will call \"processNext()\"\r\n nextPlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, context);\r\n }\r\n return !nextPlugin;\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);\r\n }\r\n return createProcessTelemetryContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), config.cfg, core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain for handling the unloading of the chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryUnloadContext(telemetryChain, core, startAt) {\r\n var config = createDynamicConfig(core[_DYN_CONFIG /* @min:%2econfig */]);\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(unloadState) {\r\n var nextPlugin = internalContext._next();\r\n nextPlugin && nextPlugin[_DYN_UNLOAD /* @min:%2eunload */](context, unloadState);\r\n return !nextPlugin;\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);\r\n }\r\n return createProcessTelemetryUnloadContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain for updating the configuration\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryUpdateContext(telemetryChain, core, startAt) {\r\n var config = createDynamicConfig(core[_DYN_CONFIG /* @min:%2econfig */]);\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(updateState) {\r\n return context.iterate(function (plugin) {\r\n if (isFunction(plugin[_DYN_UPDATE /* @min:%2eupdate */])) {\r\n plugin[_DYN_UPDATE /* @min:%2eupdate */](context, updateState);\r\n }\r\n });\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);\r\n }\r\n return createProcessTelemetryUpdateContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates an execution chain from the array of plugins\r\n * @param plugins - The array of plugins that will be executed in this order\r\n * @param defItemCtx - The default execution context to use when no telemetry context is passed to processTelemetry(), this\r\n * should be for legacy plugins only. Currently, only used for passing the current core instance and to provide better error\r\n * reporting (hasRun) when errors occur.\r\n */\r\nexport function createTelemetryProxyChain(plugins, config, core, startAt) {\r\n var firstProxy = null;\r\n var add = startAt ? false : true;\r\n if (isArray(plugins) && plugins[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n // Create the proxies and wire up the next plugin chain\r\n var lastProxy_1 = null;\r\n arrForEach(plugins, function (thePlugin) {\r\n if (!add && startAt === thePlugin) {\r\n add = true;\r\n }\r\n if (add && thePlugin && isFunction(thePlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */])) {\r\n // Only add plugins that are processors\r\n var newProxy = createTelemetryPluginProxy(thePlugin, config, core);\r\n if (!firstProxy) {\r\n firstProxy = newProxy;\r\n }\r\n if (lastProxy_1) {\r\n // Set this new proxy as the next for the previous one\r\n lastProxy_1._setNext(newProxy);\r\n }\r\n lastProxy_1 = newProxy;\r\n }\r\n });\r\n }\r\n if (startAt && !firstProxy) {\r\n // Special case where the \"startAt\" was not in the original list of plugins\r\n return createTelemetryProxyChain([startAt], config, core);\r\n }\r\n return firstProxy;\r\n}\r\n/**\r\n * Create the processing telemetry proxy instance, the proxy is used to abstract the current plugin to allow monitoring and\r\n * execution plugins while passing around the dynamic execution state (IProcessTelemetryContext), the proxy instance no longer\r\n * contains any execution state and can be reused between requests (this was not the case for 2.7.2 and earlier with the\r\n * TelemetryPluginChain class).\r\n * @param plugin - The plugin instance to proxy\r\n * @param config - The default execution context to use when no telemetry context is passed to processTelemetry(), this\r\n * should be for legacy plugins only. Currently, only used for passing the current core instance and to provide better error\r\n * reporting (hasRun) when errors occur.\r\n * @returns\r\n */\r\nexport function createTelemetryPluginProxy(plugin, config, core) {\r\n var _a;\r\n var nextProxy = null;\r\n var hasProcessTelemetry = isFunction(plugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */]);\r\n var hasSetNext = isFunction(plugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */]);\r\n var chainId;\r\n if (plugin) {\r\n chainId = plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] + \"-\" + plugin[STR_PRIORITY /* @min:%2epriority */] + \"-\" + _chainId++;\r\n }\r\n else {\r\n chainId = \"Unknown-0-\" + _chainId++;\r\n }\r\n var proxyChain = (_a = {\r\n getPlugin: function () {\r\n return plugin;\r\n },\r\n getNext: function () {\r\n return nextProxy;\r\n }\r\n },\r\n _a[STR_PROCESS_TELEMETRY /* @min:processTelemetry */] = _processTelemetry,\r\n _a.unload = _unloadPlugin,\r\n _a.update = _updatePlugin,\r\n _a._id = chainId,\r\n _a._setNext = function (nextPlugin) {\r\n nextProxy = nextPlugin;\r\n },\r\n _a);\r\n function _getTelCtx() {\r\n var itemCtx;\r\n // Looks like a plugin didn't pass the (optional) context, so create a new one\r\n if (plugin && isFunction(plugin[strGetTelCtx])) {\r\n // This plugin extends from the BaseTelemetryPlugin so lets use it\r\n itemCtx = plugin[strGetTelCtx]();\r\n }\r\n if (!itemCtx) {\r\n // Create a temporary one\r\n itemCtx = createProcessTelemetryContext(proxyChain, config, core);\r\n }\r\n return itemCtx;\r\n }\r\n function _processChain(itemCtx, processPluginFn, name, details, isAsync) {\r\n var hasRun = false;\r\n var identifier = plugin ? plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] : strTelemetryPluginChain;\r\n var hasRunContext = itemCtx[strHasRunFlags];\r\n if (!hasRunContext) {\r\n // Assign and populate\r\n hasRunContext = itemCtx[strHasRunFlags] = {};\r\n }\r\n // Ensure that we keep the context in sync\r\n itemCtx.setNext(nextProxy);\r\n if (plugin) {\r\n doPerf(itemCtx[STR_CORE /* @min:%2ecore */](), function () { return identifier + \":\" + name; }, function () {\r\n // Mark this component as having run\r\n hasRunContext[chainId] = true;\r\n try {\r\n // Set a flag on the next plugin so we know if it was attempted to be executed\r\n var nextId = nextProxy ? nextProxy._id : STR_EMPTY;\r\n if (nextId) {\r\n hasRunContext[nextId] = false;\r\n }\r\n hasRun = processPluginFn(itemCtx);\r\n }\r\n catch (error) {\r\n var hasNextRun = nextProxy ? hasRunContext[nextProxy._id] : true;\r\n if (hasNextRun) {\r\n // The next plugin after us has already run so set this one as complete\r\n hasRun = true;\r\n }\r\n if (!nextProxy || !hasNextRun) {\r\n // Either we have no next plugin or the current one did not attempt to call the next plugin\r\n // Which means the current one is the root of the failure so log/report this failure\r\n _throwInternal(itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 73 /* _eInternalMessageId.PluginException */, \"Plugin [\" + identifier + \"] failed during \" + name + \" - \" + dumpObj(error) + \", run flags: \" + dumpObj(hasRunContext));\r\n }\r\n }\r\n }, details, isAsync);\r\n }\r\n return hasRun;\r\n }\r\n function _processTelemetry(env, itemCtx) {\r\n itemCtx = itemCtx || _getTelCtx();\r\n function _callProcessTelemetry(itemCtx) {\r\n if (!plugin || !hasProcessTelemetry) {\r\n return false;\r\n }\r\n var pluginState = _getPluginState(plugin);\r\n if (pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] || pluginState[STR_DISABLED]) {\r\n return false;\r\n }\r\n // Ensure that we keep the context in sync (for processNext()), just in case a plugin\r\n // doesn't calls processTelemetry() instead of itemContext.processNext() or some\r\n // other form of error occurred\r\n if (hasSetNext) {\r\n // Backward compatibility setting the next plugin on the instance\r\n plugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */](nextProxy);\r\n }\r\n plugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, itemCtx);\r\n // Process Telemetry is expected to call itemCtx.processNext() or nextPlugin.processTelemetry()\r\n return true;\r\n }\r\n if (!_processChain(itemCtx, _callProcessTelemetry, \"processTelemetry\", function () { return ({ item: env }); }, !(env.sync))) {\r\n // The underlying plugin is either not defined, not enabled or does not have a processTelemetry implementation\r\n // so we still want the next plugin to be executed.\r\n itemCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](env);\r\n }\r\n }\r\n function _unloadPlugin(unloadCtx, unloadState) {\r\n function _callTeardown() {\r\n // Setting default of hasRun as false so the proxyProcessFn() is called as teardown() doesn't have to exist or call unloadNext().\r\n var hasRun = false;\r\n if (plugin) {\r\n var pluginState = _getPluginState(plugin);\r\n var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE /* @min:%2ecore */];\r\n // Only teardown the plugin if it was initialized by the current core (i.e. It's not a shared plugin)\r\n if (plugin && (!pluginCore || pluginCore === unloadCtx.core()) && !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */]) {\r\n // Handle plugins that don't extend from the BaseTelemetryPlugin\r\n pluginState[STR_CORE /* @min:%2ecore */] = null;\r\n pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] = true;\r\n pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = false;\r\n if (plugin[_DYN_TEARDOWN /* @min:%2eteardown */] && plugin[_DYN_TEARDOWN /* @min:%2eteardown */](unloadCtx, unloadState) === true) {\r\n // plugin told us that it was going to (or has) call unloadCtx.processNext()\r\n hasRun = true;\r\n }\r\n }\r\n }\r\n return hasRun;\r\n }\r\n if (!_processChain(unloadCtx, _callTeardown, \"unload\", _noopVoid, unloadState.isAsync)) {\r\n // Only called if we hasRun was not true\r\n unloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](unloadState);\r\n }\r\n }\r\n function _updatePlugin(updateCtx, updateState) {\r\n function _callUpdate() {\r\n // Setting default of hasRun as false so the proxyProcessFn() is called as teardown() doesn't have to exist or call unloadNext().\r\n var hasRun = false;\r\n if (plugin) {\r\n var pluginState = _getPluginState(plugin);\r\n var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE /* @min:%2ecore */];\r\n // Only update the plugin if it was initialized by the current core (i.e. It's not a shared plugin)\r\n if (plugin && (!pluginCore || pluginCore === updateCtx.core()) && !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */]) {\r\n if (plugin[_DYN_UPDATE /* @min:%2eupdate */] && plugin[_DYN_UPDATE /* @min:%2eupdate */](updateCtx, updateState) === true) {\r\n // plugin told us that it was going to (or has) call unloadCtx.processNext()\r\n hasRun = true;\r\n }\r\n }\r\n }\r\n return hasRun;\r\n }\r\n if (!_processChain(updateCtx, _callUpdate, \"update\", _noopVoid, false)) {\r\n // Only called if we hasRun was not true\r\n updateCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](updateState);\r\n }\r\n }\r\n return objFreeze(proxyChain);\r\n}\r\n//# sourceMappingURL=ProcessTelemetryContext.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"ProcessTelemetryContext.js.map","sources":["ProcessTelemetryContext.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\nimport { arrForEach, dumpObj, isArray, isFunction, isNullOrUndefined, isUndefined, objForEachKey, objFreeze } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CALL, _DYN_CONFIG, _DYN_CREATE_NEW, _DYN_DIAG_LOG, _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_IDENTIFIER, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_LOGGER, _DYN_PROCESS_NEXT, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_TEARDOWN, _DYN_UNLOAD, _DYN_UPDATE } from \"../__DynamicConstants\";\r\nimport { _applyDefaultValue } from \"../config/ConfigDefaults\";\r\nimport { createDynamicConfig } from \"../config/DynamicConfig\";\r\nimport { STR_CORE, STR_DISABLED, STR_EMPTY, STR_PRIORITY, STR_PROCESS_TELEMETRY } from \"../constants/InternalConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"../diagnostics/DiagnosticLogger\";\r\nimport { _noopVoid } from \"../internal/noopHelpers\";\r\nimport { doPerf } from \"./PerfManager\";\r\nimport { _getPluginState } from \"./TelemetryHelpers\";\r\nvar strTelemetryPluginChain = \"TelemetryPluginChain\";\r\nvar strHasRunFlags = \"_hasRun\";\r\nvar strGetTelCtx = \"_getTelCtx\";\r\nvar _chainId = 0;\r\nfunction _getNextProxyStart(proxy, core, startAt) {\r\n while (proxy) {\r\n if (proxy[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]() === startAt) {\r\n return proxy;\r\n }\r\n proxy = proxy[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n // This wasn't found in the existing chain so create an isolated one with just this plugin\r\n return createTelemetryProxyChain([startAt], core[_DYN_CONFIG /* @min:%2econfig */] || {}, core);\r\n}\r\n/**\r\n * @ignore\r\n * @param telemetryChain\r\n * @param dynamicHandler\r\n * @param core\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n * @returns\r\n */\r\nfunction _createInternalContext(telemetryChain, dynamicHandler, core, startAt) {\r\n // We have a special case where we want to start execution from this specific plugin\r\n // or we simply reuse the existing telemetry plugin chain (normal execution case)\r\n var _nextProxy = null; // By Default set as no next plugin\r\n var _onComplete = [];\r\n if (!dynamicHandler) {\r\n dynamicHandler = createDynamicConfig({}, null, core[_DYN_LOGGER /* @min:%2elogger */]);\r\n }\r\n if (startAt !== null) {\r\n // There is no next element (null) vs not defined (undefined) so use the full chain\r\n _nextProxy = startAt ? _getNextProxyStart(telemetryChain, core, startAt) : telemetryChain;\r\n }\r\n var context = {\r\n _next: _moveNext,\r\n ctx: {\r\n core: function () {\r\n return core;\r\n },\r\n diagLog: function () {\r\n return safeGetLogger(core, dynamicHandler.cfg);\r\n },\r\n getCfg: function () {\r\n return dynamicHandler.cfg;\r\n },\r\n getExtCfg: _resolveExtCfg,\r\n getConfig: _getConfig,\r\n hasNext: function () {\r\n return !!_nextProxy;\r\n },\r\n getNext: function () {\r\n return _nextProxy;\r\n },\r\n setNext: function (nextPlugin) {\r\n _nextProxy = nextPlugin;\r\n },\r\n iterate: _iterateChain,\r\n onComplete: _addOnComplete\r\n }\r\n };\r\n function _addOnComplete(onComplete, that) {\r\n var args = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n args[_i - 2] = arguments[_i];\r\n }\r\n if (onComplete) {\r\n _onComplete[_DYN_PUSH /* @min:%2epush */]({\r\n func: onComplete,\r\n self: !isUndefined(that) ? that : context.ctx,\r\n args: args\r\n });\r\n }\r\n }\r\n function _moveNext() {\r\n var nextProxy = _nextProxy;\r\n // Automatically move to the next plugin\r\n _nextProxy = nextProxy ? nextProxy[_DYN_GET_NEXT /* @min:%2egetNext */]() : null;\r\n if (!nextProxy) {\r\n var onComplete = _onComplete;\r\n if (onComplete && onComplete[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n arrForEach(onComplete, function (completeDetails) {\r\n try {\r\n completeDetails.func[_DYN_CALL /* @min:%2ecall */](completeDetails.self, completeDetails.args);\r\n }\r\n catch (e) {\r\n _throwInternal(core[_DYN_LOGGER /* @min:%2elogger */], 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, \"Unexpected Exception during onComplete - \" + dumpObj(e));\r\n }\r\n });\r\n _onComplete = [];\r\n }\r\n }\r\n return nextProxy;\r\n }\r\n function _getExtCfg(identifier, createIfMissing) {\r\n var idCfg = null;\r\n var extCfg = _getCfg(dynamicHandler.cfg, \"extensionConfig\", createIfMissing);\r\n if (extCfg) {\r\n idCfg = _getCfg(extCfg, identifier, createIfMissing);\r\n }\r\n return idCfg;\r\n }\r\n function _getCfg(cfg, identifier, createIfMissing) {\r\n var idCfg = null;\r\n if (cfg && identifier) {\r\n idCfg = cfg[identifier];\r\n if (!idCfg && createIfMissing) {\r\n idCfg = {};\r\n }\r\n // Always set the value so that the property always exists\r\n cfg[identifier] = idCfg; // Note: it is valid for the \"value\" to be undefined\r\n // Calling `ref()` has a side effect of causing the referenced property to become dynamic (if not already)\r\n idCfg = dynamicHandler.ref(cfg, identifier);\r\n }\r\n return idCfg;\r\n }\r\n function _resolveExtCfg(identifier, defaultValues, rootOnly) {\r\n var newConfig = rootOnly ? _getCfg(dynamicHandler.cfg, identifier, true) : _getExtCfg(identifier, true);\r\n if (defaultValues) {\r\n // Enumerate over the defaultValues and if not already populated attempt to\r\n // find a value from the root config or use the default value\r\n objForEachKey(defaultValues, function (field, defaultValue) {\r\n // for each unspecified field, set the default value\r\n if (isNullOrUndefined(newConfig[field])) {\r\n var cfgValue = dynamicHandler.cfg[field];\r\n if (cfgValue || !isNullOrUndefined(cfgValue)) {\r\n newConfig[field] = cfgValue;\r\n }\r\n }\r\n _applyDefaultValue(dynamicHandler, newConfig, field, defaultValue);\r\n });\r\n }\r\n return dynamicHandler.setDf(newConfig, defaultValues);\r\n }\r\n function _getConfig(identifier, field, defaultValue) {\r\n if (defaultValue === void 0) { defaultValue = false; }\r\n var theValue;\r\n var extConfig = _getExtCfg(identifier, false);\r\n var rootConfig = dynamicHandler.cfg;\r\n if (extConfig && (extConfig[field] || !isNullOrUndefined(extConfig[field]))) {\r\n theValue = extConfig[field];\r\n }\r\n else if (rootConfig[field] || !isNullOrUndefined(rootConfig[field])) {\r\n theValue = rootConfig[field];\r\n }\r\n return (theValue || !isNullOrUndefined(theValue)) ? theValue : defaultValue;\r\n }\r\n function _iterateChain(cb) {\r\n // Keep processing until we reach the end of the chain\r\n var nextPlugin;\r\n while (!!(nextPlugin = context._next())) {\r\n var plugin = nextPlugin[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]();\r\n if (plugin) {\r\n // callback with the current on\r\n cb(plugin);\r\n }\r\n }\r\n }\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryContext(telemetryChain, cfg, core, startAt) {\r\n var config = createDynamicConfig(cfg);\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(env) {\r\n var nextPlugin = internalContext._next();\r\n if (nextPlugin) {\r\n // Run the next plugin which will call \"processNext()\"\r\n nextPlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, context);\r\n }\r\n return !nextPlugin;\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);\r\n }\r\n return createProcessTelemetryContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), config.cfg, core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain for handling the unloading of the chain\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryUnloadContext(telemetryChain, core, startAt) {\r\n var config = createDynamicConfig(core[_DYN_CONFIG /* @min:%2econfig */]);\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(unloadState) {\r\n var nextPlugin = internalContext._next();\r\n nextPlugin && nextPlugin[_DYN_UNLOAD /* @min:%2eunload */](context, unloadState);\r\n return !nextPlugin;\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);\r\n }\r\n return createProcessTelemetryUnloadContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates a new Telemetry Item context with the current config, core and plugin execution chain for updating the configuration\r\n * @param plugins - The plugin instances that will be executed\r\n * @param config - The current config\r\n * @param core - The current core instance\r\n * @param startAt - Identifies the next plugin to execute, if null there is no \"next\" plugin and if undefined it should assume the start of the chain\r\n */\r\nexport function createProcessTelemetryUpdateContext(telemetryChain, core, startAt) {\r\n var config = createDynamicConfig(core[_DYN_CONFIG /* @min:%2econfig */]);\r\n var internalContext = _createInternalContext(telemetryChain, config, core, startAt);\r\n var context = internalContext.ctx;\r\n function _processNext(updateState) {\r\n return context.iterate(function (plugin) {\r\n if (isFunction(plugin[_DYN_UPDATE /* @min:%2eupdate */])) {\r\n plugin[_DYN_UPDATE /* @min:%2eupdate */](context, updateState);\r\n }\r\n });\r\n }\r\n function _createNew(plugins, startAt) {\r\n if (plugins === void 0) { plugins = null; }\r\n if (isArray(plugins)) {\r\n plugins = createTelemetryProxyChain(plugins, config.cfg, core, startAt);\r\n }\r\n return createProcessTelemetryUpdateContext(plugins || context[_DYN_GET_NEXT /* @min:%2egetNext */](), core, startAt);\r\n }\r\n context[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */] = _processNext;\r\n context[_DYN_CREATE_NEW /* @min:%2ecreateNew */] = _createNew;\r\n return context;\r\n}\r\n/**\r\n * Creates an execution chain from the array of plugins\r\n * @param plugins - The array of plugins that will be executed in this order\r\n * @param defItemCtx - The default execution context to use when no telemetry context is passed to processTelemetry(), this\r\n * should be for legacy plugins only. Currently, only used for passing the current core instance and to provide better error\r\n * reporting (hasRun) when errors occur.\r\n */\r\nexport function createTelemetryProxyChain(plugins, config, core, startAt) {\r\n var firstProxy = null;\r\n var add = startAt ? false : true;\r\n if (isArray(plugins) && plugins[_DYN_LENGTH /* @min:%2elength */] > 0) {\r\n // Create the proxies and wire up the next plugin chain\r\n var lastProxy_1 = null;\r\n arrForEach(plugins, function (thePlugin) {\r\n if (!add && startAt === thePlugin) {\r\n add = true;\r\n }\r\n if (add && thePlugin && isFunction(thePlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */])) {\r\n // Only add plugins that are processors\r\n var newProxy = createTelemetryPluginProxy(thePlugin, config, core);\r\n if (!firstProxy) {\r\n firstProxy = newProxy;\r\n }\r\n if (lastProxy_1) {\r\n // Set this new proxy as the next for the previous one\r\n lastProxy_1._setNext(newProxy);\r\n }\r\n lastProxy_1 = newProxy;\r\n }\r\n });\r\n }\r\n if (startAt && !firstProxy) {\r\n // Special case where the \"startAt\" was not in the original list of plugins\r\n return createTelemetryProxyChain([startAt], config, core);\r\n }\r\n return firstProxy;\r\n}\r\n/**\r\n * Create the processing telemetry proxy instance, the proxy is used to abstract the current plugin to allow monitoring and\r\n * execution plugins while passing around the dynamic execution state (IProcessTelemetryContext), the proxy instance no longer\r\n * contains any execution state and can be reused between requests (this was not the case for 2.7.2 and earlier with the\r\n * TelemetryPluginChain class).\r\n * @param plugin - The plugin instance to proxy\r\n * @param config - The default execution context to use when no telemetry context is passed to processTelemetry(), this\r\n * should be for legacy plugins only. Currently, only used for passing the current core instance and to provide better error\r\n * reporting (hasRun) when errors occur.\r\n * @returns\r\n */\r\nexport function createTelemetryPluginProxy(plugin, config, core) {\r\n var _a;\r\n var nextProxy = null;\r\n var hasProcessTelemetry = isFunction(plugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */]);\r\n var hasSetNext = isFunction(plugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */]);\r\n var chainId;\r\n if (plugin) {\r\n chainId = plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] + \"-\" + plugin[STR_PRIORITY /* @min:%2epriority */] + \"-\" + _chainId++;\r\n }\r\n else {\r\n chainId = \"Unknown-0-\" + _chainId++;\r\n }\r\n var proxyChain = (_a = {\r\n getPlugin: function () {\r\n return plugin;\r\n },\r\n getNext: function () {\r\n return nextProxy;\r\n }\r\n },\r\n _a[STR_PROCESS_TELEMETRY /* @min:processTelemetry */] = _processTelemetry,\r\n _a.unload = _unloadPlugin,\r\n _a.update = _updatePlugin,\r\n _a._id = chainId,\r\n _a._setNext = function (nextPlugin) {\r\n nextProxy = nextPlugin;\r\n },\r\n _a);\r\n function _getTelCtx() {\r\n var itemCtx;\r\n // Looks like a plugin didn't pass the (optional) context, so create a new one\r\n if (plugin && isFunction(plugin[strGetTelCtx])) {\r\n // This plugin extends from the BaseTelemetryPlugin so lets use it\r\n itemCtx = plugin[strGetTelCtx]();\r\n }\r\n if (!itemCtx) {\r\n // Create a temporary one\r\n itemCtx = createProcessTelemetryContext(proxyChain, config, core);\r\n }\r\n return itemCtx;\r\n }\r\n function _processChain(itemCtx, processPluginFn, name, details, isAsync) {\r\n var hasRun = false;\r\n var identifier = plugin ? plugin[_DYN_IDENTIFIER /* @min:%2eidentifier */] : strTelemetryPluginChain;\r\n var hasRunContext = itemCtx[strHasRunFlags];\r\n if (!hasRunContext) {\r\n // Assign and populate\r\n hasRunContext = itemCtx[strHasRunFlags] = {};\r\n }\r\n // Ensure that we keep the context in sync\r\n itemCtx.setNext(nextProxy);\r\n if (plugin) {\r\n doPerf(itemCtx[STR_CORE /* @min:%2ecore */](), function () { return identifier + \":\" + name; }, function () {\r\n // Mark this component as having run\r\n hasRunContext[chainId] = true;\r\n try {\r\n // Set a flag on the next plugin so we know if it was attempted to be executed\r\n var nextId = nextProxy ? nextProxy._id : STR_EMPTY;\r\n if (nextId) {\r\n hasRunContext[nextId] = false;\r\n }\r\n hasRun = processPluginFn(itemCtx);\r\n }\r\n catch (error) {\r\n var hasNextRun = nextProxy ? hasRunContext[nextProxy._id] : true;\r\n if (hasNextRun) {\r\n // The next plugin after us has already run so set this one as complete\r\n hasRun = true;\r\n }\r\n if (!nextProxy || !hasNextRun) {\r\n // Either we have no next plugin or the current one did not attempt to call the next plugin\r\n // Which means the current one is the root of the failure so log/report this failure\r\n _throwInternal(itemCtx[_DYN_DIAG_LOG /* @min:%2ediagLog */](), 1 /* eLoggingSeverity.CRITICAL */, 73 /* _eInternalMessageId.PluginException */, \"Plugin [\" + identifier + \"] failed during \" + name + \" - \" + dumpObj(error) + \", run flags: \" + dumpObj(hasRunContext));\r\n }\r\n }\r\n }, details, isAsync);\r\n }\r\n return hasRun;\r\n }\r\n function _processTelemetry(env, itemCtx) {\r\n itemCtx = itemCtx || _getTelCtx();\r\n function _callProcessTelemetry(itemCtx) {\r\n if (!plugin || !hasProcessTelemetry) {\r\n return false;\r\n }\r\n var pluginState = _getPluginState(plugin);\r\n if (pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] || pluginState[STR_DISABLED]) {\r\n return false;\r\n }\r\n // Ensure that we keep the context in sync (for processNext()), just in case a plugin\r\n // doesn't calls processTelemetry() instead of itemContext.processNext() or some\r\n // other form of error occurred\r\n if (hasSetNext) {\r\n // Backward compatibility setting the next plugin on the instance\r\n plugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */](nextProxy);\r\n }\r\n plugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */](env, itemCtx);\r\n // Process Telemetry is expected to call itemCtx.processNext() or nextPlugin.processTelemetry()\r\n return true;\r\n }\r\n if (!_processChain(itemCtx, _callProcessTelemetry, \"processTelemetry\", function () { return ({ item: env }); }, !(env.sync))) {\r\n // The underlying plugin is either not defined, not enabled or does not have a processTelemetry implementation\r\n // so we still want the next plugin to be executed.\r\n itemCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](env);\r\n }\r\n }\r\n function _unloadPlugin(unloadCtx, unloadState) {\r\n function _callTeardown() {\r\n // Setting default of hasRun as false so the proxyProcessFn() is called as teardown() doesn't have to exist or call unloadNext().\r\n var hasRun = false;\r\n if (plugin) {\r\n var pluginState = _getPluginState(plugin);\r\n var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE /* @min:%2ecore */];\r\n // Only teardown the plugin if it was initialized by the current core (i.e. It's not a shared plugin)\r\n if (plugin && (!pluginCore || pluginCore === unloadCtx.core()) && !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */]) {\r\n // Handle plugins that don't extend from the BaseTelemetryPlugin\r\n pluginState[STR_CORE /* @min:%2ecore */] = null;\r\n pluginState[_DYN_TEARDOWN /* @min:%2eteardown */] = true;\r\n pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = false;\r\n if (plugin[_DYN_TEARDOWN /* @min:%2eteardown */] && plugin[_DYN_TEARDOWN /* @min:%2eteardown */](unloadCtx, unloadState) === true) {\r\n // plugin told us that it was going to (or has) call unloadCtx.processNext()\r\n hasRun = true;\r\n }\r\n }\r\n }\r\n return hasRun;\r\n }\r\n if (!_processChain(unloadCtx, _callTeardown, \"unload\", _noopVoid, unloadState.isAsync)) {\r\n // Only called if we hasRun was not true\r\n unloadCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](unloadState);\r\n }\r\n }\r\n function _updatePlugin(updateCtx, updateState) {\r\n function _callUpdate() {\r\n // Setting default of hasRun as false so the proxyProcessFn() is called as teardown() doesn't have to exist or call unloadNext().\r\n var hasRun = false;\r\n if (plugin) {\r\n var pluginState = _getPluginState(plugin);\r\n var pluginCore = plugin[STR_CORE] || pluginState[STR_CORE /* @min:%2ecore */];\r\n // Only update the plugin if it was initialized by the current core (i.e. It's not a shared plugin)\r\n if (plugin && (!pluginCore || pluginCore === updateCtx.core()) && !pluginState[_DYN_TEARDOWN /* @min:%2eteardown */]) {\r\n if (plugin[_DYN_UPDATE /* @min:%2eupdate */] && plugin[_DYN_UPDATE /* @min:%2eupdate */](updateCtx, updateState) === true) {\r\n // plugin told us that it was going to (or has) call unloadCtx.processNext()\r\n hasRun = true;\r\n }\r\n }\r\n }\r\n return hasRun;\r\n }\r\n if (!_processChain(updateCtx, _callUpdate, \"update\", _noopVoid, false)) {\r\n // Only called if we hasRun was not true\r\n updateCtx[_DYN_PROCESS_NEXT /* @min:%2eprocessNext */](updateState);\r\n }\r\n }\r\n return objFreeze(proxyChain);\r\n}\r\n//# sourceMappingURL=ProcessTelemetryContext.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.1
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
import { arrForEach, isNumber, makeGlobRegex, objDefineProps, scheduleTimeout, strIndexOf, strLower, utcNow } from "@nevware21/ts-utils";
|
|
8
|
-
import { _DYN_CANCEL, _DYN_CONFIG, _DYN_EXCEPTION, _DYN_FAILURE, _DYN_HOST, _DYN_IS_INITIALIZED, _DYN_MATCH, _DYN_REQUEST_DURATION, _DYN_THROTTLE, _DYN_TOTAL_REQUEST, _DYN_TYPE } from "../__DynamicConstants";
|
|
8
|
+
import { _DYN_CANCEL, _DYN_CONFIG, _DYN_EXCEPTION, _DYN_FAILURE, _DYN_HAS_OWN_PROPERTY, _DYN_HOST, _DYN_INDEX_OF, _DYN_IS_INITIALIZED, _DYN_I_KEY, _DYN_MATCH, _DYN_REQUEST_DURATION, _DYN_THROTTLE, _DYN_TOTAL_REQUEST, _DYN_TRACK, _DYN_TYPE } from "../__DynamicConstants";
|
|
9
9
|
import { onConfigChange } from "../config/DynamicConfig";
|
|
10
10
|
import { STR_EMPTY } from "../constants/InternalConstants";
|
|
11
11
|
import { _throwInternal, safeGetLogger } from "../diagnostics/DiagnosticLogger";
|
|
@@ -125,14 +125,14 @@ function _createStatsBeat(mgr, statsBeatStats) {
|
|
|
125
125
|
// Add properties if present
|
|
126
126
|
if (properties) {
|
|
127
127
|
for (var key in properties) {
|
|
128
|
-
if (properties
|
|
128
|
+
if (properties[_DYN_HAS_OWN_PROPERTY /* @min:%2ehasOwnProperty */](key)) {
|
|
129
129
|
combinedProps[key] = properties[key];
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
// Add base properties
|
|
134
134
|
for (var key in baseProperties) {
|
|
135
|
-
if (baseProperties
|
|
135
|
+
if (baseProperties[_DYN_HAS_OWN_PROPERTY /* @min:%2ehasOwnProperty */](key)) {
|
|
136
136
|
combinedProps[key] = baseProperties[key];
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -145,7 +145,7 @@ function _createStatsBeat(mgr, statsBeatStats) {
|
|
|
145
145
|
},
|
|
146
146
|
baseType: "MetricData"
|
|
147
147
|
};
|
|
148
|
-
mgr
|
|
148
|
+
mgr[_DYN_TRACK /* @min:%2etrack */](statsBeat, statsbeatEvent);
|
|
149
149
|
}
|
|
150
150
|
}
|
|
151
151
|
function _trackSendRequestDuration() {
|
|
@@ -200,10 +200,10 @@ function _createStatsBeat(mgr, statsBeatStats) {
|
|
|
200
200
|
if (status >= 200 && status < 300) {
|
|
201
201
|
_networkCounter.success++;
|
|
202
202
|
}
|
|
203
|
-
else if (retryArray
|
|
203
|
+
else if (retryArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {
|
|
204
204
|
_networkCounter.retry[status] = (_networkCounter.retry[status] || 0) + 1;
|
|
205
205
|
}
|
|
206
|
-
else if (throttleArray
|
|
206
|
+
else if (throttleArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {
|
|
207
207
|
_networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */][status] = (_networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */][status] || 0) + 1;
|
|
208
208
|
}
|
|
209
209
|
else if (status !== 307 && status !== 308) {
|
|
@@ -317,12 +317,12 @@ export function createStatsMgr() {
|
|
|
317
317
|
var statsKey = _getIKey(endpointCfg, endpoint);
|
|
318
318
|
if (statsKey) {
|
|
319
319
|
// Using this iKey for the statsbeat event
|
|
320
|
-
statsBeatEvent
|
|
320
|
+
statsBeatEvent[_DYN_I_KEY /* @min:%2eiKey */] = statsKey;
|
|
321
321
|
// We have specific config for this endpoint, so we can send the event
|
|
322
322
|
sendEvt = true;
|
|
323
323
|
}
|
|
324
324
|
if (sendEvt) {
|
|
325
|
-
_core
|
|
325
|
+
_core[_DYN_TRACK /* @min:%2etrack */](statsBeatEvent);
|
|
326
326
|
}
|
|
327
327
|
}
|
|
328
328
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatsBeat.js.map","sources":["StatsBeat.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { arrForEach, isNumber, makeGlobRegex, objDefineProps, scheduleTimeout, strIndexOf, strLower, utcNow } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CANCEL, _DYN_CONFIG, _DYN_EXCEPTION, _DYN_FAILURE, _DYN_HOST, _DYN_IS_INITIALIZED, _DYN_MATCH, _DYN_REQUEST_DURATION, _DYN_THROTTLE, _DYN_TOTAL_REQUEST, _DYN_TYPE } from \"../__DynamicConstants\";\r\nimport { onConfigChange } from \"../config/DynamicConfig\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"../diagnostics/DiagnosticLogger\";\r\nimport { isFeatureEnabled } from \"../utils/HelperFuncs\";\r\nvar STATS_COLLECTION_SHORT_INTERVAL = 900000; // 15 minutes\r\nvar STATS_MIN_INTERVAL_SECONDS = 60; // 1 minute\r\nvar STATSBEAT_LANGUAGE = \"JavaScript\";\r\nvar STATSBEAT_TYPE = \"Browser\";\r\n/**\r\n * This function checks if the provided endpoint matches the provided urlMatch. It\r\n * compares the endpoint with the urlMatch in a case-insensitive manner and also checks\r\n * if the endpoint is a substring of the urlMatch. The urlMatch can also be a regex\r\n * pattern, in which case it will be checked against the endpoint using regex.\r\n * @param endpoint - The endpoint to check against the URL.\r\n * @param urlMatch - The URL to check against the endpoint.\r\n * @returns true if the URL matches the endpoint, false otherwise.\r\n */\r\nfunction _isMatchEndpoint(endpoint, urlMatch) {\r\n var lwrUrl = strLower(urlMatch);\r\n // Check if the endpoint is a substring of the URL\r\n if (strIndexOf(endpoint, lwrUrl) !== -1) {\r\n return true;\r\n }\r\n // If it looks like a regex pattern, check if the endpoint matches the regex\r\n if (strIndexOf(lwrUrl, \"*\") != -1 || strIndexOf(lwrUrl, \"?\") != -1) {\r\n // Check if the endpoint is a regex pattern\r\n var regex = makeGlobRegex(lwrUrl);\r\n if (regex.test(endpoint)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Creates a new INetworkStatsbeat instance with the specified host.\r\n * @param host - The host for the INetworkStatsbeat instance.\r\n * @returns A new INetworkStatsbeat instance.\r\n */\r\nfunction _createNetworkStatsbeat(host) {\r\n var _a;\r\n return _a = {\r\n host: host,\r\n totalRequest: 0,\r\n success: 0,\r\n throttle: {},\r\n failure: {},\r\n retry: {},\r\n exception: {}\r\n },\r\n _a[_DYN_REQUEST_DURATION /* @min:requestDuration */] = 0,\r\n _a;\r\n}\r\n/**\r\n * Creates a new IStatsBeat instance with the specified manager callbacks and statsbeat state.\r\n * @param mgr - The manager callbacks to use for the IStatsBeat instance.\r\n * @param statsBeatStats - The statsbeat state to use for the IStatsBeat instance.\r\n * @returns A new IStatsBeat instance.\r\n */\r\nfunction _createStatsBeat(mgr, statsBeatStats) {\r\n var _networkCounter = _createNetworkStatsbeat(statsBeatStats.endpoint);\r\n var _timeoutHandle; // Handle to the timer for sending telemetry. This way, we would not send telemetry when system sleep.\r\n var _isEnabled = true; // Flag to check if statsbeat is enabled or not\r\n function _setupTimer() {\r\n if (_isEnabled && !_timeoutHandle) {\r\n _timeoutHandle = mgr.start(function () {\r\n _timeoutHandle = null;\r\n trackStatsbeats();\r\n });\r\n }\r\n }\r\n function trackStatsbeats() {\r\n if (_isEnabled) {\r\n _trackSendRequestDuration();\r\n _trackSendRequestsCount();\r\n _networkCounter = _createNetworkStatsbeat(_networkCounter[_DYN_HOST /* @min:%2ehost */]);\r\n _timeoutHandle && _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n }\r\n /**\r\n * This is a simple helper that checks if the currently reporting endpoint is the same as this instance was\r\n * created with. This is used to ensure that we only send statsbeat events to the endpoint that was used\r\n * when the instance was created. This is important as the endpoint can change during the lifetime of the\r\n * instance and we don't want to send statsbeat events to the wrong endpoint.\r\n * @param endpoint\r\n * @returns true if the endpoint is the same as the one used to create the instance, false otherwise\r\n */\r\n function _checkEndpoint(endpoint) {\r\n return _networkCounter[_DYN_HOST /* @min:%2ehost */] === endpoint;\r\n }\r\n /**\r\n * Attempt to send statsbeat events to the server. This is done by creating a new event and sending it to the core.\r\n * The event is created with the name and value passed in, and any additional properties are added to the event as well.\r\n * This will only send the event when\r\n * - the statsbeat is enabled\r\n * - the statsbeat key is set for the current endpoint\r\n * - the value is greater than 0\r\n * @param name - The name of the event to send\r\n * @param val - The value of the event to send\r\n * @param properties - Optional additional properties to add to the event\r\n */\r\n function _sendStatsbeats(name, val, properties) {\r\n if (_isEnabled && val && val > 0) {\r\n // Add extra properties\r\n var baseProperties = {\r\n \"rp\": \"unknown\",\r\n \"attach\": \"Manual\",\r\n \"cikey\": statsBeatStats.cKey,\r\n \"os\": STATSBEAT_TYPE,\r\n \"language\": STATSBEAT_LANGUAGE,\r\n \"version\": statsBeatStats.sdkVer || \"unknown\",\r\n \"endpoint\": \"breeze\",\r\n \"host\": _networkCounter[_DYN_HOST /* @min:%2ehost */]\r\n };\r\n // Manually merge properties instead of using spread syntax\r\n var combinedProps = { \"host\": _networkCounter[_DYN_HOST /* @min:%2ehost */] };\r\n // Add properties if present\r\n if (properties) {\r\n for (var key in properties) {\r\n if (properties.hasOwnProperty(key)) {\r\n combinedProps[key] = properties[key];\r\n }\r\n }\r\n }\r\n // Add base properties\r\n for (var key in baseProperties) {\r\n if (baseProperties.hasOwnProperty(key)) {\r\n combinedProps[key] = baseProperties[key];\r\n }\r\n }\r\n var statsbeatEvent = {\r\n name: name,\r\n baseData: {\r\n name: name,\r\n average: val,\r\n properties: combinedProps\r\n },\r\n baseType: \"MetricData\"\r\n };\r\n mgr.track(statsBeat, statsbeatEvent);\r\n }\r\n }\r\n function _trackSendRequestDuration() {\r\n var totalRequest = _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */];\r\n if (_networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] > 0) {\r\n var averageRequestExecutionTime = _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] / totalRequest;\r\n _sendStatsbeats(\"Request_Duration\", averageRequestExecutionTime);\r\n }\r\n }\r\n function _trackSendRequestsCount() {\r\n var currentCounter = _networkCounter;\r\n _sendStatsbeats(\"Request_Success_Count\", currentCounter.success);\r\n for (var code in currentCounter[_DYN_FAILURE /* @min:%2efailure */]) {\r\n var count = currentCounter[_DYN_FAILURE /* @min:%2efailure */][code];\r\n _sendStatsbeats(\"failure\", count, { statusCode: code });\r\n }\r\n for (var code in currentCounter.retry) {\r\n var count = currentCounter.retry[code];\r\n _sendStatsbeats(\"retry\", count, { statusCode: code });\r\n }\r\n for (var code in currentCounter[_DYN_EXCEPTION /* @min:%2eexception */]) {\r\n var count = currentCounter[_DYN_EXCEPTION /* @min:%2eexception */][code];\r\n _sendStatsbeats(\"exception\", count, { exceptionType: code });\r\n }\r\n for (var code in currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */]) {\r\n var count = currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */][code];\r\n _sendStatsbeats(\"Throttle_Count\", count, { statusCode: code });\r\n }\r\n }\r\n function _setEnabled(isEnabled) {\r\n _isEnabled = isEnabled;\r\n if (!_isEnabled) {\r\n if (_timeoutHandle) {\r\n _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n }\r\n }\r\n // THE statsbeat instance being created and returned\r\n var statsBeat = {\r\n enabled: !!_isEnabled,\r\n endpoint: STR_EMPTY,\r\n type: 0 /* eStatsType.SDK */,\r\n count: function (status, payloadData, endpoint) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n if (payloadData && payloadData[\"statsBeatData\"] && payloadData[\"statsBeatData\"][\"startTime\"]) {\r\n _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] = (_networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] || 0) + 1;\r\n _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] += utcNow() - payloadData[\"statsBeatData\"][\"startTime\"];\r\n }\r\n var retryArray = [401, 403, 408, 429, 500, 502, 503, 504];\r\n var throttleArray = [402, 439];\r\n if (status >= 200 && status < 300) {\r\n _networkCounter.success++;\r\n }\r\n else if (retryArray.indexOf(status) !== -1) {\r\n _networkCounter.retry[status] = (_networkCounter.retry[status] || 0) + 1;\r\n }\r\n else if (throttleArray.indexOf(status) !== -1) {\r\n _networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */][status] = (_networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */][status] || 0) + 1;\r\n }\r\n else if (status !== 307 && status !== 308) {\r\n _networkCounter[_DYN_FAILURE /* @min:%2efailure */][status] = (_networkCounter[_DYN_FAILURE /* @min:%2efailure */][status] || 0) + 1;\r\n }\r\n _setupTimer();\r\n }\r\n },\r\n countException: function (endpoint, exceptionType) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n _networkCounter[_DYN_EXCEPTION /* @min:%2eexception */][exceptionType] = (_networkCounter[_DYN_EXCEPTION /* @min:%2eexception */][exceptionType] || 0) + 1;\r\n _setupTimer();\r\n }\r\n }\r\n };\r\n // Make the properties readonly / reactive to changes\r\n return objDefineProps(statsBeat, {\r\n enabled: { g: function () { return _isEnabled; }, s: _setEnabled },\r\n type: { g: function () { return statsBeatStats[_DYN_TYPE /* @min:%2etype */]; } },\r\n endpoint: { g: function () { return _networkCounter[_DYN_HOST /* @min:%2ehost */]; } }\r\n });\r\n}\r\nfunction _getEndpointCfg(statsBeatConfig, type) {\r\n var endpointCfg = null;\r\n if (statsBeatConfig && statsBeatConfig.endCfg) {\r\n arrForEach(statsBeatConfig.endCfg, function (value) {\r\n if (value[_DYN_TYPE /* @min:%2etype */] === type) {\r\n endpointCfg = value;\r\n return -1; // Stop the loop if we found a match\r\n }\r\n });\r\n }\r\n return endpointCfg;\r\n}\r\n/**\r\n * This function retrieves the stats instrumentation key (iKey) for the given endpoint from\r\n * the statsBeatConfig. It iterates through the keys in the statsBeatConfig and checks if\r\n * the endpoint matches any of the URLs associated with that key. If a match is found, it\r\n * returns the corresponding iKey.\r\n * @param statsBeatConfig - The configuration object for StatsBeat.\r\n * @param endpoint - The endpoint to check against the URLs in the configuration.\r\n * @returns The iKey associated with the matching endpoint, or null if no match is found.\r\n */\r\nfunction _getIKey(endpointCfg, endpoint) {\r\n var statsKey = null;\r\n if (endpointCfg.keyMap) {\r\n arrForEach(endpointCfg.keyMap, function (keyMap) {\r\n if (keyMap[_DYN_MATCH /* @min:%2ematch */]) {\r\n arrForEach(keyMap[_DYN_MATCH /* @min:%2ematch */], function (url) {\r\n if (_isMatchEndpoint(url, endpoint)) {\r\n statsKey = keyMap.key || null;\r\n // Stop the loop if we found a match\r\n return -1;\r\n }\r\n });\r\n }\r\n if (statsKey) {\r\n // Stop the loop if we found a match\r\n return -1;\r\n }\r\n });\r\n }\r\n return statsKey;\r\n}\r\nexport function createStatsMgr() {\r\n var _isMgrEnabled = false; // Flag to check if statsbeat is enabled or not\r\n var _core; // The core instance that is used to send telemetry\r\n var _shortInterval = STATS_COLLECTION_SHORT_INTERVAL;\r\n var _statsBeatConfig;\r\n // Lazily initialize the manager and start listening for configuration changes\r\n // This is also required to handle \"unloading\" and then re-initializing again\r\n function _init(core, statsConfig, featureName) {\r\n if (_core) {\r\n // If the core is already set, then just return with an empty unload hook\r\n _throwInternal(safeGetLogger(core), 2 /* eLoggingSeverity.WARNING */, 113 /* _eInternalMessageId.StatsBeatManagerException */, \"StatsBeat manager is already initialized\");\r\n return null;\r\n }\r\n _core = core;\r\n if (core && core[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]()) {\r\n // Start listening for configuration changes from the core config, within a config change handler\r\n // This will support the scenario where the config is changed after the statsbeat has been created\r\n return onConfigChange(core[_DYN_CONFIG /* @min:%2econfig */], function (details) {\r\n // Check the feature state again to see if it has changed\r\n _isMgrEnabled = false;\r\n if (statsConfig && isFeatureEnabled(statsConfig.feature, details.cfg, false) === true) {\r\n // Call the getCfg function to get the latest configuration for the statsbeat instance\r\n // This should also evaluate the throttling level and other settings for the statsbeat instance\r\n // to determine if it should be enabled or not.\r\n _statsBeatConfig = statsConfig.getCfg(core, details.cfg);\r\n if (_statsBeatConfig) {\r\n _isMgrEnabled = true;\r\n _shortInterval = STATS_COLLECTION_SHORT_INTERVAL; // Reset to the default in-case the config is removed / changed\r\n if (isNumber(_statsBeatConfig.shrtInt) && _statsBeatConfig.shrtInt > STATS_MIN_INTERVAL_SECONDS) {\r\n _shortInterval = _statsBeatConfig.shrtInt * 1000; // Convert to milliseconds\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n function _track(statsBeat, statsBeatEvent) {\r\n if (_isMgrEnabled && _statsBeatConfig) {\r\n var endpoint = statsBeat.endpoint;\r\n var sendEvt = !!statsBeat[_DYN_TYPE /* @min:%2etype */];\r\n // Fetching the stats key for the endpoint here to support the scenario where the endpoint is changed\r\n // after the statsbeat instance is created. This will ensure that the correct stats key is used for the endpoint.\r\n // It also avoids the tracking of the statsbeat event if the endpoint is not in the config.\r\n var endpointCfg = _getEndpointCfg(_statsBeatConfig, statsBeat[_DYN_TYPE /* @min:%2etype */]);\r\n if (endpointCfg) {\r\n // Check for key remapping\r\n var statsKey = _getIKey(endpointCfg, endpoint);\r\n if (statsKey) {\r\n // Using this iKey for the statsbeat event\r\n statsBeatEvent.iKey = statsKey;\r\n // We have specific config for this endpoint, so we can send the event\r\n sendEvt = true;\r\n }\r\n if (sendEvt) {\r\n _core.track(statsBeatEvent);\r\n }\r\n }\r\n }\r\n }\r\n function _createInstance(state) {\r\n var instance = null;\r\n if (_isMgrEnabled) {\r\n var callbacks = {\r\n start: function (cb) {\r\n return scheduleTimeout(cb, _shortInterval);\r\n },\r\n track: _track\r\n };\r\n instance = _createStatsBeat(callbacks, state);\r\n }\r\n return instance;\r\n }\r\n var theMgr = {\r\n enabled: false,\r\n newInst: _createInstance,\r\n init: _init\r\n };\r\n return objDefineProps(theMgr, {\r\n \"enabled\": { g: function () { return _isMgrEnabled; } }\r\n });\r\n}\r\n//# sourceMappingURL=StatsBeat.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"StatsBeat.js.map","sources":["StatsBeat.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { arrForEach, isNumber, makeGlobRegex, objDefineProps, scheduleTimeout, strIndexOf, strLower, utcNow } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CANCEL, _DYN_CONFIG, _DYN_EXCEPTION, _DYN_FAILURE, _DYN_HAS_OWN_PROPERTY, _DYN_HOST, _DYN_INDEX_OF, _DYN_IS_INITIALIZED, _DYN_I_KEY, _DYN_MATCH, _DYN_REQUEST_DURATION, _DYN_THROTTLE, _DYN_TOTAL_REQUEST, _DYN_TRACK, _DYN_TYPE } from \"../__DynamicConstants\";\r\nimport { onConfigChange } from \"../config/DynamicConfig\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { _throwInternal, safeGetLogger } from \"../diagnostics/DiagnosticLogger\";\r\nimport { isFeatureEnabled } from \"../utils/HelperFuncs\";\r\nvar STATS_COLLECTION_SHORT_INTERVAL = 900000; // 15 minutes\r\nvar STATS_MIN_INTERVAL_SECONDS = 60; // 1 minute\r\nvar STATSBEAT_LANGUAGE = \"JavaScript\";\r\nvar STATSBEAT_TYPE = \"Browser\";\r\n/**\r\n * This function checks if the provided endpoint matches the provided urlMatch. It\r\n * compares the endpoint with the urlMatch in a case-insensitive manner and also checks\r\n * if the endpoint is a substring of the urlMatch. The urlMatch can also be a regex\r\n * pattern, in which case it will be checked against the endpoint using regex.\r\n * @param endpoint - The endpoint to check against the URL.\r\n * @param urlMatch - The URL to check against the endpoint.\r\n * @returns true if the URL matches the endpoint, false otherwise.\r\n */\r\nfunction _isMatchEndpoint(endpoint, urlMatch) {\r\n var lwrUrl = strLower(urlMatch);\r\n // Check if the endpoint is a substring of the URL\r\n if (strIndexOf(endpoint, lwrUrl) !== -1) {\r\n return true;\r\n }\r\n // If it looks like a regex pattern, check if the endpoint matches the regex\r\n if (strIndexOf(lwrUrl, \"*\") != -1 || strIndexOf(lwrUrl, \"?\") != -1) {\r\n // Check if the endpoint is a regex pattern\r\n var regex = makeGlobRegex(lwrUrl);\r\n if (regex.test(endpoint)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n/**\r\n * Creates a new INetworkStatsbeat instance with the specified host.\r\n * @param host - The host for the INetworkStatsbeat instance.\r\n * @returns A new INetworkStatsbeat instance.\r\n */\r\nfunction _createNetworkStatsbeat(host) {\r\n var _a;\r\n return _a = {\r\n host: host,\r\n totalRequest: 0,\r\n success: 0,\r\n throttle: {},\r\n failure: {},\r\n retry: {},\r\n exception: {}\r\n },\r\n _a[_DYN_REQUEST_DURATION /* @min:requestDuration */] = 0,\r\n _a;\r\n}\r\n/**\r\n * Creates a new IStatsBeat instance with the specified manager callbacks and statsbeat state.\r\n * @param mgr - The manager callbacks to use for the IStatsBeat instance.\r\n * @param statsBeatStats - The statsbeat state to use for the IStatsBeat instance.\r\n * @returns A new IStatsBeat instance.\r\n */\r\nfunction _createStatsBeat(mgr, statsBeatStats) {\r\n var _networkCounter = _createNetworkStatsbeat(statsBeatStats.endpoint);\r\n var _timeoutHandle; // Handle to the timer for sending telemetry. This way, we would not send telemetry when system sleep.\r\n var _isEnabled = true; // Flag to check if statsbeat is enabled or not\r\n function _setupTimer() {\r\n if (_isEnabled && !_timeoutHandle) {\r\n _timeoutHandle = mgr.start(function () {\r\n _timeoutHandle = null;\r\n trackStatsbeats();\r\n });\r\n }\r\n }\r\n function trackStatsbeats() {\r\n if (_isEnabled) {\r\n _trackSendRequestDuration();\r\n _trackSendRequestsCount();\r\n _networkCounter = _createNetworkStatsbeat(_networkCounter[_DYN_HOST /* @min:%2ehost */]);\r\n _timeoutHandle && _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n }\r\n /**\r\n * This is a simple helper that checks if the currently reporting endpoint is the same as this instance was\r\n * created with. This is used to ensure that we only send statsbeat events to the endpoint that was used\r\n * when the instance was created. This is important as the endpoint can change during the lifetime of the\r\n * instance and we don't want to send statsbeat events to the wrong endpoint.\r\n * @param endpoint\r\n * @returns true if the endpoint is the same as the one used to create the instance, false otherwise\r\n */\r\n function _checkEndpoint(endpoint) {\r\n return _networkCounter[_DYN_HOST /* @min:%2ehost */] === endpoint;\r\n }\r\n /**\r\n * Attempt to send statsbeat events to the server. This is done by creating a new event and sending it to the core.\r\n * The event is created with the name and value passed in, and any additional properties are added to the event as well.\r\n * This will only send the event when\r\n * - the statsbeat is enabled\r\n * - the statsbeat key is set for the current endpoint\r\n * - the value is greater than 0\r\n * @param name - The name of the event to send\r\n * @param val - The value of the event to send\r\n * @param properties - Optional additional properties to add to the event\r\n */\r\n function _sendStatsbeats(name, val, properties) {\r\n if (_isEnabled && val && val > 0) {\r\n // Add extra properties\r\n var baseProperties = {\r\n \"rp\": \"unknown\",\r\n \"attach\": \"Manual\",\r\n \"cikey\": statsBeatStats.cKey,\r\n \"os\": STATSBEAT_TYPE,\r\n \"language\": STATSBEAT_LANGUAGE,\r\n \"version\": statsBeatStats.sdkVer || \"unknown\",\r\n \"endpoint\": \"breeze\",\r\n \"host\": _networkCounter[_DYN_HOST /* @min:%2ehost */]\r\n };\r\n // Manually merge properties instead of using spread syntax\r\n var combinedProps = { \"host\": _networkCounter[_DYN_HOST /* @min:%2ehost */] };\r\n // Add properties if present\r\n if (properties) {\r\n for (var key in properties) {\r\n if (properties[_DYN_HAS_OWN_PROPERTY /* @min:%2ehasOwnProperty */](key)) {\r\n combinedProps[key] = properties[key];\r\n }\r\n }\r\n }\r\n // Add base properties\r\n for (var key in baseProperties) {\r\n if (baseProperties[_DYN_HAS_OWN_PROPERTY /* @min:%2ehasOwnProperty */](key)) {\r\n combinedProps[key] = baseProperties[key];\r\n }\r\n }\r\n var statsbeatEvent = {\r\n name: name,\r\n baseData: {\r\n name: name,\r\n average: val,\r\n properties: combinedProps\r\n },\r\n baseType: \"MetricData\"\r\n };\r\n mgr[_DYN_TRACK /* @min:%2etrack */](statsBeat, statsbeatEvent);\r\n }\r\n }\r\n function _trackSendRequestDuration() {\r\n var totalRequest = _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */];\r\n if (_networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] > 0) {\r\n var averageRequestExecutionTime = _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] / totalRequest;\r\n _sendStatsbeats(\"Request_Duration\", averageRequestExecutionTime);\r\n }\r\n }\r\n function _trackSendRequestsCount() {\r\n var currentCounter = _networkCounter;\r\n _sendStatsbeats(\"Request_Success_Count\", currentCounter.success);\r\n for (var code in currentCounter[_DYN_FAILURE /* @min:%2efailure */]) {\r\n var count = currentCounter[_DYN_FAILURE /* @min:%2efailure */][code];\r\n _sendStatsbeats(\"failure\", count, { statusCode: code });\r\n }\r\n for (var code in currentCounter.retry) {\r\n var count = currentCounter.retry[code];\r\n _sendStatsbeats(\"retry\", count, { statusCode: code });\r\n }\r\n for (var code in currentCounter[_DYN_EXCEPTION /* @min:%2eexception */]) {\r\n var count = currentCounter[_DYN_EXCEPTION /* @min:%2eexception */][code];\r\n _sendStatsbeats(\"exception\", count, { exceptionType: code });\r\n }\r\n for (var code in currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */]) {\r\n var count = currentCounter[_DYN_THROTTLE /* @min:%2ethrottle */][code];\r\n _sendStatsbeats(\"Throttle_Count\", count, { statusCode: code });\r\n }\r\n }\r\n function _setEnabled(isEnabled) {\r\n _isEnabled = isEnabled;\r\n if (!_isEnabled) {\r\n if (_timeoutHandle) {\r\n _timeoutHandle[_DYN_CANCEL /* @min:%2ecancel */]();\r\n _timeoutHandle = null;\r\n }\r\n }\r\n }\r\n // THE statsbeat instance being created and returned\r\n var statsBeat = {\r\n enabled: !!_isEnabled,\r\n endpoint: STR_EMPTY,\r\n type: 0 /* eStatsType.SDK */,\r\n count: function (status, payloadData, endpoint) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n if (payloadData && payloadData[\"statsBeatData\"] && payloadData[\"statsBeatData\"][\"startTime\"]) {\r\n _networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] = (_networkCounter[_DYN_TOTAL_REQUEST /* @min:%2etotalRequest */] || 0) + 1;\r\n _networkCounter[_DYN_REQUEST_DURATION /* @min:%2erequestDuration */] += utcNow() - payloadData[\"statsBeatData\"][\"startTime\"];\r\n }\r\n var retryArray = [401, 403, 408, 429, 500, 502, 503, 504];\r\n var throttleArray = [402, 439];\r\n if (status >= 200 && status < 300) {\r\n _networkCounter.success++;\r\n }\r\n else if (retryArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {\r\n _networkCounter.retry[status] = (_networkCounter.retry[status] || 0) + 1;\r\n }\r\n else if (throttleArray[_DYN_INDEX_OF /* @min:%2eindexOf */](status) !== -1) {\r\n _networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */][status] = (_networkCounter[_DYN_THROTTLE /* @min:%2ethrottle */][status] || 0) + 1;\r\n }\r\n else if (status !== 307 && status !== 308) {\r\n _networkCounter[_DYN_FAILURE /* @min:%2efailure */][status] = (_networkCounter[_DYN_FAILURE /* @min:%2efailure */][status] || 0) + 1;\r\n }\r\n _setupTimer();\r\n }\r\n },\r\n countException: function (endpoint, exceptionType) {\r\n if (_isEnabled && _checkEndpoint(endpoint)) {\r\n _networkCounter[_DYN_EXCEPTION /* @min:%2eexception */][exceptionType] = (_networkCounter[_DYN_EXCEPTION /* @min:%2eexception */][exceptionType] || 0) + 1;\r\n _setupTimer();\r\n }\r\n }\r\n };\r\n // Make the properties readonly / reactive to changes\r\n return objDefineProps(statsBeat, {\r\n enabled: { g: function () { return _isEnabled; }, s: _setEnabled },\r\n type: { g: function () { return statsBeatStats[_DYN_TYPE /* @min:%2etype */]; } },\r\n endpoint: { g: function () { return _networkCounter[_DYN_HOST /* @min:%2ehost */]; } }\r\n });\r\n}\r\nfunction _getEndpointCfg(statsBeatConfig, type) {\r\n var endpointCfg = null;\r\n if (statsBeatConfig && statsBeatConfig.endCfg) {\r\n arrForEach(statsBeatConfig.endCfg, function (value) {\r\n if (value[_DYN_TYPE /* @min:%2etype */] === type) {\r\n endpointCfg = value;\r\n return -1; // Stop the loop if we found a match\r\n }\r\n });\r\n }\r\n return endpointCfg;\r\n}\r\n/**\r\n * This function retrieves the stats instrumentation key (iKey) for the given endpoint from\r\n * the statsBeatConfig. It iterates through the keys in the statsBeatConfig and checks if\r\n * the endpoint matches any of the URLs associated with that key. If a match is found, it\r\n * returns the corresponding iKey.\r\n * @param statsBeatConfig - The configuration object for StatsBeat.\r\n * @param endpoint - The endpoint to check against the URLs in the configuration.\r\n * @returns The iKey associated with the matching endpoint, or null if no match is found.\r\n */\r\nfunction _getIKey(endpointCfg, endpoint) {\r\n var statsKey = null;\r\n if (endpointCfg.keyMap) {\r\n arrForEach(endpointCfg.keyMap, function (keyMap) {\r\n if (keyMap[_DYN_MATCH /* @min:%2ematch */]) {\r\n arrForEach(keyMap[_DYN_MATCH /* @min:%2ematch */], function (url) {\r\n if (_isMatchEndpoint(url, endpoint)) {\r\n statsKey = keyMap.key || null;\r\n // Stop the loop if we found a match\r\n return -1;\r\n }\r\n });\r\n }\r\n if (statsKey) {\r\n // Stop the loop if we found a match\r\n return -1;\r\n }\r\n });\r\n }\r\n return statsKey;\r\n}\r\nexport function createStatsMgr() {\r\n var _isMgrEnabled = false; // Flag to check if statsbeat is enabled or not\r\n var _core; // The core instance that is used to send telemetry\r\n var _shortInterval = STATS_COLLECTION_SHORT_INTERVAL;\r\n var _statsBeatConfig;\r\n // Lazily initialize the manager and start listening for configuration changes\r\n // This is also required to handle \"unloading\" and then re-initializing again\r\n function _init(core, statsConfig, featureName) {\r\n if (_core) {\r\n // If the core is already set, then just return with an empty unload hook\r\n _throwInternal(safeGetLogger(core), 2 /* eLoggingSeverity.WARNING */, 113 /* _eInternalMessageId.StatsBeatManagerException */, \"StatsBeat manager is already initialized\");\r\n return null;\r\n }\r\n _core = core;\r\n if (core && core[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]()) {\r\n // Start listening for configuration changes from the core config, within a config change handler\r\n // This will support the scenario where the config is changed after the statsbeat has been created\r\n return onConfigChange(core[_DYN_CONFIG /* @min:%2econfig */], function (details) {\r\n // Check the feature state again to see if it has changed\r\n _isMgrEnabled = false;\r\n if (statsConfig && isFeatureEnabled(statsConfig.feature, details.cfg, false) === true) {\r\n // Call the getCfg function to get the latest configuration for the statsbeat instance\r\n // This should also evaluate the throttling level and other settings for the statsbeat instance\r\n // to determine if it should be enabled or not.\r\n _statsBeatConfig = statsConfig.getCfg(core, details.cfg);\r\n if (_statsBeatConfig) {\r\n _isMgrEnabled = true;\r\n _shortInterval = STATS_COLLECTION_SHORT_INTERVAL; // Reset to the default in-case the config is removed / changed\r\n if (isNumber(_statsBeatConfig.shrtInt) && _statsBeatConfig.shrtInt > STATS_MIN_INTERVAL_SECONDS) {\r\n _shortInterval = _statsBeatConfig.shrtInt * 1000; // Convert to milliseconds\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n function _track(statsBeat, statsBeatEvent) {\r\n if (_isMgrEnabled && _statsBeatConfig) {\r\n var endpoint = statsBeat.endpoint;\r\n var sendEvt = !!statsBeat[_DYN_TYPE /* @min:%2etype */];\r\n // Fetching the stats key for the endpoint here to support the scenario where the endpoint is changed\r\n // after the statsbeat instance is created. This will ensure that the correct stats key is used for the endpoint.\r\n // It also avoids the tracking of the statsbeat event if the endpoint is not in the config.\r\n var endpointCfg = _getEndpointCfg(_statsBeatConfig, statsBeat[_DYN_TYPE /* @min:%2etype */]);\r\n if (endpointCfg) {\r\n // Check for key remapping\r\n var statsKey = _getIKey(endpointCfg, endpoint);\r\n if (statsKey) {\r\n // Using this iKey for the statsbeat event\r\n statsBeatEvent[_DYN_I_KEY /* @min:%2eiKey */] = statsKey;\r\n // We have specific config for this endpoint, so we can send the event\r\n sendEvt = true;\r\n }\r\n if (sendEvt) {\r\n _core[_DYN_TRACK /* @min:%2etrack */](statsBeatEvent);\r\n }\r\n }\r\n }\r\n }\r\n function _createInstance(state) {\r\n var instance = null;\r\n if (_isMgrEnabled) {\r\n var callbacks = {\r\n start: function (cb) {\r\n return scheduleTimeout(cb, _shortInterval);\r\n },\r\n track: _track\r\n };\r\n instance = _createStatsBeat(callbacks, state);\r\n }\r\n return instance;\r\n }\r\n var theMgr = {\r\n enabled: false,\r\n newInst: _createInstance,\r\n init: _init\r\n };\r\n return objDefineProps(theMgr, {\r\n \"enabled\": { g: function () { return _isMgrEnabled; } }\r\n });\r\n}\r\n//# sourceMappingURL=StatsBeat.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.1
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
import { arrForEach, isFunction, objDefineProps } from "@nevware21/ts-utils";
|
|
8
|
-
import { _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_INITIALIZE, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_PATHNAME, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_SET_TRACE_FLAGS, _DYN_SPAN_ID, _DYN_TEARDOWN, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_STATE, _DYN__DO_TEARDOWN } from "../__DynamicConstants";
|
|
8
|
+
import { _DYN_CALL, _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_INITIALIZE, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_PATHNAME, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_SET_TRACE_FLAGS, _DYN_SPAN_ID, _DYN_TEARDOWN, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_STATE, _DYN__DO_TEARDOWN } from "../__DynamicConstants";
|
|
9
9
|
import { STR_CORE, STR_EMPTY, STR_PRIORITY, STR_PROCESS_TELEMETRY, UNDEFINED_VALUE } from "../constants/InternalConstants";
|
|
10
10
|
import { createOTelSpanContext } from "../otel/api/trace/spanContext";
|
|
11
11
|
import { isOTelTraceState } from "../otel/api/trace/traceState";
|
|
@@ -101,7 +101,7 @@ export function unloadComponents(components, unloadCtx, unloadState, asyncCallba
|
|
|
101
101
|
if (component) {
|
|
102
102
|
var func = component._doUnload || component[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */];
|
|
103
103
|
if (isFunction(func)) {
|
|
104
|
-
if (func
|
|
104
|
+
if (func[_DYN_CALL /* @min:%2ecall */](component, unloadCtx, unloadState, _doUnload) === true) {
|
|
105
105
|
return true;
|
|
106
106
|
}
|
|
107
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryHelpers.js.map","sources":["TelemetryHelpers.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { arrForEach, isFunction, objDefineProps } from \"@nevware21/ts-utils\";\r\nimport { _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_INITIALIZE, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_PATHNAME, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_SET_TRACE_FLAGS, _DYN_SPAN_ID, _DYN_TEARDOWN, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_STATE, _DYN__DO_TEARDOWN } from \"../__DynamicConstants\";\r\nimport { STR_CORE, STR_EMPTY, STR_PRIORITY, STR_PROCESS_TELEMETRY, UNDEFINED_VALUE } from \"../constants/InternalConstants\";\r\nimport { createOTelSpanContext } from \"../otel/api/trace/spanContext\";\r\nimport { isOTelTraceState } from \"../otel/api/trace/traceState\";\r\nimport { createW3cTraceState } from \"../telemetry/W3cTraceState\";\r\nimport { generateW3CId } from \"../utils/CoreUtils\";\r\nimport { createElmNodeData } from \"../utils/DataCacheHelper\";\r\nimport { getLocation } from \"../utils/EnvUtils\";\r\nimport { setProtoTypeName } from \"../utils/HelperFuncs\";\r\nimport { isValidSpanId, isValidTraceId } from \"../utils/TraceParent\";\r\nvar pluginStateData = createElmNodeData(\"plugin\");\r\nexport function _getPluginState(plugin) {\r\n return pluginStateData.get(plugin, \"state\", {}, true);\r\n}\r\n/**\r\n * Initialize the queue of plugins\r\n * @param plugins - The array of plugins to initialize and setting of the next plugin\r\n * @param config - The current config for the instance\r\n * @param core - THe current core instance\r\n * @param extensions - The extensions\r\n */\r\nexport function initializePlugins(processContext, extensions) {\r\n // Set the next plugin and identified the uninitialized plugins\r\n var initPlugins = [];\r\n var lastPlugin = null;\r\n var proxy = processContext[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n var pluginState;\r\n while (proxy) {\r\n var thePlugin = proxy[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]();\r\n if (thePlugin) {\r\n if (lastPlugin && lastPlugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */] && thePlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */]) {\r\n // Set this plugin as the next for the previous one\r\n lastPlugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */](thePlugin);\r\n }\r\n pluginState = _getPluginState(thePlugin);\r\n var isInitialized = !!pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */];\r\n if (thePlugin[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]) {\r\n isInitialized = thePlugin[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]();\r\n }\r\n if (!isInitialized) {\r\n initPlugins[_DYN_PUSH /* @min:%2epush */](thePlugin);\r\n }\r\n lastPlugin = thePlugin;\r\n proxy = proxy[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n }\r\n // Now initialize the plugins\r\n arrForEach(initPlugins, function (thePlugin) {\r\n var core = processContext[STR_CORE /* @min:%2ecore */]();\r\n thePlugin[_DYN_INITIALIZE /* @min:%2einitialize */](processContext.getCfg(), core, extensions, processContext[_DYN_GET_NEXT /* @min:%2egetNext */]());\r\n pluginState = _getPluginState(thePlugin);\r\n // Only add the core to the state if the plugin didn't set it (doesn't extend from BaseTelemetryPlugin)\r\n if (!thePlugin[STR_CORE] && !pluginState[STR_CORE]) {\r\n pluginState[STR_CORE] = core;\r\n }\r\n pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = true;\r\n delete pluginState[_DYN_TEARDOWN /* @min:%2eteardown */];\r\n });\r\n}\r\nexport function sortPlugins(plugins) {\r\n // Sort by priority\r\n return plugins.sort(function (extA, extB) {\r\n var result = 0;\r\n if (extB) {\r\n var bHasProcess = extB[STR_PROCESS_TELEMETRY];\r\n if (extA[STR_PROCESS_TELEMETRY]) {\r\n result = bHasProcess ? extA[STR_PRIORITY] - extB[STR_PRIORITY] : 1;\r\n }\r\n else if (bHasProcess) {\r\n result = -1;\r\n }\r\n }\r\n else {\r\n result = extA ? 1 : -1;\r\n }\r\n return result;\r\n });\r\n // sort complete\r\n}\r\n/**\r\n * Teardown / Unload helper to perform teardown/unloading operations for the provided components synchronously or asynchronously, this will call any\r\n * _doTeardown() or _doUnload() functions on the provided components to allow them to finish removal.\r\n * @param components - The components you want to unload\r\n * @param unloadCtx - This is the context that should be used during unloading.\r\n * @param unloadState - The details / state of the unload process, it holds details like whether it should be unloaded synchronously or asynchronously and the reason for the unload.\r\n * @param asyncCallback - An optional callback that the plugin must call if it returns true to inform the caller that it has completed any async unload/teardown operations.\r\n * @returns boolean - true if the plugin has or will call asyncCallback, this allows the plugin to perform any asynchronous operations.\r\n */\r\nexport function unloadComponents(components, unloadCtx, unloadState, asyncCallback) {\r\n var idx = 0;\r\n function _doUnload() {\r\n while (idx < components[_DYN_LENGTH /* @min:%2elength */]) {\r\n var component = components[idx++];\r\n if (component) {\r\n var func = component._doUnload || component[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */];\r\n if (isFunction(func)) {\r\n if (func.call(component, unloadCtx, unloadState, _doUnload) === true) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return _doUnload();\r\n}\r\n/*#__NO_SIDE_EFFECTS__*/\r\nexport function isDistributedTraceContext(obj) {\r\n return obj &&\r\n isFunction(obj.getName) &&\r\n isFunction(obj.getTraceId) &&\r\n isFunction(obj.getSpanId) &&\r\n isFunction(obj.getTraceFlags) &&\r\n isFunction(obj.setName) &&\r\n isFunction(obj.setTraceId) &&\r\n isFunction(obj.setSpanId) &&\r\n isFunction(obj[_DYN_SET_TRACE_FLAGS /* @min:%2esetTraceFlags */]);\r\n}\r\n/**\r\n * Creates an IDistributedTraceContext instance that ensures a valid traceId is always available.\r\n * The traceId will be inherited from the parent context if valid, otherwise a new random W3C trace ID is generated.\r\n *\r\n * @param parent - An optional parent {@link IDistributedTraceContext} or {@link IOTelSpanContext} to inherit\r\n * trace context values from. If provided, the traceId and spanId will be copied from the parent if they are valid.\r\n * When the parent is an {@link IDistributedTraceContext}, it will be set as the parentCtx property to maintain\r\n * hierarchical relationships and enable parent context updates.\r\n * When the parent is an {@link IOTelSpanContext}, the parentCtx will be null because OpenTelemetry span contexts\r\n * are read-only data sources that don't support the same hierarchical management methods as IDistributedTraceContext.\r\n * The core instance will create a wrapped IDistributedTraceContext instance from the IOTelSpanContext data\r\n * to enable Application Insights distributed tracing functionality while maintaining OpenTelemetry compatibility.\r\n *\r\n * @returns A new IDistributedTraceContext instance with the following behavior:\r\n * - **traceId**: Always present - either inherited from parent (if valid) or newly generated W3C trace ID\r\n * - **spanId**: Inherited from parent if valid, otherwise empty string\r\n * - **traceFlags**: Inherited from parent if available, otherwise undefined\r\n * - **pageName**: Inherited from parent context or derived from current location, defaults to \"_unknown_\"\r\n * - **traceState**: Lazily created W3C trace state, inheriting from parent if available\r\n *\r\n * @remarks\r\n * This function ensures consistent distributed tracing by guaranteeing that every context has a valid traceId,\r\n * which is essential for the refactored W3C trace state implementation. The spanId may be empty until a\r\n * specific span is created, which is normal behavior for trace contexts.\r\n *\r\n * The distinction between IDistributedTraceContext and IOTelSpanContext parents is important:\r\n * - IDistributedTraceContext parents enable bidirectional updates and hierarchical management\r\n * - IOTelSpanContext parents are used only for initial data extraction and OpenTelemetry compatibility\r\n */\r\n/*#__NO_SIDE_EFFECTS__*/\r\nexport function createDistributedTraceContext(parent) {\r\n var _a;\r\n var parentCtx = null;\r\n var initCtx = null;\r\n var traceId = (parent && isValidTraceId(parent[_DYN_TRACE_ID /* @min:%2etraceId */])) ? parent[_DYN_TRACE_ID /* @min:%2etraceId */] : generateW3CId();\r\n var spanId = (parent && isValidSpanId(parent[_DYN_SPAN_ID /* @min:%2espanId */])) ? parent[_DYN_SPAN_ID /* @min:%2espanId */] : STR_EMPTY;\r\n var traceFlags = parent ? parent[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] : UNDEFINED_VALUE;\r\n var isRemote = parent ? parent.isRemote : false;\r\n var pageName = STR_EMPTY;\r\n var traceState = null;\r\n if (parent) {\r\n if (isDistributedTraceContext(parent)) {\r\n parentCtx = parent;\r\n pageName = parentCtx.getName();\r\n }\r\n else {\r\n initCtx = parent;\r\n }\r\n }\r\n if (!pageName) {\r\n pageName = \"_unknown_\";\r\n // If we have a location, use that as the page name\r\n var location_1 = getLocation();\r\n if (location_1 && location_1[_DYN_PATHNAME /* @min:%2epathname */]) {\r\n pageName = location_1[_DYN_PATHNAME /* @min:%2epathname */] + (location_1.hash || \"\");\r\n }\r\n }\r\n function _getName() {\r\n return pageName;\r\n }\r\n function _setPageNameFn(updateParent) {\r\n return function (newValue) {\r\n if (updateParent) {\r\n parentCtx && parentCtx.setName(newValue);\r\n }\r\n pageName = newValue;\r\n };\r\n }\r\n function _getTraceId() {\r\n return traceId;\r\n }\r\n function _setTraceIdFn(updateParent) {\r\n return function (newValue) {\r\n if (updateParent) {\r\n parentCtx && parentCtx.setTraceId(newValue);\r\n }\r\n if (isValidTraceId(newValue)) {\r\n traceId = newValue;\r\n }\r\n };\r\n }\r\n function _getSpanId() {\r\n return spanId;\r\n }\r\n function _setSpanIdFn(updateParent) {\r\n return function (newValue) {\r\n if (updateParent) {\r\n parentCtx && parentCtx.setSpanId(newValue);\r\n }\r\n if (isValidSpanId(newValue)) {\r\n spanId = newValue;\r\n }\r\n };\r\n }\r\n function _getTraceFlags() {\r\n return traceFlags;\r\n }\r\n function _setTraceFlagsFn(updateParent) {\r\n return function (newTraceFlags) {\r\n if (updateParent) {\r\n parentCtx && parentCtx[_DYN_SET_TRACE_FLAGS /* @min:%2esetTraceFlags */](newTraceFlags);\r\n }\r\n traceFlags = newTraceFlags;\r\n };\r\n }\r\n function _getTraceState() {\r\n if (!traceState) {\r\n if (!parentCtx) {\r\n // The passed in parent was not an IDistributedTraceContext\r\n if (initCtx) {\r\n if (isOTelTraceState(initCtx[_DYN_TRACE_STATE /* @min:%2etraceState */])) {\r\n // This looks like an IOTelSpanContext, so we have to just use the passed traceState as-is as it doesn't support\r\n // the W3cTraceState heirarchy methods\r\n traceState = createW3cTraceState(initCtx[_DYN_TRACE_STATE /* @min:%2etraceState */].serialize() || STR_EMPTY, parentCtx ? parentCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] : undefined);\r\n }\r\n else {\r\n // This looks like an IDistributedTraceInit, so we can create a new W3cTraceState\r\n traceState = createW3cTraceState(STR_EMPTY, initCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] || (parentCtx ? parentCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] : undefined));\r\n }\r\n }\r\n }\r\n if (!traceState) {\r\n traceState = createW3cTraceState(STR_EMPTY, parentCtx ? parentCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] : undefined);\r\n }\r\n }\r\n return traceState;\r\n }\r\n var otelSpanCtx = null;\r\n var traceCtx = setProtoTypeName((_a = {\r\n getName: _getName,\r\n setName: _setPageNameFn(true),\r\n getTraceId: _getTraceId,\r\n setTraceId: _setTraceIdFn(true),\r\n getSpanId: _getSpanId,\r\n setSpanId: _setSpanIdFn(true),\r\n getTraceFlags: _getTraceFlags\r\n },\r\n _a[_DYN_SET_TRACE_FLAGS /* @min:setTraceFlags */] = _setTraceFlagsFn(true),\r\n _a.traceId = traceId,\r\n _a.spanId = spanId,\r\n _a.traceFlags = traceFlags,\r\n _a.traceState = traceState,\r\n _a.isRemote = isRemote,\r\n _a.pageName = pageName,\r\n _a.getOTelSpanContext = function () {\r\n if (!otelSpanCtx) {\r\n // Lazily create the OTel Span Context\r\n otelSpanCtx = createOTelSpanContext(traceCtx);\r\n }\r\n return otelSpanCtx;\r\n },\r\n _a), \"DistributedTraceContext\");\r\n return objDefineProps(traceCtx, {\r\n pageName: {\r\n g: _getName,\r\n s: _setPageNameFn(false)\r\n },\r\n traceId: {\r\n g: _getTraceId,\r\n s: _setTraceIdFn(false)\r\n },\r\n spanId: {\r\n g: _getSpanId,\r\n s: _setSpanIdFn(false)\r\n },\r\n traceFlags: {\r\n g: _getTraceFlags,\r\n s: _setTraceFlagsFn(false)\r\n },\r\n isRemote: {\r\n v: isRemote,\r\n w: false\r\n },\r\n traceState: {\r\n g: _getTraceState\r\n },\r\n parentCtx: {\r\n g: function () { return parentCtx; }\r\n },\r\n _parent: {\r\n g: function () {\r\n var result;\r\n if (parentCtx) {\r\n result = {\r\n t: \"traceCtx\",\r\n v: parentCtx\r\n };\r\n }\r\n else if (initCtx) {\r\n result = {\r\n t: \"initCtx\",\r\n v: initCtx\r\n };\r\n }\r\n return result;\r\n }\r\n }\r\n });\r\n}\r\n//# sourceMappingURL=TelemetryHelpers.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"TelemetryHelpers.js.map","sources":["TelemetryHelpers.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { arrForEach, isFunction, objDefineProps } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CALL, _DYN_GET_NEXT, _DYN_GET_PLUGIN, _DYN_INITIALIZE, _DYN_IS_INITIALIZED, _DYN_LENGTH, _DYN_PATHNAME, _DYN_PUSH, _DYN_SET_NEXT_PLUGIN, _DYN_SET_TRACE_FLAGS, _DYN_SPAN_ID, _DYN_TEARDOWN, _DYN_TRACE_FLAGS, _DYN_TRACE_ID, _DYN_TRACE_STATE, _DYN__DO_TEARDOWN } from \"../__DynamicConstants\";\r\nimport { STR_CORE, STR_EMPTY, STR_PRIORITY, STR_PROCESS_TELEMETRY, UNDEFINED_VALUE } from \"../constants/InternalConstants\";\r\nimport { createOTelSpanContext } from \"../otel/api/trace/spanContext\";\r\nimport { isOTelTraceState } from \"../otel/api/trace/traceState\";\r\nimport { createW3cTraceState } from \"../telemetry/W3cTraceState\";\r\nimport { generateW3CId } from \"../utils/CoreUtils\";\r\nimport { createElmNodeData } from \"../utils/DataCacheHelper\";\r\nimport { getLocation } from \"../utils/EnvUtils\";\r\nimport { setProtoTypeName } from \"../utils/HelperFuncs\";\r\nimport { isValidSpanId, isValidTraceId } from \"../utils/TraceParent\";\r\nvar pluginStateData = createElmNodeData(\"plugin\");\r\nexport function _getPluginState(plugin) {\r\n return pluginStateData.get(plugin, \"state\", {}, true);\r\n}\r\n/**\r\n * Initialize the queue of plugins\r\n * @param plugins - The array of plugins to initialize and setting of the next plugin\r\n * @param config - The current config for the instance\r\n * @param core - THe current core instance\r\n * @param extensions - The extensions\r\n */\r\nexport function initializePlugins(processContext, extensions) {\r\n // Set the next plugin and identified the uninitialized plugins\r\n var initPlugins = [];\r\n var lastPlugin = null;\r\n var proxy = processContext[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n var pluginState;\r\n while (proxy) {\r\n var thePlugin = proxy[_DYN_GET_PLUGIN /* @min:%2egetPlugin */]();\r\n if (thePlugin) {\r\n if (lastPlugin && lastPlugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */] && thePlugin[STR_PROCESS_TELEMETRY /* @min:%2eprocessTelemetry */]) {\r\n // Set this plugin as the next for the previous one\r\n lastPlugin[_DYN_SET_NEXT_PLUGIN /* @min:%2esetNextPlugin */](thePlugin);\r\n }\r\n pluginState = _getPluginState(thePlugin);\r\n var isInitialized = !!pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */];\r\n if (thePlugin[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]) {\r\n isInitialized = thePlugin[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */]();\r\n }\r\n if (!isInitialized) {\r\n initPlugins[_DYN_PUSH /* @min:%2epush */](thePlugin);\r\n }\r\n lastPlugin = thePlugin;\r\n proxy = proxy[_DYN_GET_NEXT /* @min:%2egetNext */]();\r\n }\r\n }\r\n // Now initialize the plugins\r\n arrForEach(initPlugins, function (thePlugin) {\r\n var core = processContext[STR_CORE /* @min:%2ecore */]();\r\n thePlugin[_DYN_INITIALIZE /* @min:%2einitialize */](processContext.getCfg(), core, extensions, processContext[_DYN_GET_NEXT /* @min:%2egetNext */]());\r\n pluginState = _getPluginState(thePlugin);\r\n // Only add the core to the state if the plugin didn't set it (doesn't extend from BaseTelemetryPlugin)\r\n if (!thePlugin[STR_CORE] && !pluginState[STR_CORE]) {\r\n pluginState[STR_CORE] = core;\r\n }\r\n pluginState[_DYN_IS_INITIALIZED /* @min:%2eisInitialized */] = true;\r\n delete pluginState[_DYN_TEARDOWN /* @min:%2eteardown */];\r\n });\r\n}\r\nexport function sortPlugins(plugins) {\r\n // Sort by priority\r\n return plugins.sort(function (extA, extB) {\r\n var result = 0;\r\n if (extB) {\r\n var bHasProcess = extB[STR_PROCESS_TELEMETRY];\r\n if (extA[STR_PROCESS_TELEMETRY]) {\r\n result = bHasProcess ? extA[STR_PRIORITY] - extB[STR_PRIORITY] : 1;\r\n }\r\n else if (bHasProcess) {\r\n result = -1;\r\n }\r\n }\r\n else {\r\n result = extA ? 1 : -1;\r\n }\r\n return result;\r\n });\r\n // sort complete\r\n}\r\n/**\r\n * Teardown / Unload helper to perform teardown/unloading operations for the provided components synchronously or asynchronously, this will call any\r\n * _doTeardown() or _doUnload() functions on the provided components to allow them to finish removal.\r\n * @param components - The components you want to unload\r\n * @param unloadCtx - This is the context that should be used during unloading.\r\n * @param unloadState - The details / state of the unload process, it holds details like whether it should be unloaded synchronously or asynchronously and the reason for the unload.\r\n * @param asyncCallback - An optional callback that the plugin must call if it returns true to inform the caller that it has completed any async unload/teardown operations.\r\n * @returns boolean - true if the plugin has or will call asyncCallback, this allows the plugin to perform any asynchronous operations.\r\n */\r\nexport function unloadComponents(components, unloadCtx, unloadState, asyncCallback) {\r\n var idx = 0;\r\n function _doUnload() {\r\n while (idx < components[_DYN_LENGTH /* @min:%2elength */]) {\r\n var component = components[idx++];\r\n if (component) {\r\n var func = component._doUnload || component[_DYN__DO_TEARDOWN /* @min:%2e_doTeardown */];\r\n if (isFunction(func)) {\r\n if (func[_DYN_CALL /* @min:%2ecall */](component, unloadCtx, unloadState, _doUnload) === true) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return _doUnload();\r\n}\r\n/*#__NO_SIDE_EFFECTS__*/\r\nexport function isDistributedTraceContext(obj) {\r\n return obj &&\r\n isFunction(obj.getName) &&\r\n isFunction(obj.getTraceId) &&\r\n isFunction(obj.getSpanId) &&\r\n isFunction(obj.getTraceFlags) &&\r\n isFunction(obj.setName) &&\r\n isFunction(obj.setTraceId) &&\r\n isFunction(obj.setSpanId) &&\r\n isFunction(obj[_DYN_SET_TRACE_FLAGS /* @min:%2esetTraceFlags */]);\r\n}\r\n/**\r\n * Creates an IDistributedTraceContext instance that ensures a valid traceId is always available.\r\n * The traceId will be inherited from the parent context if valid, otherwise a new random W3C trace ID is generated.\r\n *\r\n * @param parent - An optional parent {@link IDistributedTraceContext} or {@link IOTelSpanContext} to inherit\r\n * trace context values from. If provided, the traceId and spanId will be copied from the parent if they are valid.\r\n * When the parent is an {@link IDistributedTraceContext}, it will be set as the parentCtx property to maintain\r\n * hierarchical relationships and enable parent context updates.\r\n * When the parent is an {@link IOTelSpanContext}, the parentCtx will be null because OpenTelemetry span contexts\r\n * are read-only data sources that don't support the same hierarchical management methods as IDistributedTraceContext.\r\n * The core instance will create a wrapped IDistributedTraceContext instance from the IOTelSpanContext data\r\n * to enable Application Insights distributed tracing functionality while maintaining OpenTelemetry compatibility.\r\n *\r\n * @returns A new IDistributedTraceContext instance with the following behavior:\r\n * - **traceId**: Always present - either inherited from parent (if valid) or newly generated W3C trace ID\r\n * - **spanId**: Inherited from parent if valid, otherwise empty string\r\n * - **traceFlags**: Inherited from parent if available, otherwise undefined\r\n * - **pageName**: Inherited from parent context or derived from current location, defaults to \"_unknown_\"\r\n * - **traceState**: Lazily created W3C trace state, inheriting from parent if available\r\n *\r\n * @remarks\r\n * This function ensures consistent distributed tracing by guaranteeing that every context has a valid traceId,\r\n * which is essential for the refactored W3C trace state implementation. The spanId may be empty until a\r\n * specific span is created, which is normal behavior for trace contexts.\r\n *\r\n * The distinction between IDistributedTraceContext and IOTelSpanContext parents is important:\r\n * - IDistributedTraceContext parents enable bidirectional updates and hierarchical management\r\n * - IOTelSpanContext parents are used only for initial data extraction and OpenTelemetry compatibility\r\n */\r\n/*#__NO_SIDE_EFFECTS__*/\r\nexport function createDistributedTraceContext(parent) {\r\n var _a;\r\n var parentCtx = null;\r\n var initCtx = null;\r\n var traceId = (parent && isValidTraceId(parent[_DYN_TRACE_ID /* @min:%2etraceId */])) ? parent[_DYN_TRACE_ID /* @min:%2etraceId */] : generateW3CId();\r\n var spanId = (parent && isValidSpanId(parent[_DYN_SPAN_ID /* @min:%2espanId */])) ? parent[_DYN_SPAN_ID /* @min:%2espanId */] : STR_EMPTY;\r\n var traceFlags = parent ? parent[_DYN_TRACE_FLAGS /* @min:%2etraceFlags */] : UNDEFINED_VALUE;\r\n var isRemote = parent ? parent.isRemote : false;\r\n var pageName = STR_EMPTY;\r\n var traceState = null;\r\n if (parent) {\r\n if (isDistributedTraceContext(parent)) {\r\n parentCtx = parent;\r\n pageName = parentCtx.getName();\r\n }\r\n else {\r\n initCtx = parent;\r\n }\r\n }\r\n if (!pageName) {\r\n pageName = \"_unknown_\";\r\n // If we have a location, use that as the page name\r\n var location_1 = getLocation();\r\n if (location_1 && location_1[_DYN_PATHNAME /* @min:%2epathname */]) {\r\n pageName = location_1[_DYN_PATHNAME /* @min:%2epathname */] + (location_1.hash || \"\");\r\n }\r\n }\r\n function _getName() {\r\n return pageName;\r\n }\r\n function _setPageNameFn(updateParent) {\r\n return function (newValue) {\r\n if (updateParent) {\r\n parentCtx && parentCtx.setName(newValue);\r\n }\r\n pageName = newValue;\r\n };\r\n }\r\n function _getTraceId() {\r\n return traceId;\r\n }\r\n function _setTraceIdFn(updateParent) {\r\n return function (newValue) {\r\n if (updateParent) {\r\n parentCtx && parentCtx.setTraceId(newValue);\r\n }\r\n if (isValidTraceId(newValue)) {\r\n traceId = newValue;\r\n }\r\n };\r\n }\r\n function _getSpanId() {\r\n return spanId;\r\n }\r\n function _setSpanIdFn(updateParent) {\r\n return function (newValue) {\r\n if (updateParent) {\r\n parentCtx && parentCtx.setSpanId(newValue);\r\n }\r\n if (isValidSpanId(newValue)) {\r\n spanId = newValue;\r\n }\r\n };\r\n }\r\n function _getTraceFlags() {\r\n return traceFlags;\r\n }\r\n function _setTraceFlagsFn(updateParent) {\r\n return function (newTraceFlags) {\r\n if (updateParent) {\r\n parentCtx && parentCtx[_DYN_SET_TRACE_FLAGS /* @min:%2esetTraceFlags */](newTraceFlags);\r\n }\r\n traceFlags = newTraceFlags;\r\n };\r\n }\r\n function _getTraceState() {\r\n if (!traceState) {\r\n if (!parentCtx) {\r\n // The passed in parent was not an IDistributedTraceContext\r\n if (initCtx) {\r\n if (isOTelTraceState(initCtx[_DYN_TRACE_STATE /* @min:%2etraceState */])) {\r\n // This looks like an IOTelSpanContext, so we have to just use the passed traceState as-is as it doesn't support\r\n // the W3cTraceState heirarchy methods\r\n traceState = createW3cTraceState(initCtx[_DYN_TRACE_STATE /* @min:%2etraceState */].serialize() || STR_EMPTY, parentCtx ? parentCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] : undefined);\r\n }\r\n else {\r\n // This looks like an IDistributedTraceInit, so we can create a new W3cTraceState\r\n traceState = createW3cTraceState(STR_EMPTY, initCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] || (parentCtx ? parentCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] : undefined));\r\n }\r\n }\r\n }\r\n if (!traceState) {\r\n traceState = createW3cTraceState(STR_EMPTY, parentCtx ? parentCtx[_DYN_TRACE_STATE /* @min:%2etraceState */] : undefined);\r\n }\r\n }\r\n return traceState;\r\n }\r\n var otelSpanCtx = null;\r\n var traceCtx = setProtoTypeName((_a = {\r\n getName: _getName,\r\n setName: _setPageNameFn(true),\r\n getTraceId: _getTraceId,\r\n setTraceId: _setTraceIdFn(true),\r\n getSpanId: _getSpanId,\r\n setSpanId: _setSpanIdFn(true),\r\n getTraceFlags: _getTraceFlags\r\n },\r\n _a[_DYN_SET_TRACE_FLAGS /* @min:setTraceFlags */] = _setTraceFlagsFn(true),\r\n _a.traceId = traceId,\r\n _a.spanId = spanId,\r\n _a.traceFlags = traceFlags,\r\n _a.traceState = traceState,\r\n _a.isRemote = isRemote,\r\n _a.pageName = pageName,\r\n _a.getOTelSpanContext = function () {\r\n if (!otelSpanCtx) {\r\n // Lazily create the OTel Span Context\r\n otelSpanCtx = createOTelSpanContext(traceCtx);\r\n }\r\n return otelSpanCtx;\r\n },\r\n _a), \"DistributedTraceContext\");\r\n return objDefineProps(traceCtx, {\r\n pageName: {\r\n g: _getName,\r\n s: _setPageNameFn(false)\r\n },\r\n traceId: {\r\n g: _getTraceId,\r\n s: _setTraceIdFn(false)\r\n },\r\n spanId: {\r\n g: _getSpanId,\r\n s: _setSpanIdFn(false)\r\n },\r\n traceFlags: {\r\n g: _getTraceFlags,\r\n s: _setTraceFlagsFn(false)\r\n },\r\n isRemote: {\r\n v: isRemote,\r\n w: false\r\n },\r\n traceState: {\r\n g: _getTraceState\r\n },\r\n parentCtx: {\r\n g: function () { return parentCtx; }\r\n },\r\n _parent: {\r\n g: function () {\r\n var result;\r\n if (parentCtx) {\r\n result = {\r\n t: \"traceCtx\",\r\n v: parentCtx\r\n };\r\n }\r\n else if (initCtx) {\r\n result = {\r\n t: \"initCtx\",\r\n v: initCtx\r\n };\r\n }\r\n return result;\r\n }\r\n }\r\n });\r\n}\r\n//# sourceMappingURL=TelemetryHelpers.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.1
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
import { arrAppend, arrForEach, dumpObj } from "@nevware21/ts-utils";
|
|
8
|
-
import { _DYN_LENGTH } from "../__DynamicConstants";
|
|
8
|
+
import { _DYN_CALL, _DYN_LENGTH } from "../__DynamicConstants";
|
|
9
9
|
import { _throwInternal } from "../diagnostics/DiagnosticLogger";
|
|
10
10
|
var _maxHooks;
|
|
11
11
|
var _hookAddMonitor;
|
|
@@ -33,7 +33,7 @@ export function createUnloadHookContainer() {
|
|
|
33
33
|
arrForEach(oldHooks, function (fn) {
|
|
34
34
|
// allow either rm or remove callback function
|
|
35
35
|
try {
|
|
36
|
-
(fn.rm || fn.remove)
|
|
36
|
+
(fn.rm || fn.remove)[_DYN_CALL /* @min:%2ecall */](fn);
|
|
37
37
|
}
|
|
38
38
|
catch (e) {
|
|
39
39
|
_throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, "Unloading:" + dumpObj(e));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnloadHookContainer.js.map","sources":["UnloadHookContainer.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { arrAppend, arrForEach, dumpObj } from \"@nevware21/ts-utils\";\r\nimport { _DYN_LENGTH } from \"../__DynamicConstants\";\r\nimport { _throwInternal } from \"../diagnostics/DiagnosticLogger\";\r\nvar _maxHooks;\r\nvar _hookAddMonitor;\r\n/**\r\n * Test hook for setting the maximum number of unload hooks and calling a monitor function when the hooks are added or removed\r\n * This allows for automatic test failure when the maximum number of unload hooks is exceeded\r\n * @param maxHooks - The maximum number of unload hooks\r\n * @param addMonitor - The monitor function to call when hooks are added or removed\r\n */\r\nexport function _testHookMaxUnloadHooksCb(maxHooks, addMonitor) {\r\n _maxHooks = maxHooks;\r\n _hookAddMonitor = addMonitor;\r\n}\r\n/**\r\n * Create a IUnloadHookContainer which can be used to remember unload hook functions to be executed during the component unloading\r\n * process.\r\n * @returns A new IUnloadHookContainer instance\r\n */\r\nexport function createUnloadHookContainer() {\r\n var _hooks = [];\r\n function _doUnload(logger) {\r\n var oldHooks = _hooks;\r\n _hooks = [];\r\n // Remove all registered unload hooks\r\n arrForEach(oldHooks, function (fn) {\r\n // allow either rm or remove callback function\r\n try {\r\n (fn.rm || fn.remove)
|
|
1
|
+
{"version":3,"file":"UnloadHookContainer.js.map","sources":["UnloadHookContainer.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\nimport { arrAppend, arrForEach, dumpObj } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CALL, _DYN_LENGTH } from \"../__DynamicConstants\";\r\nimport { _throwInternal } from \"../diagnostics/DiagnosticLogger\";\r\nvar _maxHooks;\r\nvar _hookAddMonitor;\r\n/**\r\n * Test hook for setting the maximum number of unload hooks and calling a monitor function when the hooks are added or removed\r\n * This allows for automatic test failure when the maximum number of unload hooks is exceeded\r\n * @param maxHooks - The maximum number of unload hooks\r\n * @param addMonitor - The monitor function to call when hooks are added or removed\r\n */\r\nexport function _testHookMaxUnloadHooksCb(maxHooks, addMonitor) {\r\n _maxHooks = maxHooks;\r\n _hookAddMonitor = addMonitor;\r\n}\r\n/**\r\n * Create a IUnloadHookContainer which can be used to remember unload hook functions to be executed during the component unloading\r\n * process.\r\n * @returns A new IUnloadHookContainer instance\r\n */\r\nexport function createUnloadHookContainer() {\r\n var _hooks = [];\r\n function _doUnload(logger) {\r\n var oldHooks = _hooks;\r\n _hooks = [];\r\n // Remove all registered unload hooks\r\n arrForEach(oldHooks, function (fn) {\r\n // allow either rm or remove callback function\r\n try {\r\n (fn.rm || fn.remove)[_DYN_CALL /* @min:%2ecall */](fn);\r\n }\r\n catch (e) {\r\n _throwInternal(logger, 2 /* eLoggingSeverity.WARNING */, 73 /* _eInternalMessageId.PluginException */, \"Unloading:\" + dumpObj(e));\r\n }\r\n });\r\n if (_maxHooks && oldHooks[_DYN_LENGTH /* @min:%2elength */] > _maxHooks) {\r\n _hookAddMonitor ? _hookAddMonitor(\"doUnload\", oldHooks) : _throwInternal(null, 1 /* eLoggingSeverity.CRITICAL */, 48 /* _eInternalMessageId.MaxUnloadHookExceeded */, \"Max unload hooks exceeded. An excessive number of unload hooks has been detected.\");\r\n }\r\n }\r\n function _addHook(hooks) {\r\n if (hooks) {\r\n arrAppend(_hooks, hooks);\r\n if (_maxHooks && _hooks[_DYN_LENGTH /* @min:%2elength */] > _maxHooks) {\r\n _hookAddMonitor ? _hookAddMonitor(\"Add\", _hooks) : _throwInternal(null, 1 /* eLoggingSeverity.CRITICAL */, 48 /* _eInternalMessageId.MaxUnloadHookExceeded */, \"Max unload hooks exceeded. An excessive number of unload hooks has been detected.\");\r\n }\r\n }\r\n }\r\n return {\r\n run: _doUnload,\r\n add: _addHook\r\n };\r\n}\r\n//# sourceMappingURL=UnloadHookContainer.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Application Insights JavaScript SDK - Core, 3.4.
|
|
2
|
+
* Application Insights JavaScript SDK - Core, 3.4.1
|
|
3
3
|
* Copyright (c) Microsoft and contributors. All rights reserved.
|
|
4
4
|
*/
|
|
5
5
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
var _a;
|
|
9
9
|
import dynamicProto from "@microsoft/dynamicproto-js";
|
|
10
10
|
import { dumpObj, isFunction, isUndefined, objDefine } from "@nevware21/ts-utils";
|
|
11
|
-
import { _DYN_DIAG_LOG, _DYN_LOGGER, _DYN_LOGGING_LEVEL_CONSOL4, _DYN_MESSAGE, _DYN_MESSAGE_ID, _DYN_PUSH, _DYN_REPLACE, _DYN_STRINGIFY, _DYN_THROW_INTERNAL, _DYN_UNLOAD, _DYN_WARN_TO_CONSOLE } from "../__DynamicConstants";
|
|
11
|
+
import { _DYN_CONFIG, _DYN_DIAG_LOG, _DYN_LOGGER, _DYN_LOGGING_LEVEL_CONSOL4, _DYN_MESSAGE, _DYN_MESSAGE_ID, _DYN_PUSH, _DYN_REPLACE, _DYN_STRINGIFY, _DYN_THROW_INTERNAL, _DYN_UNLOAD, _DYN_WARN_TO_CONSOLE } from "../__DynamicConstants";
|
|
12
12
|
import { createDynamicConfig, onConfigChange } from "../config/DynamicConfig";
|
|
13
13
|
import { STR_EMPTY } from "../constants/InternalConstants";
|
|
14
14
|
import { getDebugExt } from "../core/DbgExtensionUtils";
|
|
@@ -78,7 +78,7 @@ var _InternalLogMessage = /** @class */ (function () {
|
|
|
78
78
|
export { _InternalLogMessage };
|
|
79
79
|
/*#__NO_SIDE_EFFECTS__*/
|
|
80
80
|
export function safeGetLogger(core, config) {
|
|
81
|
-
return (core || {})[_DYN_LOGGER /* @min:%2elogger */] || new DiagnosticLogger(config);
|
|
81
|
+
return (core || {})[_DYN_LOGGER /* @min:%2elogger */] || new DiagnosticLogger(config || (core || {})[_DYN_CONFIG /* @min:%2econfig */]);
|
|
82
82
|
}
|
|
83
83
|
var DiagnosticLogger = /** @class */ (function () {
|
|
84
84
|
function DiagnosticLogger(config) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiagnosticLogger.js.map","sources":["DiagnosticLogger.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\nvar _a;\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { dumpObj, isFunction, isUndefined, objDefine } from \"@nevware21/ts-utils\";\r\nimport { _DYN_DIAG_LOG, _DYN_LOGGER, _DYN_LOGGING_LEVEL_CONSOL4, _DYN_MESSAGE, _DYN_MESSAGE_ID, _DYN_PUSH, _DYN_REPLACE, _DYN_STRINGIFY, _DYN_THROW_INTERNAL, _DYN_UNLOAD, _DYN_WARN_TO_CONSOLE } from \"../__DynamicConstants\";\r\nimport { createDynamicConfig, onConfigChange } from \"../config/DynamicConfig\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { getDebugExt } from \"../core/DbgExtensionUtils\";\r\nimport { getConsole, getJSON, hasJSON } from \"../utils/EnvUtils\";\r\nvar STR_WARN_TO_CONSOLE = \"warnToConsole\";\r\n/**\r\n * For user non actionable traces use AI Internal prefix.\r\n */\r\nvar AiNonUserActionablePrefix = \"AI (Internal): \";\r\n/**\r\n * Prefix of the traces in portal.\r\n */\r\nvar AiUserActionablePrefix = \"AI: \";\r\n/**\r\n * Session storage key for the prefix for the key indicating message type already logged\r\n */\r\nvar AIInternalMessagePrefix = \"AITR_\";\r\nvar defaultValues = {\r\n loggingLevelConsole: 0,\r\n loggingLevelTelemetry: 1,\r\n maxMessageLimit: 25,\r\n enableDebug: false\r\n};\r\nvar _logFuncs = (_a = {},\r\n _a[0 /* eLoggingSeverity.DISABLED */] = null,\r\n _a[1 /* eLoggingSeverity.CRITICAL */] = \"errorToConsole\",\r\n _a[2 /* eLoggingSeverity.WARNING */] = STR_WARN_TO_CONSOLE,\r\n _a[3 /* eLoggingSeverity.DEBUG */] = \"debugToConsole\",\r\n _a);\r\nfunction _sanitizeDiagnosticText(text) {\r\n if (text) {\r\n return \"\\\"\" + text[_DYN_REPLACE /* @min:%2ereplace */](/\\\"/g, STR_EMPTY) + \"\\\"\";\r\n }\r\n return STR_EMPTY;\r\n}\r\nfunction _logToConsole(func, message) {\r\n var theConsole = getConsole();\r\n if (!!theConsole) {\r\n var logFunc = \"log\";\r\n if (theConsole[func]) {\r\n logFunc = func;\r\n }\r\n if (isFunction(theConsole[logFunc])) {\r\n theConsole[logFunc](message);\r\n }\r\n }\r\n}\r\nvar _InternalLogMessage = /** @class */ (function () {\r\n function _InternalLogMessage(msgId, msg, isUserAct, properties) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n var _self = this;\r\n _self[_DYN_MESSAGE_ID /* @min:%2emessageId */] = msgId;\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] =\r\n (isUserAct ? AiUserActionablePrefix : AiNonUserActionablePrefix) +\r\n msgId;\r\n var strProps = STR_EMPTY;\r\n if (hasJSON()) {\r\n strProps = getJSON()[_DYN_STRINGIFY /* @min:%2estringify */](properties);\r\n }\r\n var diagnosticText = (msg ? \" message:\" + _sanitizeDiagnosticText(msg) : STR_EMPTY) +\r\n (properties ? \" props:\" + _sanitizeDiagnosticText(strProps) : STR_EMPTY);\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] += diagnosticText;\r\n }\r\n _InternalLogMessage.dataType = \"MessageData\";\r\n return _InternalLogMessage;\r\n}());\r\nexport { _InternalLogMessage };\r\n/*#__NO_SIDE_EFFECTS__*/\r\nexport function safeGetLogger(core, config) {\r\n return (core || {})[_DYN_LOGGER /* @min:%2elogger */] || new DiagnosticLogger(config);\r\n}\r\nvar DiagnosticLogger = /** @class */ (function () {\r\n function DiagnosticLogger(config) {\r\n this.identifier = \"DiagnosticLogger\";\r\n /**\r\n * The internal logging queue\r\n */\r\n this.queue = [];\r\n /**\r\n * Count of internal messages sent\r\n */\r\n var _messageCount = 0;\r\n /**\r\n * Holds information about what message types were already logged to console or sent to server.\r\n */\r\n var _messageLogged = {};\r\n var _loggingLevelConsole;\r\n var _loggingLevelTelemetry;\r\n var _maxInternalMessageLimit;\r\n var _enableDebug;\r\n var _unloadHandler;\r\n dynamicProto(DiagnosticLogger, this, function (_self) {\r\n _unloadHandler = _setDefaultsFromConfig(config || {});\r\n _self.consoleLoggingLevel = function () { return _loggingLevelConsole; };\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity - The severity of the log message\r\n * @param message - The log message.\r\n */\r\n _self[_DYN_THROW_INTERNAL /* @min:%2ethrowInternal */] = function (severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n var message = new _InternalLogMessage(msgId, msg, isUserAct, properties);\r\n if (_enableDebug) {\r\n throw dumpObj(message);\r\n }\r\n else {\r\n // Get the logging function and fallback to warnToConsole of for some reason errorToConsole doesn't exist\r\n var logFunc = _logFuncs[severity] || STR_WARN_TO_CONSOLE;\r\n if (!isUndefined(message[_DYN_MESSAGE /* @min:%2emessage */])) {\r\n if (isUserAct) {\r\n // check if this message type was already logged to console for this page view and if so, don't log it again\r\n var messageKey = +message[_DYN_MESSAGE_ID /* @min:%2emessageId */];\r\n if (!_messageLogged[messageKey] && _loggingLevelConsole >= severity) {\r\n _self[logFunc](message[_DYN_MESSAGE /* @min:%2emessage */]);\r\n _messageLogged[messageKey] = true;\r\n }\r\n }\r\n else {\r\n // Only log traces if the console Logging Level is >= the throwInternal severity level\r\n if (_loggingLevelConsole >= severity) {\r\n _self[logFunc](message[_DYN_MESSAGE /* @min:%2emessage */]);\r\n }\r\n }\r\n _logInternalMessage(severity, message);\r\n }\r\n else {\r\n _debugExtMsg(\"throw\" + (severity === 1 /* eLoggingSeverity.CRITICAL */ ? \"Critical\" : \"Warning\"), message);\r\n }\r\n }\r\n };\r\n _self.debugToConsole = function (message) {\r\n _logToConsole(\"debug\", message);\r\n _debugExtMsg(\"warning\", message);\r\n };\r\n _self[_DYN_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */] = function (message) {\r\n _logToConsole(\"warn\", message);\r\n _debugExtMsg(\"warning\", message);\r\n };\r\n _self.errorToConsole = function (message) {\r\n _logToConsole(\"error\", message);\r\n _debugExtMsg(\"error\", message);\r\n };\r\n _self.resetInternalMessageCount = function () {\r\n _messageCount = 0;\r\n _messageLogged = {};\r\n };\r\n _self.logInternalMessage = _logInternalMessage;\r\n _self[_DYN_UNLOAD /* @min:%2eunload */] = function (isAsync) {\r\n _unloadHandler && _unloadHandler.rm();\r\n _unloadHandler = null;\r\n };\r\n objDefine(_self, \"dbgMode\", {\r\n g: function () { return _enableDebug; }\r\n });\r\n function _logInternalMessage(severity, message) {\r\n if (_areInternalMessagesThrottled()) {\r\n return;\r\n }\r\n // check if this message type was already logged for this session and if so, don't log it again\r\n var logMessage = true;\r\n var messageKey = AIInternalMessagePrefix + message[_DYN_MESSAGE_ID /* @min:%2emessageId */];\r\n // if the session storage is not available, limit to only one message type per page view\r\n if (_messageLogged[messageKey]) {\r\n logMessage = false;\r\n }\r\n else {\r\n _messageLogged[messageKey] = true;\r\n }\r\n if (logMessage) {\r\n // Push the event in the internal queue\r\n if (severity <= _loggingLevelTelemetry) {\r\n _self.queue[_DYN_PUSH /* @min:%2epush */](message);\r\n _messageCount++;\r\n _debugExtMsg((severity === 1 /* eLoggingSeverity.CRITICAL */ ? \"error\" : \"warn\"), message);\r\n }\r\n // When throttle limit reached, send a special event\r\n if (_messageCount === _maxInternalMessageLimit) {\r\n var throttleLimitMessage = \"Internal events throttle limit per PageView reached for this app.\";\r\n var throttleMessage = new _InternalLogMessage(23 /* _eInternalMessageId.MessageLimitPerPVExceeded */, throttleLimitMessage, false);\r\n _self.queue[_DYN_PUSH /* @min:%2epush */](throttleMessage);\r\n if (severity === 1 /* eLoggingSeverity.CRITICAL */) {\r\n _self.errorToConsole(throttleLimitMessage);\r\n }\r\n else {\r\n _self[_DYN_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */](throttleLimitMessage);\r\n }\r\n }\r\n }\r\n }\r\n function _setDefaultsFromConfig(config) {\r\n // make sure the config is dynamic\r\n return onConfigChange(createDynamicConfig(config, defaultValues, _self).cfg, function (details) {\r\n var config = details.cfg;\r\n _loggingLevelConsole = config[_DYN_LOGGING_LEVEL_CONSOL4 /* @min:%2eloggingLevelConsole */];\r\n _loggingLevelTelemetry = config.loggingLevelTelemetry;\r\n _maxInternalMessageLimit = config.maxMessageLimit;\r\n _enableDebug = config.enableDebug;\r\n });\r\n }\r\n function _areInternalMessagesThrottled() {\r\n return _messageCount >= _maxInternalMessageLimit;\r\n }\r\n function _debugExtMsg(name, data) {\r\n var dbgExt = getDebugExt(config || {});\r\n if (dbgExt && dbgExt[_DYN_DIAG_LOG /* @min:%2ediagLog */]) {\r\n dbgExt[_DYN_DIAG_LOG /* @min:%2ediagLog */](name, data);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * 0: OFF (default)\r\n * 1: CRITICAL\r\n * 2: \\>= WARNING\r\n */\r\n DiagnosticLogger.prototype.consoleLoggingLevel = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return 0;\r\n };\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity - The severity of the log message\r\n * @param message - The log message.\r\n */\r\n DiagnosticLogger.prototype.throwInternal = function (severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * This will write a debug message to the console if possible\r\n * @param message - The debug message\r\n */\r\n DiagnosticLogger.prototype.debugToConsole = function (message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * This will write a warning to the console if possible\r\n * @param message - The warning message\r\n */\r\n DiagnosticLogger.prototype.warnToConsole = function (message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * This will write an error to the console if possible\r\n * @param message - The warning message\r\n */\r\n DiagnosticLogger.prototype.errorToConsole = function (message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Resets the internal message count\r\n */\r\n DiagnosticLogger.prototype.resetInternalMessageCount = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Logs a message to the internal queue.\r\n * @param severity - The severity of the log message\r\n * @param message - The message to log.\r\n */\r\n DiagnosticLogger.prototype.logInternalMessage = function (severity, message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Unload and remove any state that this IDiagnosticLogger may be holding, this is generally called when the\r\n * owning SDK is being unloaded.\r\n * @param isAsync - Can the unload be performed asynchronously (default)\r\n * @returns If the unload occurs synchronously then nothing should be returned, if happening asynchronously then\r\n * the function should return an [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)\r\n * / Promise to allow any listeners to wait for the operation to complete.\r\n */\r\n DiagnosticLogger.prototype.unload = function (isAsync) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return DiagnosticLogger;\r\n}());\r\nexport { DiagnosticLogger };\r\nfunction _getLogger(logger) {\r\n return (logger || new DiagnosticLogger());\r\n}\r\n/**\r\n * This is a helper method which will call throwInternal on the passed logger, will throw exceptions in\r\n * debug mode or attempt to log the error as a console warning. This helper is provided mostly to better\r\n * support minification as logger.throwInternal() will not compress the publish \"throwInternal\" used throughout\r\n * the code.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param severity - The severity of the log message\r\n * @param message - The log message.\r\n */\r\nexport function _throwInternal(logger, severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n _getLogger(logger)[_DYN_THROW_INTERNAL /* @min:%2ethrowInternal */](severity, msgId, msg, properties, isUserAct);\r\n}\r\n/**\r\n * This is a helper method which will call warnToConsole on the passed logger with the provided message.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param message - The log message.\r\n */\r\nexport function _warnToConsole(logger, message) {\r\n _getLogger(logger)[_DYN_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */](message);\r\n}\r\n/**\r\n * Logs a message to the internal queue.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param severity - The severity of the log message\r\n * @param message - The message to log.\r\n */\r\nexport function _logInternalMessage(logger, severity, message) {\r\n _getLogger(logger).logInternalMessage(severity, message);\r\n}\r\n//# sourceMappingURL=DiagnosticLogger.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;sDA+DM,CAAC;;;;;4BACqB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"file":"DiagnosticLogger.js.map","sources":["DiagnosticLogger.js"],"sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved.\r\n// Licensed under the MIT License.\r\n\"use strict\";\r\nvar _a;\r\nimport dynamicProto from \"@microsoft/dynamicproto-js\";\r\nimport { dumpObj, isFunction, isUndefined, objDefine } from \"@nevware21/ts-utils\";\r\nimport { _DYN_CONFIG, _DYN_DIAG_LOG, _DYN_LOGGER, _DYN_LOGGING_LEVEL_CONSOL4, _DYN_MESSAGE, _DYN_MESSAGE_ID, _DYN_PUSH, _DYN_REPLACE, _DYN_STRINGIFY, _DYN_THROW_INTERNAL, _DYN_UNLOAD, _DYN_WARN_TO_CONSOLE } from \"../__DynamicConstants\";\r\nimport { createDynamicConfig, onConfigChange } from \"../config/DynamicConfig\";\r\nimport { STR_EMPTY } from \"../constants/InternalConstants\";\r\nimport { getDebugExt } from \"../core/DbgExtensionUtils\";\r\nimport { getConsole, getJSON, hasJSON } from \"../utils/EnvUtils\";\r\nvar STR_WARN_TO_CONSOLE = \"warnToConsole\";\r\n/**\r\n * For user non actionable traces use AI Internal prefix.\r\n */\r\nvar AiNonUserActionablePrefix = \"AI (Internal): \";\r\n/**\r\n * Prefix of the traces in portal.\r\n */\r\nvar AiUserActionablePrefix = \"AI: \";\r\n/**\r\n * Session storage key for the prefix for the key indicating message type already logged\r\n */\r\nvar AIInternalMessagePrefix = \"AITR_\";\r\nvar defaultValues = {\r\n loggingLevelConsole: 0,\r\n loggingLevelTelemetry: 1,\r\n maxMessageLimit: 25,\r\n enableDebug: false\r\n};\r\nvar _logFuncs = (_a = {},\r\n _a[0 /* eLoggingSeverity.DISABLED */] = null,\r\n _a[1 /* eLoggingSeverity.CRITICAL */] = \"errorToConsole\",\r\n _a[2 /* eLoggingSeverity.WARNING */] = STR_WARN_TO_CONSOLE,\r\n _a[3 /* eLoggingSeverity.DEBUG */] = \"debugToConsole\",\r\n _a);\r\nfunction _sanitizeDiagnosticText(text) {\r\n if (text) {\r\n return \"\\\"\" + text[_DYN_REPLACE /* @min:%2ereplace */](/\\\"/g, STR_EMPTY) + \"\\\"\";\r\n }\r\n return STR_EMPTY;\r\n}\r\nfunction _logToConsole(func, message) {\r\n var theConsole = getConsole();\r\n if (!!theConsole) {\r\n var logFunc = \"log\";\r\n if (theConsole[func]) {\r\n logFunc = func;\r\n }\r\n if (isFunction(theConsole[logFunc])) {\r\n theConsole[logFunc](message);\r\n }\r\n }\r\n}\r\nvar _InternalLogMessage = /** @class */ (function () {\r\n function _InternalLogMessage(msgId, msg, isUserAct, properties) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n var _self = this;\r\n _self[_DYN_MESSAGE_ID /* @min:%2emessageId */] = msgId;\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] =\r\n (isUserAct ? AiUserActionablePrefix : AiNonUserActionablePrefix) +\r\n msgId;\r\n var strProps = STR_EMPTY;\r\n if (hasJSON()) {\r\n strProps = getJSON()[_DYN_STRINGIFY /* @min:%2estringify */](properties);\r\n }\r\n var diagnosticText = (msg ? \" message:\" + _sanitizeDiagnosticText(msg) : STR_EMPTY) +\r\n (properties ? \" props:\" + _sanitizeDiagnosticText(strProps) : STR_EMPTY);\r\n _self[_DYN_MESSAGE /* @min:%2emessage */] += diagnosticText;\r\n }\r\n _InternalLogMessage.dataType = \"MessageData\";\r\n return _InternalLogMessage;\r\n}());\r\nexport { _InternalLogMessage };\r\n/*#__NO_SIDE_EFFECTS__*/\r\nexport function safeGetLogger(core, config) {\r\n return (core || {})[_DYN_LOGGER /* @min:%2elogger */] || new DiagnosticLogger(config || (core || {})[_DYN_CONFIG /* @min:%2econfig */]);\r\n}\r\nvar DiagnosticLogger = /** @class */ (function () {\r\n function DiagnosticLogger(config) {\r\n this.identifier = \"DiagnosticLogger\";\r\n /**\r\n * The internal logging queue\r\n */\r\n this.queue = [];\r\n /**\r\n * Count of internal messages sent\r\n */\r\n var _messageCount = 0;\r\n /**\r\n * Holds information about what message types were already logged to console or sent to server.\r\n */\r\n var _messageLogged = {};\r\n var _loggingLevelConsole;\r\n var _loggingLevelTelemetry;\r\n var _maxInternalMessageLimit;\r\n var _enableDebug;\r\n var _unloadHandler;\r\n dynamicProto(DiagnosticLogger, this, function (_self) {\r\n _unloadHandler = _setDefaultsFromConfig(config || {});\r\n _self.consoleLoggingLevel = function () { return _loggingLevelConsole; };\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity - The severity of the log message\r\n * @param message - The log message.\r\n */\r\n _self[_DYN_THROW_INTERNAL /* @min:%2ethrowInternal */] = function (severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n var message = new _InternalLogMessage(msgId, msg, isUserAct, properties);\r\n if (_enableDebug) {\r\n throw dumpObj(message);\r\n }\r\n else {\r\n // Get the logging function and fallback to warnToConsole of for some reason errorToConsole doesn't exist\r\n var logFunc = _logFuncs[severity] || STR_WARN_TO_CONSOLE;\r\n if (!isUndefined(message[_DYN_MESSAGE /* @min:%2emessage */])) {\r\n if (isUserAct) {\r\n // check if this message type was already logged to console for this page view and if so, don't log it again\r\n var messageKey = +message[_DYN_MESSAGE_ID /* @min:%2emessageId */];\r\n if (!_messageLogged[messageKey] && _loggingLevelConsole >= severity) {\r\n _self[logFunc](message[_DYN_MESSAGE /* @min:%2emessage */]);\r\n _messageLogged[messageKey] = true;\r\n }\r\n }\r\n else {\r\n // Only log traces if the console Logging Level is >= the throwInternal severity level\r\n if (_loggingLevelConsole >= severity) {\r\n _self[logFunc](message[_DYN_MESSAGE /* @min:%2emessage */]);\r\n }\r\n }\r\n _logInternalMessage(severity, message);\r\n }\r\n else {\r\n _debugExtMsg(\"throw\" + (severity === 1 /* eLoggingSeverity.CRITICAL */ ? \"Critical\" : \"Warning\"), message);\r\n }\r\n }\r\n };\r\n _self.debugToConsole = function (message) {\r\n _logToConsole(\"debug\", message);\r\n _debugExtMsg(\"warning\", message);\r\n };\r\n _self[_DYN_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */] = function (message) {\r\n _logToConsole(\"warn\", message);\r\n _debugExtMsg(\"warning\", message);\r\n };\r\n _self.errorToConsole = function (message) {\r\n _logToConsole(\"error\", message);\r\n _debugExtMsg(\"error\", message);\r\n };\r\n _self.resetInternalMessageCount = function () {\r\n _messageCount = 0;\r\n _messageLogged = {};\r\n };\r\n _self.logInternalMessage = _logInternalMessage;\r\n _self[_DYN_UNLOAD /* @min:%2eunload */] = function (isAsync) {\r\n _unloadHandler && _unloadHandler.rm();\r\n _unloadHandler = null;\r\n };\r\n objDefine(_self, \"dbgMode\", {\r\n g: function () { return _enableDebug; }\r\n });\r\n function _logInternalMessage(severity, message) {\r\n if (_areInternalMessagesThrottled()) {\r\n return;\r\n }\r\n // check if this message type was already logged for this session and if so, don't log it again\r\n var logMessage = true;\r\n var messageKey = AIInternalMessagePrefix + message[_DYN_MESSAGE_ID /* @min:%2emessageId */];\r\n // if the session storage is not available, limit to only one message type per page view\r\n if (_messageLogged[messageKey]) {\r\n logMessage = false;\r\n }\r\n else {\r\n _messageLogged[messageKey] = true;\r\n }\r\n if (logMessage) {\r\n // Push the event in the internal queue\r\n if (severity <= _loggingLevelTelemetry) {\r\n _self.queue[_DYN_PUSH /* @min:%2epush */](message);\r\n _messageCount++;\r\n _debugExtMsg((severity === 1 /* eLoggingSeverity.CRITICAL */ ? \"error\" : \"warn\"), message);\r\n }\r\n // When throttle limit reached, send a special event\r\n if (_messageCount === _maxInternalMessageLimit) {\r\n var throttleLimitMessage = \"Internal events throttle limit per PageView reached for this app.\";\r\n var throttleMessage = new _InternalLogMessage(23 /* _eInternalMessageId.MessageLimitPerPVExceeded */, throttleLimitMessage, false);\r\n _self.queue[_DYN_PUSH /* @min:%2epush */](throttleMessage);\r\n if (severity === 1 /* eLoggingSeverity.CRITICAL */) {\r\n _self.errorToConsole(throttleLimitMessage);\r\n }\r\n else {\r\n _self[_DYN_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */](throttleLimitMessage);\r\n }\r\n }\r\n }\r\n }\r\n function _setDefaultsFromConfig(config) {\r\n // make sure the config is dynamic\r\n return onConfigChange(createDynamicConfig(config, defaultValues, _self).cfg, function (details) {\r\n var config = details.cfg;\r\n _loggingLevelConsole = config[_DYN_LOGGING_LEVEL_CONSOL4 /* @min:%2eloggingLevelConsole */];\r\n _loggingLevelTelemetry = config.loggingLevelTelemetry;\r\n _maxInternalMessageLimit = config.maxMessageLimit;\r\n _enableDebug = config.enableDebug;\r\n });\r\n }\r\n function _areInternalMessagesThrottled() {\r\n return _messageCount >= _maxInternalMessageLimit;\r\n }\r\n function _debugExtMsg(name, data) {\r\n var dbgExt = getDebugExt(config || {});\r\n if (dbgExt && dbgExt[_DYN_DIAG_LOG /* @min:%2ediagLog */]) {\r\n dbgExt[_DYN_DIAG_LOG /* @min:%2ediagLog */](name, data);\r\n }\r\n }\r\n });\r\n }\r\n /**\r\n * 0: OFF (default)\r\n * 1: CRITICAL\r\n * 2: \\>= WARNING\r\n */\r\n DiagnosticLogger.prototype.consoleLoggingLevel = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n return 0;\r\n };\r\n /**\r\n * This method will throw exceptions in debug mode or attempt to log the error as a console warning.\r\n * @param severity - The severity of the log message\r\n * @param message - The log message.\r\n */\r\n DiagnosticLogger.prototype.throwInternal = function (severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * This will write a debug message to the console if possible\r\n * @param message - The debug message\r\n */\r\n DiagnosticLogger.prototype.debugToConsole = function (message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * This will write a warning to the console if possible\r\n * @param message - The warning message\r\n */\r\n DiagnosticLogger.prototype.warnToConsole = function (message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * This will write an error to the console if possible\r\n * @param message - The warning message\r\n */\r\n DiagnosticLogger.prototype.errorToConsole = function (message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Resets the internal message count\r\n */\r\n DiagnosticLogger.prototype.resetInternalMessageCount = function () {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Logs a message to the internal queue.\r\n * @param severity - The severity of the log message\r\n * @param message - The message to log.\r\n */\r\n DiagnosticLogger.prototype.logInternalMessage = function (severity, message) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n /**\r\n * Unload and remove any state that this IDiagnosticLogger may be holding, this is generally called when the\r\n * owning SDK is being unloaded.\r\n * @param isAsync - Can the unload be performed asynchronously (default)\r\n * @returns If the unload occurs synchronously then nothing should be returned, if happening asynchronously then\r\n * the function should return an [IPromise](https://nevware21.github.io/ts-async/typedoc/interfaces/IPromise.html)\r\n * / Promise to allow any listeners to wait for the operation to complete.\r\n */\r\n DiagnosticLogger.prototype.unload = function (isAsync) {\r\n // @DynamicProtoStub -- DO NOT add any code as this will be removed during packaging\r\n };\r\n return DiagnosticLogger;\r\n}());\r\nexport { DiagnosticLogger };\r\nfunction _getLogger(logger) {\r\n return (logger || new DiagnosticLogger());\r\n}\r\n/**\r\n * This is a helper method which will call throwInternal on the passed logger, will throw exceptions in\r\n * debug mode or attempt to log the error as a console warning. This helper is provided mostly to better\r\n * support minification as logger.throwInternal() will not compress the publish \"throwInternal\" used throughout\r\n * the code.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param severity - The severity of the log message\r\n * @param message - The log message.\r\n */\r\nexport function _throwInternal(logger, severity, msgId, msg, properties, isUserAct) {\r\n if (isUserAct === void 0) { isUserAct = false; }\r\n _getLogger(logger)[_DYN_THROW_INTERNAL /* @min:%2ethrowInternal */](severity, msgId, msg, properties, isUserAct);\r\n}\r\n/**\r\n * This is a helper method which will call warnToConsole on the passed logger with the provided message.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param message - The log message.\r\n */\r\nexport function _warnToConsole(logger, message) {\r\n _getLogger(logger)[_DYN_WARN_TO_CONSOLE /* @min:%2ewarnToConsole */](message);\r\n}\r\n/**\r\n * Logs a message to the internal queue.\r\n * @param logger - The Diagnostic Logger instance to use.\r\n * @param severity - The severity of the log message\r\n * @param message - The message to log.\r\n */\r\nexport function _logInternalMessage(logger, severity, message) {\r\n _getLogger(logger).logInternalMessage(severity, message);\r\n}\r\n//# sourceMappingURL=DiagnosticLogger.js.map"],"names":[],"mappings":";;;;AAA4D;AAC1B;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;sDA+DM,CAAC;;;;;4BACqB;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|