@nsshunt/stsinstrumentmanagerclient 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/commonTypes.ts","../src/publish/middleware/requestLoggerMiddleware.ts","../node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/ansi-styles/index.js","../node_modules/supports-color/browser.js","../node_modules/chalk/source/util.js","../node_modules/chalk/source/templates.js","../node_modules/chalk/source/index.js","../node_modules/@nsshunt/stsobservability/dist/index.mjs","../node_modules/@msgpack/msgpack/dist.esm/utils/utf8.mjs","../node_modules/@msgpack/msgpack/dist.esm/ExtData.mjs","../node_modules/@msgpack/msgpack/dist.esm/DecodeError.mjs","../node_modules/@msgpack/msgpack/dist.esm/utils/int.mjs","../node_modules/@msgpack/msgpack/dist.esm/timestamp.mjs","../node_modules/@msgpack/msgpack/dist.esm/ExtensionCodec.mjs","../node_modules/@msgpack/msgpack/dist.esm/utils/typedArrays.mjs","../node_modules/@msgpack/msgpack/dist.esm/Encoder.mjs","../node_modules/@msgpack/msgpack/dist.esm/encode.mjs","../src/publish/publishers/publishTransportRESTServer.ts","../src/publish/publishInstruments.ts","../src/publish/publishInstrumentController.ts","../src/publish/stsPluginKeys.ts","../src/publish/agentinstrumentcontroller.ts","../src/globalServiceDefinitions.ts","../src/subscribe/observabilitymodelutils.ts","../src/subscribe/observabilityPayloadTransformer.ts","../src/subscribe/restClientSubscriber.ts","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../src/subscribe/socketClientSubscriber.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { AgentManager, ISTSLogger, JSONObject } from '@nsshunt/stsutils';\nimport { type STSDefaultServerToClientEvents, type STSDefaultClientToServerEvents } from '@nsshunt/stssocketioutils'\nimport { InstrumentBase, Gauge, GaugeTypes, InstrumentBaseOptions } from '@nsshunt/stsobservability'\n\nexport interface IServiceSideSocketRecord {\n start: number\n globalSockets: any\n namespaceSockets: any\n namespaceRoomSockets: any\n end: number\n duration: number\n message: string\n}\n\nexport interface ClientToServerEvents extends STSDefaultClientToServerEvents {\n subscribe: (data: any, callback: (data: any) => void) => void;\n unsubscribe: (data: any, callback: (data: any) => void) => void;\n getCurrentSubscriptions: (namespace: string, rooms: string[], callback: (data: IServiceSideSocketRecord) => void) => void;\n}\n\nexport interface ServerToClientEvents extends STSDefaultServerToClientEvents {\n subscriptionData: (data: ISubscriptionPayload, callback: (data: any) => void) => void;\n}\n\nexport enum SubscriptionTopic {\n // Services topics\n AllServicesCombined = 'AllServicesCombined',\n Services = 'Services',\n ServiceInstances = 'ServiceInstances',\n ServiceInstance = 'ServiceInstance',\n\n // User Agents topics\n AllAgentsCombined = 'AllAgentsCombined',\n Agents = 'Agents',\n AgentWorkers = 'AgentWorkers',\n AgentWorker = 'AgentWorker',\n\n // Lambda topics\n AllLambdasCombined = \"AllLambdasCombined\",\n LambdaTechnologies = \"LambdaTechnologies\", // e.g. aws was lambdas\n LambdaSubTechnologies = \"LambdaSubTechnologies\", // e.g. aws_s3, aws_sqs, aws_sns was LambdaInstances\n LambdaSubTechnologiesInstance = \"LambdaSubTechnologiesInstance\", // (uuidv4()) was ServiceInstance\n\n // Logging (both service and agent)\n LogProcessing = 'LogProcessing'\n}\n\nexport interface ISubscriptionKey {\n id: string // uuid - unique ID for this subscription\n topic: SubscriptionTopic\n key?: string\n subkey?: string\n}\n\nexport interface IKafkaData {\n kafkaTopic: string\n kafkaGroupId: string\n partition: number,\n topic: string\n key: string\n value: string\n}\n\nexport interface ISubscription {\n subscriptionKey: ISubscriptionKey\n cb: (payload: ISubscriptionPayload) => void\n}\n\nexport type ISubscriptions = ISubscription[]\n\nexport type quantile = Record<string, number>;\nexport type histo = Record<string, number>;\n\nexport interface ICommonInstanceTelemetry {\n activeRequestCount: number\n authenticationCount: number\n coreCount: number\n duration: number\n errorCount: number\n latency: number\n requestCount: number\n retryCount: number\n timer: number\n velocity: number\n duration_quantile: quantile\n duration_histo: histo\n latency_quantile: quantile\n latency_histo: histo\n}\n\nexport interface IServiceInstanceTelemetry extends ICommonInstanceTelemetry {\n connectionCount: number\n connectionIdleCount: number\n connectionPoolCount: number\n connectionWaitingCount: number\n cpu: number\n cpu_quantile: quantile\n systemcpu: number\n systemcpu_quantile: quantile\n memory: string\n rx: number\n tx: number\n}\n\nexport interface ILambdaInstanceTelemetry extends ICommonInstanceTelemetry {\n connectionCount: number\n connectionIdleCount: number\n connectionPoolCount: number\n connectionWaitingCount: number\n cpu: number\n cpu_quantile: quantile\n systemcpu: number\n systemcpu_quantile: quantile\n memory: string\n rx: number\n tx: number\n}\n\nexport interface IAgentInstanceTelemetry extends ICommonInstanceTelemetry {\n childCount: number\n}\n\nexport interface ISubscriptionPayload {\n subscriptionKey: ISubscriptionKey\n data: IKafkaData \n // Agent processing\n | IAgentInstanceTelemetry | IAgents | IAgentWorkers | IAgentWorkerRunners\n // Service processing\n | IServiceInstanceTelemetry | IServices | IServiceInstances | IServiceInstancesThreads \n // Lambda processing\n | IServiceInstanceTelemetry | ILambdaTechnologies | ILambdaSubTechnologies | ILambdaSubTechnologiesInstance\n | null\n}\n\n// /serviceId\nexport interface IServices {\n [serviceId: string]: IServiceInstanceTelemetry\n}\n\n// /serviceId/serviceInstanceId\nexport interface IServiceInstances {\n [serviceId: string]: {\n [serviceInstanceId: string]: IServiceInstanceTelemetry\n }\n}\n\n// /serviceId/serviceInstanceId/threadId\nexport interface IServiceInstancesThreads {\n [serviceId: string]: {\n [serviceInstanceId: string]: {\n [threadId: string]: IServiceInstanceTelemetry\n }\n }\n}\n\n// /lambdaTechnoplogyId\nexport interface ILambdaTechnologies {\n [lambdaTechnoplogyId: string]: ILambdaInstanceTelemetry\n}\n\n// /lambdaTechnoplogyId/lambdaSubTechnoplogyId\nexport interface ILambdaSubTechnologies {\n [lambdaTechnoplogyId: string]: {\n [lambdaSubTechnoplogyId: string]: IServiceInstanceTelemetry\n }\n}\n\n// /lambdaTechnoplogyId/lambdaSubTechnoplogyId/lambdaSubTechnoplogyInstanceId\nexport interface ILambdaSubTechnologiesInstance {\n [lambdaTechnoplogyId: string]: {\n [lambdaSubTechnoplogyId: string]: {\n [lambdaSubTechnoplogyInstanceId: string]: IServiceInstanceTelemetry\n }\n }\n}\n\n// /agentId\nexport interface IAgents {\n [agentId: string]: IAgentInstanceTelemetry\n}\n\n// /agentId/agentWorkerId\nexport interface IAgentWorkers {\n [agentId: string]: {\n [agentWorkerId: string]: IAgentInstanceTelemetry\n }\n}\n\n// /agentId/agentWorkerId/asyncRunnerId\nexport interface IAgentWorkerRunners {\n [agentId: string]: {\n [agentWorkerId: string]: {\n [asyncRunnerId: string]: IAgentInstanceTelemetry\n }\n }\n}\n\n// Event key passed back from socket.io - stsinstrumentmanager\nexport const GetSocketIOSubscriptionKey = (subscriptionKey: ISubscriptionKey): string => {\n return `SubscriptionData_${subscriptionKey.id}`;\n}\n\nexport interface IObservabilitySocketIOSubscriberOptions {\n socket?: any\n keepAlive?: number // keep alive ping interval (ms) (REST only)\n urlBase?: string\n agentManager?: AgentManager\n logger: ISTSLogger\n}\n\nexport interface IObservabilitySocketIOSubscriber {\n Subscribe(subscriptions: ISubscriptions): void\n UnSubscribe(subscriptions: ISubscriptions): void\n}\n\nexport const KAFKA_PREFIX: string = '__STS__'; //@@ move to sock.io\n\nexport interface IObservabilitySubscriberManagerOptions {\n modelId: string\n consumeInstrumentationMode: string\n instrumentManagerEndpoint: string\n instrumentManagerPort: string\n instrumentManagerAPIRoot: string\n}\n\n// Publisher common types\n// ------------------------------------------------------------------------------------------------------------------------\n\nexport enum TransportType {\n none = 0,\n IPC = 1, // Inter-process communication (local)\n websocket = 2, // node ws\n RESTAPI = 4, // RESTful API\n redis = 8,\n kafka = 16, // https://www.npmjs.com/package/kafkajs\n influxdb = 32, // https://github.com/influxdata/influxdb-client-js/ https://www.npmjs.com/package/@influxdata/influxdb-client\n prometheus = 64,\n gRPC = 128, // https://www.npmjs.com/package/@grpc/grpc-js\n unixsocket = 256, // Uses https://www.npmjs.com/package/json-socket\n socketio = 512, // https://socket.io\n otelcollector = 1024, \n messageport = 2048,\n jsonrpc = 4096, // https://www.npmjs.com/package/jayson\n postgresql =8192,\n grafanaloki = 16384,\n logstash = 32768,\n fluentbit = 65536,\n fluentd = 131072,\n inmemory = 262144\n}\n\nexport function GetTransportMode(transport: string): TransportType {\n let trans: TransportType = 0 as TransportType;\n try {\n transport.split('|').forEach(item => {\n switch (item) {\n case 'IPC' :\n trans |= TransportType.IPC;\n break;\n case 'websocket' :\n trans |= TransportType.websocket;\n break;\n case 'RESTAPI' :\n trans |= TransportType.RESTAPI;\n break;\n case 'redis' :\n trans |= TransportType.redis;\n break;\n case 'kafka' :\n trans |= TransportType.kafka;\n break;\n case 'influxdb' :\n trans |= TransportType.influxdb;\n break;\n case 'prometheus' :\n trans |= TransportType.prometheus;\n break;\n case 'gRPC' :\n trans |= TransportType.gRPC;\n break;\n case 'unixsocket' :\n trans |= TransportType.unixsocket;\n break;\n case 'socketio' :\n trans |= TransportType.socketio;\n break;\n case 'otelcollector' :\n trans |= TransportType.otelcollector;\n break;\n case 'messageport' :\n trans |= TransportType.messageport\n break;\n case 'jsonrpc' :\n trans |= TransportType.jsonrpc\n break;\n case 'postgresql' :\n trans |= TransportType.postgresql\n break;\n case 'grafanaloki' :\n trans |= TransportType.grafanaloki\n break;\n case 'logstash' :\n trans |= TransportType.logstash\n break;\n case 'fluentbit' :\n trans |= TransportType.fluentbit\n break;\n case 'fluentd' :\n trans |= TransportType.fluentd\n break;\n case 'inmemory' :\n trans |= TransportType.inmemory\n break;\n }\n });\n } catch (error) {\n throw new Error(`GetTransportMode(): Error: [${error}]`);\n }\n return trans;\n}\n\nexport type Nid = string;\n\nexport interface IContextBase extends JSONObject {\n serviceType?: string\n nid?: Nid\n}\n\nexport enum InstrumentPayloadType {\n agent = 'agent',\n service = 'service'\n}\n\nexport interface IInstrumentPayload {\n //context: IServiceProcessContext | IAsyncRunnerContext | ILambdaProcessContext\n context: IContextBase\n instruments: Record<string, InstrumentBase>\n}\n\nexport type InstrumentDefinition = [ Gauge, GaugeTypes, InstrumentBaseOptions? ]\n\nexport type InstrumentDefinitions = InstrumentDefinition[];\n\nexport interface IPublisherTransport {\n Publish(payload: IInstrumentPayload): Promise<boolean>\n Close(): Promise<boolean>\n}\n\nexport interface IPublishInstrumentController {\n GetPayloadData(): IInstrumentPayload\n}\n\nexport interface IPublishInstrumentControllerOptions {\n processContext: IContextBase\n consoleLogging?: boolean\n instrumentLogging?: boolean\n httpServer?: boolean // Is this service running an http server (express via STSFramework)\n instrumentationObservationInterval?: number\n instrumentationTimeWindow?: number\n instrumentDefinitions?: InstrumentDefinitions\n publishInterval: number\n publishPostFailInterval: number\n logger: ISTSLogger\n publishTransportBaseOptions: IPublishTransportBaseOptions\n autoStart: boolean\n}\n\nexport interface IPublishInstrumentsOptions {\n processContext: IContextBase\n publishInterval: number\n publishPostFailInterval: number\n logger: ISTSLogger\n publishInstrumentController?: IPublishInstrumentController\n publishTransportBaseOptions: IPublishTransportBaseOptions\n}\n\nexport interface IPublishTransportBaseOptions {\n id?: string\n transportType: TransportType\n logger: ISTSLogger\n}\n\nexport interface IPublishTransportRESTServerOptions extends IPublishTransportBaseOptions {\n url?: string\n socketPath?: string\n agentManager?: AgentManager\n showPublishPayload?: boolean\n}\n","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { JSONObject, STSOptionsBase } from '@nsshunt/stsutils'\nimport { TinyEmitter } from 'tiny-emitter';\n//import { Express, Request, Response, NextFunction } from 'express';\n//import { v4 as uuidv4 } from 'uuid';\n\nexport interface RequestLoggerMiddlewareOptions {\n\tignoresocketio: boolean\n}\n\nexport enum RequestLoggerMiddlewareEventName {\n UpdateInstrument_AR_DEC = 'UpdateInstrument_AR_DEC', // active request gauge - decrement\n UpdateInstrument_AR_INC = 'UpdateInstrument_AR_INC', // active request gauge - increment\n UpdateInstrument_RC_INC = 'UpdateInstrument_RC_INC', // request count gauge - increment\n UpdateInstrument_V_INC = 'UpdateInstrument_V_INC', // velocity gauge - increment\n UpdateInstrument_DH_VAL = 'UpdateInstrument_DH_VAL', // duration histo - value\n UpdateInstrument_D_VAL = 'UpdateInstrument_D_VAL' // duration - value\n}\n\nexport type RequestLoggerMiddlewareEventFunc = (data?: string | number | JSONObject) => void;\n\n//@@ use TinyEmitter to emit logger events\nexport class RequestLoggerMiddleware extends STSOptionsBase\n{\n #tinyEmitter: TinyEmitter = new TinyEmitter();\n\n constructor(options: RequestLoggerMiddlewareOptions) {\n super(options);\n }\n\n override get options(): RequestLoggerMiddlewareOptions {\n return super.options as RequestLoggerMiddlewareOptions;\n }\n\n on(eventName: string, callBackFn: RequestLoggerMiddlewareEventFunc) {\n this.#tinyEmitter.on(eventName, callBackFn);\n }\n\n #RequestCompleted = (start: [number, number]) => {\n // Decrease the number of active requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_AR_DEC);\n\n // Update request duration histo data\n let timeInMs = 0;\n const end = process.hrtime(start);\n timeInMs = (end[0]* 1000000000 + end[1]) / 1000000;\n timeInMs = parseFloat(timeInMs.toFixed(4));\n\t\t\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_DH_VAL, timeInMs);\n\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_D_VAL, timeInMs);\n };\n\n // https://stackoverflow.com/questions/18031839/how-to-use-process-hrtime-to-get-execution-time-of-async-function/18031945\n\n /**\n\t * Use with .bind(class instance).\n\t * Example;\n\t * ---\n\t * `let requestLoggerMiddleware = new RequestLoggerMiddleware();\n\t * app.use(requestLoggerMiddleware.Middleware.bind(requestLoggerMiddleware));`\n\t * @param {*} req \n\t * @param {*} res \n\t * @param {*} next \n\t * @returns \n\t */\n \n Middleware = async (req: any, res: any, next: any) => { \n if (this.options.ignoresocketio && req.originalUrl.includes('socket.io')) {\n return;\n }\n\n const start = process.hrtime();\n\n // Increase the number of active requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_AR_INC);\n\n // Increase the total number of requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_RC_INC);\n\n // Increase the total number of requests to determine velocity (requests per second)\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_V_INC);\n\n req.on(\"aborted\", () => {\n // request closed unexpectedly\n //@@RequestCompleted(start);\n });\n\n req.on(\"close\", () => {\n // request closed unexpectedly or normally\n this.#RequestCompleted(start);\n });\n\n req.on(\"end\", () => {\n \n });\n\n res.on('finish', () => {\n //@@RequestCompleted(start);\n });\n\t\n next();\n }\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","import _cloneDeep from \"lodash.clonedeep\";\nimport isNode from \"detect-node\";\nvar Gauge = /* @__PURE__ */ ((Gauge2) => {\n Gauge2[\"ACTIVE_REQUEST_GAUGE\"] = \"a\";\n Gauge2[\"AUTHENTICATION_COUNT_GAUGE\"] = \"b\";\n Gauge2[\"AUTHENTICATION_ERROR_COUNT_GAUGE\"] = \"aa\";\n Gauge2[\"AUTHENTICATION_RETRY_COUNT_GAUGE\"] = \"ab\";\n Gauge2[\"CONNECTION_POOL_IDLE_GAUGE\"] = \"c\";\n Gauge2[\"CONNECTION_POOL_TOTAL_GAUGE\"] = \"d\";\n Gauge2[\"CONNECTION_POOL_WAITING_GAUGE\"] = \"e\";\n Gauge2[\"CPU_LOAD_GAUGE\"] = \"f\";\n Gauge2[\"CPU_SYSTEM_LOAD_GAUGE\"] = \"g\";\n Gauge2[\"DURATION_GAUGE\"] = \"h\";\n Gauge2[\"DURATION_HISTOGRAM_GAUGE\"] = \"i\";\n Gauge2[\"ERROR_COUNT_GAUGE\"] = \"j\";\n Gauge2[\"LATENCY_GAUGE\"] = \"k\";\n Gauge2[\"LATENCY_HISTOGRAM_GAUGE\"] = \"l\";\n Gauge2[\"LOGGER\"] = \"m\";\n Gauge2[\"LOGGER_COPY\"] = \"n\";\n Gauge2[\"NETWORK_RX_GAUGE\"] = \"o\";\n Gauge2[\"NETWORK_TX_GAUGE\"] = \"p\";\n Gauge2[\"REQUEST_COUNT_GAUGE\"] = \"q\";\n Gauge2[\"RETRY_COUNT_GAUGE\"] = \"r\";\n Gauge2[\"TIMER_GAUGE\"] = \"s\";\n Gauge2[\"VELOCITY_GAUGE\"] = \"t\";\n Gauge2[\"CONNECTION_COUNT_GAUGE\"] = \"u\";\n Gauge2[\"OBJECT_GAUGE\"] = \"v\";\n Gauge2[\"PAYLOAD_SIZE\"] = \"w\";\n Gauge2[\"CORE_COUNT_GAUGE\"] = \"x\";\n Gauge2[\"CHILD_COUNT\"] = \"y\";\n Gauge2[\"UNKNOWN\"] = \"z\";\n return Gauge2;\n})(Gauge || {});\nvar GaugeTypes = /* @__PURE__ */ ((GaugeTypes2) => {\n GaugeTypes2[\"GAUGE_TYPE\"] = \"_\";\n GaugeTypes2[\"INSTRUMENT_GAUGE\"] = \"a\";\n GaugeTypes2[\"INSTRUMENT_VELOCITY\"] = \"b\";\n GaugeTypes2[\"INSTRUMENT_HISTOGRAM\"] = \"c\";\n GaugeTypes2[\"INSTRUMENT_LOG\"] = \"d\";\n GaugeTypes2[\"INSTRUMENT_TIMER\"] = \"e\";\n GaugeTypes2[\"INSTRUMENT_OBJECT\"] = \"f\";\n return GaugeTypes2;\n})(GaugeTypes || {});\nclass InstrumentBaseOptions {\n fixedSize;\n padLength;\n label;\n}\nclass InstrumentBaseTelemetry {\n}\nclass InstrumentBase {\n #label = \"\";\n #options = null;\n #data = {};\n // Use for copy objects only.\n //protected _data: Record<string, any> = { };\n constructor(options = {}) {\n if (typeof options === \"string\" || options instanceof String) {\n throw new Error(\"Instrument parameter must be an options object.\");\n }\n this.#options = options;\n if (options.label) {\n this.#label = options.label;\n } else {\n this.#label = \"InstrumentGauge\";\n }\n }\n [GaugeTypes.GAUGE_TYPE] = GaugeTypes.INSTRUMENT_OBJECT;\n // Default Gauge type\n val;\n WithLabel(label) {\n this.label = label;\n return this;\n }\n DefineCopyProperties(propertyNames) {\n propertyNames.forEach((propertyName) => {\n Object.defineProperty(this, propertyName, {\n enumerable: true,\n get: () => this.#data[propertyName],\n set: (value) => {\n if (value === void 0) {\n return;\n }\n this.#data[propertyName] = value;\n }\n });\n });\n }\n GetNumber(val) {\n if (Number.isInteger(val)) {\n return val;\n } else {\n return Math.round((val + Number.EPSILON) * 100) / 100;\n }\n }\n get options() {\n return this.#options;\n }\n set options(optionsValue) {\n this.#options = optionsValue;\n }\n get label() {\n return this.#label;\n }\n set label(labelValue) {\n this.#label = labelValue;\n }\n StopTimer() {\n }\n ProcessTelemetry(telemetry) {\n throw new Error(`Must override in extended class: [ProcessTelemetry]: [${telemetry}].`);\n }\n /*\n toJSON()\n {\n \treturn this._serialValue;\n }\n */\n /*\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n [Symbol.iterator]() {\n \t// Use a new index for each iterator. This makes multiple\n \t// iterations over the iterable safe for non-trivial cases,\n \t// such as use of break or nested looping over the same iterable.\n \tlet index = 0;\n \n \treturn {\n \t\tnext: () => {\n \t\t\tif (index < 1) {\n \t\t\t\treturn {value: this.GetFormatted(), done: false}\n \t\t\t} else {\n \t\t\t\treturn {done: true}\n \t\t\t}\n \t\t}\n \t}\n }\n */\n}\nclass InstrumentVelocityOptions extends InstrumentBaseOptions {\n interval;\n valStackMaxLength;\n maxAverageValStack;\n maxAverageIterations;\n fromJSON;\n initValue;\n autoComputeVelocity;\n velocityTimeDiff;\n vaTimeDiff;\n autoComputeVelocityTimeout;\n}\nclass InstrumentVelocityTelemetry extends InstrumentBaseTelemetry {\n val;\n Inc;\n}\nclass InstrumentVelocity extends InstrumentBase {\n // eslint-disable-next-line @/no-unused-private-class-members\n #val = 0;\n #interval = null;\n #timeoutComputeVelocity = null;\n // eslint-disable-next-line @/no-unused-private-class-members\n #lastVelocity = 0;\n #delta = 0;\n #maxVelocity = 0;\n #timerInterval = 0;\n #copy = false;\n #velocity = 0;\n #velocityVal = 0;\n #valStack = [];\n #averageValStack = [];\n #maxAverageValStack = 0;\n #maxAverageIterations = 0;\n // eslint-disable-next-line @/no-unused-private-class-members\n #valStackMaxLength = 0;\n #valStackAverage = 0;\n #timeStamp = 0;\n #maxTimeDiff = 0;\n #vaTimeDiff = 0;\n #velocityTimeDiff = 0;\n #autoComputeVelocity = false;\n #autoComputeVelocityTimeout = 0;\n // 50ms to auto computer after an update when not in auto compute mode.\n #countDiff = 0;\n #timeDiff = 0;\n #deltaCountDiff = 0;\n #deltaTimeDif = 0;\n #minTimeForReporting = 0;\n #averageVelocity = [];\n // timeWindow = Number of intervals to use as the sliding time window same size. Uses average value within the time window. Larger window produces a smooth (more laggy) curve. Shorter time\n // window may be \"spikey\" depending on the volatility of the data being recorded.\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentVelocity\";\n } else {\n this.label = options.label;\n }\n if (typeof options.interval === \"undefined\") {\n this.#timerInterval = 1e3;\n } else {\n this.#timerInterval = options.interval;\n }\n if (typeof options.valStackMaxLength === \"undefined\") {\n this.#valStackMaxLength = 100;\n } else {\n this.#valStackMaxLength = options.valStackMaxLength;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n if (typeof options.autoComputeVelocity === \"undefined\") {\n this.#autoComputeVelocity = false;\n } else {\n this.#autoComputeVelocity = options.autoComputeVelocity;\n }\n if (typeof options.maxAverageValStack === \"undefined\") {\n this.#maxAverageValStack = 5;\n } else {\n this.#maxAverageValStack = options.maxAverageValStack;\n }\n if (typeof options.maxAverageIterations === \"undefined\") {\n this.#maxAverageIterations = 3;\n } else {\n this.#maxAverageIterations = options.maxAverageIterations;\n }\n if (typeof options.velocityTimeDiff === \"undefined\") {\n this.#velocityTimeDiff = 5e3;\n } else {\n this.#velocityTimeDiff = options.velocityTimeDiff;\n }\n if (typeof options.vaTimeDiff === \"undefined\") {\n this.#vaTimeDiff = 1e4;\n } else {\n this.#vaTimeDiff = options.vaTimeDiff;\n }\n if (typeof options.autoComputeVelocityTimeout === \"undefined\") {\n this.#autoComputeVelocityTimeout = 50;\n } else {\n this.#autoComputeVelocityTimeout = options.autoComputeVelocityTimeout;\n }\n this.#maxTimeDiff = this.#vaTimeDiff * 2;\n this.#minTimeForReporting = this.#vaTimeDiff + 2e3;\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_VELOCITY\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\",\n \"maxVelocity\",\n \"delta\",\n \"velocity\",\n \"va\",\n \"timeStamp\",\n \"deltaTimeDif\",\n \"deltaCountDiff\",\n \"timeDiff\",\n \"countDiff\",\n \"averageVelocity\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n Object.defineProperty(this, \"maxVelocity\", {\n enumerable: true,\n get: () => this.#GetMaxVelocity()\n });\n Object.defineProperty(this, \"delta\", {\n enumerable: true,\n get: () => this.#GetDelta()\n });\n Object.defineProperty(this, \"velocity\", {\n enumerable: true,\n get: () => this.#GetVelocity()\n });\n Object.defineProperty(this, \"va\", {\n enumerable: true,\n get: () => this.#GetVelocityStackAverage()\n });\n Object.defineProperty(this, \"timeStamp\", {\n enumerable: true,\n get: () => this.#GetTimeStamp()\n });\n Object.defineProperty(this, \"countDiff\", {\n enumerable: true,\n get: () => this.#GetCountDiff()\n });\n Object.defineProperty(this, \"timeDiff\", {\n enumerable: true,\n get: () => this.#GetTimeDiff()\n });\n Object.defineProperty(this, \"deltaCountDiff\", {\n enumerable: true,\n get: () => this.#GetDeltaCountDiff()\n });\n Object.defineProperty(this, \"deltaTimeDif\", {\n enumerable: true,\n get: () => this.#GetDeltaTimeDif()\n });\n Object.defineProperty(this, \"averageVelocity\", {\n enumerable: true,\n get: () => this.#GetAverageVelocity()\n });\n if (this.#timerInterval > 0 && this.#autoComputeVelocity === false) {\n this._StartTimer();\n }\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n this.velocity = result.velocity;\n this.maxVelocity = result.maxVelocity;\n this.delta = result.delta;\n this.va = result.va;\n this.timeStamp = result.timeStamp;\n this.countDiff = result.countDiff;\n this.timeDiff = result.timeDiff;\n this.deltaCountDiff = result.deltaCountDiff;\n this.deltaTimeDif = result.deltaTimeDif;\n this.averageVelocity = _cloneDeep(result.averageVelocity);\n }\n }\n maxVelocity = 0;\n delta = 0;\n velocity = 0;\n va = 0;\n timeStamp = 0;\n countDiff = 0;\n timeDiff = 0;\n deltaCountDiff = 0;\n deltaTimeDif = 0;\n averageVelocity = [];\n val = 0;\n WithValStackMaxLength(valStackMaxLength) {\n this.#valStackMaxLength = valStackMaxLength;\n this.#valStack = [];\n return this;\n }\n _StartTimer() {\n this.#interval = setInterval(() => {\n this.#ComputeVelocity();\n let pushVal = this.#velocity;\n for (let i = 0; i < this.#maxAverageIterations; i++) {\n if (!this.#averageValStack[i]) {\n this.#averageValStack[i] = [];\n }\n this.#averageValStack[i].push(pushVal);\n if (this.#averageValStack[i].length > this.#maxAverageValStack) {\n this.#averageValStack[i].shift();\n }\n pushVal = this.#averageValStack[i].reduce((prev, current) => prev + current) / this.#averageValStack[i].length;\n this.#averageVelocity[i] = pushVal;\n }\n }, this.#timerInterval);\n if (isNode) {\n this.#interval.unref();\n }\n }\n #ComputeVelocityByTimeDiff(checkTimeDiff, checkDeltaTimeDiff) {\n let val = 0;\n let deltaVal = 0;\n let countDiff = 0;\n let timeDiff = 0;\n let deltaCountDiff = 0;\n let deltaTimeDiff = 0;\n if (this.#valStack.length > 1 && this.#valStack[this.#valStack.length - 1].timeStamp - this.#valStack[0].timeStamp > this.#minTimeForReporting) {\n const dp = this.#valStack[this.#valStack.length - 1];\n let timeDiffPos = -1;\n let deltaDiffPos = -1;\n for (let i = this.#valStack.length - 2; i > -1; i--) {\n if (timeDiffPos === -1 && this.#timeStamp - this.#valStack[i].timeStamp >= checkTimeDiff) {\n timeDiffPos = i;\n if (checkDeltaTimeDiff === 0) {\n break;\n }\n }\n if (deltaDiffPos === -1 && this.#timeStamp - this.#valStack[i].timeStamp >= checkDeltaTimeDiff) {\n deltaDiffPos = i;\n }\n if (timeDiffPos !== -1 && deltaDiffPos !== -1) {\n break;\n }\n }\n if (timeDiffPos > -1) {\n countDiff = dp.count - this.#valStack[timeDiffPos].count;\n if (countDiff > 0) {\n timeDiff = dp.timeStamp - this.#valStack[timeDiffPos].timeStamp;\n if (timeDiff > 0) {\n val = 1e3 / timeDiff * countDiff;\n } else {\n val = 0;\n }\n } else {\n val = 0;\n }\n } else {\n val = 0;\n }\n if (deltaDiffPos > -1) {\n deltaCountDiff = this.#valStack[timeDiffPos].count - this.#valStack[deltaDiffPos].count;\n if (deltaCountDiff > 0) {\n deltaTimeDiff = this.#valStack[timeDiffPos].timeStamp - this.#valStack[deltaDiffPos].timeStamp;\n if (deltaTimeDiff > 0) {\n deltaVal = 1e3 / deltaTimeDiff * deltaTimeDiff;\n } else {\n deltaVal = 0;\n }\n } else {\n deltaVal = 0;\n }\n } else {\n deltaVal = 0;\n }\n }\n return {\n val,\n countDiff,\n timeDiff,\n deltaVal,\n deltaCountDiff,\n deltaTimeDiff\n };\n }\n #ComputeVelocity() {\n const dp = {\n timeStamp: performance.now(),\n count: this.#velocityVal\n };\n this.#valStack.push(dp);\n this.#timeStamp = dp.timeStamp;\n while (this.#valStack.length > 0 && this.#timeStamp - this.#valStack[0].timeStamp > this.#maxTimeDiff) {\n this.#valStack.shift();\n }\n const valStackAverageDataPoint = this.#ComputeVelocityByTimeDiff(this.#vaTimeDiff, 0);\n this.#valStackAverage = valStackAverageDataPoint.val;\n const velocityDataPoint = this.#ComputeVelocityByTimeDiff(this.#velocityTimeDiff, this.#velocityTimeDiff * 2);\n this.#velocity = velocityDataPoint.val;\n this.#delta = velocityDataPoint.val - velocityDataPoint.deltaVal;\n this.#countDiff = velocityDataPoint.countDiff;\n this.#timeDiff = velocityDataPoint.timeDiff;\n this.#deltaCountDiff = velocityDataPoint.deltaCountDiff;\n this.#deltaTimeDif = velocityDataPoint.deltaTimeDiff;\n this.#lastVelocity = this.#velocity;\n if (this.#velocity > this.#maxVelocity) {\n this.#maxVelocity = this.#velocity;\n }\n }\n #SetupAutoComputeVelocity() {\n if (this.#timeoutComputeVelocity) {\n clearTimeout(this.#timeoutComputeVelocity);\n }\n this.#timeoutComputeVelocity = setTimeout(() => {\n this.#ComputeVelocity();\n }, this.#autoComputeVelocityTimeout);\n }\n #GetVelocityStackAverage() {\n return this.GetNumber(this.#valStackAverage);\n }\n Inc(incVal = 1) {\n this.#velocityVal += incVal;\n if (this.#autoComputeVelocity) {\n this.#ComputeVelocity();\n } else {\n this.#SetupAutoComputeVelocity();\n }\n }\n #GetVal() {\n return this.GetNumber(this.#velocityVal);\n }\n #SetVal(updatedValue) {\n this.#velocityVal = updatedValue;\n if (this.#autoComputeVelocity) {\n this.#ComputeVelocity();\n } else {\n this.#SetupAutoComputeVelocity();\n }\n }\n #GetVelocity() {\n return this.GetNumber(this.#velocity);\n }\n #GetMaxVelocity() {\n return this.GetNumber(this.#maxVelocity);\n }\n #GetDelta() {\n return this.GetNumber(this.#delta);\n }\n #GetTimeStamp() {\n return this.GetNumber(this.#timeStamp);\n }\n #GetCountDiff() {\n return this.GetNumber(this.#countDiff);\n }\n #GetTimeDiff() {\n return this.GetNumber(this.#timeDiff);\n }\n #GetDeltaCountDiff() {\n return this.GetNumber(this.#deltaCountDiff);\n }\n #GetDeltaTimeDif() {\n return this.GetNumber(this.#deltaTimeDif);\n }\n #GetAverageVelocity() {\n return this.#averageVelocity;\n }\n StopTimer() {\n if (this.#interval !== null) {\n clearTimeout(this.#interval);\n this.#interval = null;\n }\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.Inc !== void 0) {\n this.Inc(telemetry.Inc);\n }\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nvar HistogramDataElementPos = /* @__PURE__ */ ((HistogramDataElementPos2) => {\n HistogramDataElementPos2[HistogramDataElementPos2[\"val\"] = 0] = \"val\";\n HistogramDataElementPos2[HistogramDataElementPos2[\"label\"] = 1] = \"label\";\n HistogramDataElementPos2[HistogramDataElementPos2[\"breakPoint\"] = 2] = \"breakPoint\";\n return HistogramDataElementPos2;\n})(HistogramDataElementPos || {});\nclass InstrumentHistogramOptions extends InstrumentBaseOptions {\n histogramData;\n initValue;\n fromJSON;\n}\nclass InstrumentHistogramTelemetry extends InstrumentBaseTelemetry {\n val;\n}\nclass InstrumentHistogram extends InstrumentBase {\n #histogramData = [];\n #val = 0;\n #copy = false;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentHistogram\";\n } else {\n this.label = options.label;\n }\n let histogramData = null;\n if (typeof options.histogramData === \"undefined\") {\n histogramData = null;\n } else {\n histogramData = options.histogramData;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n if (histogramData === null) {\n this.#histogramData = [\n [0, \"10\", 10],\n [0, \"20\", 20],\n [0, \"50\", 50],\n [0, \"100\", 100],\n [0, \"1000\", 1e3],\n [0, \"5000\", 5e3],\n [0, \"EE\", 0]\n ];\n } else if (Array.isArray(histogramData)) {\n this.#histogramData = [];\n for (let i = 0; i < histogramData.length; i++) {\n this.#histogramData.push([0, \"\" + histogramData[i], parseFloat(histogramData[i].toString())]);\n }\n this.#histogramData.push([0, \"EE\", 0]);\n } else {\n throw new Error(`Passed [${histogramData}] must be an array.`);\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_HISTOGRAM\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\",\n \"hist\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n Object.defineProperty(this, \"hist\", {\n enumerable: true,\n get: () => this.#GetHistogramData(),\n set: (value) => {\n this.#SetHistogramData(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.#val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.#val = result.val;\n this.hist = result.hist;\n }\n }\n hist = [];\n val = 0;\n WithInitVal(initVal) {\n this.#val = initVal;\n return this;\n }\n ResetHistogramData() {\n for (let i = 0; i < this.hist.length; i++) {\n this.hist[i][0] = 0;\n }\n }\n AddObservation(updateValue) {\n if (this.#copy) {\n throw new Error(\"Cannot add observations from the copy version of this class.\");\n }\n let i = 0;\n for (; i < this.#histogramData.length - 1; i++) {\n if (updateValue <= this.#histogramData[i][\n 2\n /* breakPoint */\n ]) {\n this.#histogramData[i][\n 0\n /* val */\n ]++;\n return;\n }\n }\n this.#histogramData[i][\n 0\n /* val */\n ]++;\n }\n #GetVal() {\n return this.GetNumber(this.#val);\n }\n #SetVal(value) {\n this.#val = value;\n this.AddObservation(value);\n }\n get formattedHistogramData() {\n let retVal = \"\";\n let sep = \"\";\n for (let i = 0; i < this.hist.length; i++) {\n retVal += sep + \"[\" + (this.hist[i][\n 0\n /* val */\n ] + \"/\" + this.hist[i][\n 1\n /* label */\n ]).padStart(10, \" \") + \"]\";\n sep = \" \";\n }\n return retVal;\n }\n #GetHistogramData() {\n return this.#histogramData;\n }\n #SetHistogramData(value) {\n this.#histogramData = value;\n }\n static AddHistogramDataEx(histoA, histoB) {\n if (histoA === null) {\n return _cloneDeep(histoB);\n }\n const result = _cloneDeep(histoA);\n const histogramAData = result.hist;\n const histogramBData = histoB.hist;\n if (histogramAData.length !== histogramBData.length) {\n throw new Error(\"Invalid HistogramData. HistogramData bucket lengths must be the same.\");\n }\n for (let i = 0; i < histogramAData.length; i++) {\n if (histogramAData[i][\n 2\n /* breakPoint */\n ] !== histogramBData[i][\n 2\n /* breakPoint */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket break-point at index [${i}] must be the same.`);\n }\n if (histogramAData[i][\n 1\n /* label */\n ] !== histogramBData[i][\n 1\n /* label */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket label at index [${i}] must be the same.`);\n }\n histogramAData[i][\n 0\n /* val */\n ] += histogramBData[i][\n 0\n /* val */\n ];\n }\n return result;\n }\n /**\n * Adds a value object (from GetFormatted()) to this instance.\n * @param {*} value \n */\n AddHistogramData(histogramData) {\n if (histogramData === null) {\n return;\n }\n if (this.hist.length !== histogramData.hist.length) {\n throw new Error(\"Invalid HistogramData. HistogramData bucket lengths must be the same.\");\n }\n for (let i = 0; i < histogramData.hist.length; i++) {\n if (this.hist[i][\n 2\n /* breakPoint */\n ] !== histogramData.hist[i][\n 2\n /* breakPoint */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket break-point at index [${i}] must be the same.`);\n }\n if (this.hist[i][\n 1\n /* label */\n ] !== histogramData.hist[i][\n 1\n /* label */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket label at index [${i}] must be the same.`);\n }\n this.hist[i][\n 0\n /* val */\n ] += histogramData.hist[i][\n 0\n /* val */\n ];\n }\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nclass InstrumentLogOptions extends InstrumentBaseOptions {\n maxSize;\n useLatestMessages;\n consoleLogging;\n instrumentLogging;\n winstonLogging;\n fromJSON;\n initValue;\n logger;\n}\nclass InstrumentLogTelemetry extends InstrumentBaseTelemetry {\n Append;\n LogMessage;\n val;\n ResetLog;\n}\nclass InstrumentLog extends InstrumentBase {\n #messages = [];\n #readPos = 0;\n #maxSize = 200;\n // Max length of cached log messages\n #copy = false;\n #useLatestMessages = false;\n #consoleLogging = false;\n #instrumentLogging = true;\n #winstonLogging = false;\n #stsLogger;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentLog\";\n } else {\n this.label = options.label;\n }\n if (typeof options.maxSize === \"undefined\") {\n this.#maxSize = 200;\n } else {\n this.#maxSize = options.maxSize;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n if (typeof options.useLatestMessages === \"undefined\") {\n this.#useLatestMessages = false;\n } else {\n this.#useLatestMessages = options.useLatestMessages;\n }\n if (typeof options.consoleLogging === \"undefined\") {\n this.#consoleLogging = false;\n } else {\n this.#consoleLogging = options.consoleLogging;\n }\n if (typeof options.instrumentLogging === \"undefined\") {\n this.#instrumentLogging = true;\n } else {\n this.#instrumentLogging = options.instrumentLogging;\n }\n if (typeof options.winstonLogging === \"undefined\") {\n this.#winstonLogging = false;\n } else {\n this.#winstonLogging = options.winstonLogging;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_LOG\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => _cloneDeep(this.#GetVal()),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n }\n val = [];\n WithMaxSize(maxSize) {\n this.#maxSize = maxSize;\n return this;\n }\n WithUseLatestMessages(useLatestMessages) {\n this.#useLatestMessages = useLatestMessages;\n return this;\n }\n WithConsoleLogging(consoleLogging) {\n this.#consoleLogging = consoleLogging;\n return this;\n }\n WithInstrumentLogging(instrumentLogging) {\n this.#instrumentLogging = instrumentLogging;\n return this;\n }\n get MaxSize() {\n return this.#maxSize;\n }\n set MaxSize(maxSize) {\n this.#maxSize = maxSize;\n }\n #DumpToConsole() {\n const logReport = this.GetMessagesSinceLastRead();\n for (let i = 0; i < logReport.length; i++) {\n console.log(logReport[i]);\n }\n }\n get consoleLogging() {\n return this.#consoleLogging;\n }\n set consoleLogging(value) {\n this.#consoleLogging = value;\n if (value === true) {\n this.#DumpToConsole();\n }\n }\n get instrumentLogging() {\n return this.#instrumentLogging;\n }\n set instrumentLogging(value) {\n this.#instrumentLogging = value;\n }\n Append(messageArray) {\n for (let i = 0; i < messageArray.length; i++) {\n this.LogMessage(messageArray[i]);\n }\n }\n error(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.error(message);\n }\n warn(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.warn(message);\n }\n info(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.info(message);\n }\n http(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.http(message);\n }\n verbose(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.verbose(message);\n }\n debug(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.debug(message);\n }\n silly(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.silly(message);\n }\n LogMessage(message) {\n if (this.#copy) {\n throw new Error(\"Cannot add log messages from the copy version of this class.\");\n }\n if (this.#consoleLogging === true) {\n console.log(message);\n }\n if (this.#instrumentLogging === false) {\n return;\n }\n this.#messages.push(message);\n if (this.#messages.length > this.#maxSize) {\n this.#messages.shift();\n this.#readPos = this.#readPos > 0 ? this.#readPos - 1 : 0;\n }\n }\n #GetVal() {\n if (this.#useLatestMessages) {\n return this.GetMessagesSinceLastRead();\n } else {\n return this.#messages;\n }\n }\n #SetVal(updatedValue) {\n this.#messages = updatedValue;\n this.#readPos = 0;\n }\n GetMessagesNoUpdate() {\n return this.#messages.slice(this.#readPos);\n }\n // This will return only those messages that have been added since the last read\n GetMessagesSinceLastRead() {\n const retVal = this.#messages.slice(this.#readPos);\n this.#readPos = this.#messages.length;\n return retVal;\n }\n ResetLog() {\n this.#messages = [];\n this.#readPos = 0;\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n if (telemetry.Append !== void 0) {\n this.Append(telemetry.Append);\n }\n if (telemetry.LogMessage !== void 0) {\n this.LogMessage(telemetry.LogMessage);\n }\n if (telemetry.ResetLog !== void 0 && telemetry.ResetLog === true) {\n this.ResetLog();\n }\n }\n}\nclass InstrumentTimerOptions extends InstrumentBaseOptions {\n fromJSON;\n initValue;\n}\nclass InstrumentTimerTelemetry extends InstrumentBaseTelemetry {\n val;\n Pause;\n Resume;\n Reset;\n}\nclass InstrumentTimerGauge extends InstrumentBase {\n #start = 0;\n #copy = false;\n #pauseVal = 0;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentTimerGauge\";\n } else {\n this.label = options.label;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_TIMER\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n this.Reset();\n }\n val = 0;\n // Take a snap shot of the current elapsed time. The 'clock' will still keep running.\n Pause() {\n this.#pauseVal = this.val;\n }\n Resume() {\n this.#pauseVal = 0;\n }\n Reset() {\n this.#start = performance.now();\n }\n #GetVal() {\n if (this.#pauseVal !== 0) {\n return this.GetNumber(this.#pauseVal);\n }\n return this.GetNumber(performance.now() - this.#start);\n }\n #SetVal(updatedValue) {\n this.#start = performance.now() - updatedValue;\n }\n get start() {\n return this.#start;\n }\n /*\n #convertMS(ms: number): string {\n //let d, h, m, s;\n let s = Math.floor(ms / 1000);\n let m = Math.floor(s / 60);\n s = s % 60;\n let h = Math.floor(m / 60);\n m = m % 60;\n const d = Math.floor(h / 24);\n h = h % 24;\n \n const pad: (n: number) => string = function(n: number) { return n < 10 ? '0' + n : n.toString(); };\n \n return (d + '.' + pad(h) + ':' + pad(m) + ':' + pad(s)).padStart(12);\n }\n */\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n if (telemetry.Pause !== void 0 && telemetry.Pause === true) {\n this.Pause();\n }\n if (telemetry.Resume !== void 0 && telemetry.Resume === true) {\n this.Resume();\n }\n if (telemetry.Reset !== void 0 && telemetry.Reset === true) {\n this.Reset();\n }\n }\n}\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar timsort$1 = {};\nvar hasRequiredTimsort$1;\nfunction requireTimsort$1() {\n if (hasRequiredTimsort$1) return timsort$1;\n hasRequiredTimsort$1 = 1;\n (function(exports) {\n (function(global, factory) {\n {\n factory(exports);\n }\n })(timsort$1, function(exports2) {\n exports2.__esModule = true;\n exports2.sort = sort;\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n var DEFAULT_MIN_MERGE = 32;\n var DEFAULT_MIN_GALLOPING = 7;\n var DEFAULT_TMP_STORAGE_LENGTH = 256;\n var POWERS_OF_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9];\n function log10(x) {\n if (x < 1e5) {\n if (x < 100) {\n return x < 10 ? 0 : 1;\n }\n if (x < 1e4) {\n return x < 1e3 ? 2 : 3;\n }\n return 4;\n }\n if (x < 1e7) {\n return x < 1e6 ? 5 : 6;\n }\n if (x < 1e9) {\n return x < 1e8 ? 7 : 8;\n }\n return 9;\n }\n function alphabeticalCompare(a, b) {\n if (a === b) {\n return 0;\n }\n if (~~a === a && ~~b === b) {\n if (a === 0 || b === 0) {\n return a < b ? -1 : 1;\n }\n if (a < 0 || b < 0) {\n if (b >= 0) {\n return -1;\n }\n if (a >= 0) {\n return 1;\n }\n a = -a;\n b = -b;\n }\n var al = log10(a);\n var bl = log10(b);\n var t = 0;\n if (al < bl) {\n a *= POWERS_OF_TEN[bl - al - 1];\n b /= 10;\n t = -1;\n } else if (al > bl) {\n b *= POWERS_OF_TEN[al - bl - 1];\n a /= 10;\n t = 1;\n }\n if (a === b) {\n return t;\n }\n return a < b ? -1 : 1;\n }\n var aStr = String(a);\n var bStr = String(b);\n if (aStr === bStr) {\n return 0;\n }\n return aStr < bStr ? -1 : 1;\n }\n function minRunLength(n) {\n var r = 0;\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n return n + r;\n }\n function makeAscendingRun(array, lo, hi, compare) {\n var runHi = lo + 1;\n if (runHi === hi) {\n return 1;\n }\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n reverseRun(array, lo, runHi);\n } else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n return runHi - lo;\n }\n function reverseRun(array, lo, hi) {\n hi--;\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n }\n function binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n for (; start < hi; start++) {\n var pivot = array[start];\n var left = lo;\n var right = start;\n while (left < right) {\n var mid = left + right >>> 1;\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n var n = start - left;\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n case 2:\n array[left + 2] = array[left + 1];\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n array[left] = pivot;\n }\n }\n function gallopLeft(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n } else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n } else {\n offset = m;\n }\n }\n return offset;\n }\n function gallopRight(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n } else {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n } else {\n lastOffset = m + 1;\n }\n }\n return offset;\n }\n var TimSort = (function() {\n function TimSort2(array, compare) {\n _classCallCheck(this, TimSort2);\n this.array = null;\n this.compare = null;\n this.minGallop = DEFAULT_MIN_GALLOPING;\n this.length = 0;\n this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n this.stackLength = 0;\n this.runStart = null;\n this.runLength = null;\n this.stackSize = 0;\n this.array = array;\n this.compare = compare;\n this.length = array.length;\n if (this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n this.tmpStorageLength = this.length >>> 1;\n }\n this.tmp = new Array(this.tmpStorageLength);\n this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40;\n this.runStart = new Array(this.stackLength);\n this.runLength = new Array(this.stackLength);\n }\n TimSort2.prototype.pushRun = function pushRun(runStart, runLength) {\n this.runStart[this.stackSize] = runStart;\n this.runLength[this.stackSize] = runLength;\n this.stackSize += 1;\n };\n TimSort2.prototype.mergeRuns = function mergeRuns() {\n while (this.stackSize > 1) {\n var n = this.stackSize - 2;\n if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]) {\n if (this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n } else if (this.runLength[n] > this.runLength[n + 1]) {\n break;\n }\n this.mergeAt(n);\n }\n };\n TimSort2.prototype.forceMergeRuns = function forceMergeRuns() {\n while (this.stackSize > 1) {\n var n = this.stackSize - 2;\n if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n this.mergeAt(n);\n }\n };\n TimSort2.prototype.mergeAt = function mergeAt(i) {\n var compare = this.compare;\n var array = this.array;\n var start1 = this.runStart[i];\n var length1 = this.runLength[i];\n var start2 = this.runStart[i + 1];\n var length2 = this.runLength[i + 1];\n this.runLength[i] = length1 + length2;\n if (i === this.stackSize - 3) {\n this.runStart[i + 1] = this.runStart[i + 2];\n this.runLength[i + 1] = this.runLength[i + 2];\n }\n this.stackSize--;\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n if (length1 === 0) {\n return;\n }\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n if (length2 === 0) {\n return;\n }\n if (length1 <= length2) {\n this.mergeLow(start1, length1, start2, length2);\n } else {\n this.mergeHigh(start1, length1, start2, length2);\n }\n };\n TimSort2.prototype.mergeLow = function mergeLow(start1, length1, start2, length2) {\n var compare = this.compare;\n var array = this.array;\n var tmp = this.tmp;\n var i = 0;\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n var minGallop = this.minGallop;\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n if (--length2 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n exit = true;\n break;\n }\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n if (--length1 === 1) {\n exit = true;\n break;\n }\n minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (minGallop < 0) {\n minGallop = 0;\n }\n minGallop += 2;\n }\n this.minGallop = minGallop;\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n } else if (length1 === 0) {\n throw new Error(\"mergeLow preconditions were not respected\");\n } else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n };\n TimSort2.prototype.mergeHigh = function mergeHigh(start1, length1, start2, length2) {\n var compare = this.compare;\n var array = this.array;\n var tmp = this.tmp;\n var i = 0;\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n return;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n return;\n }\n var minGallop = this.minGallop;\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n array[dest--] = tmp[cursor2--];\n if (--length2 === 1) {\n exit = true;\n break;\n }\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n exit = true;\n break;\n }\n minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (minGallop < 0) {\n minGallop = 0;\n }\n minGallop += 2;\n }\n this.minGallop = minGallop;\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n } else if (length2 === 0) {\n throw new Error(\"mergeHigh preconditions were not respected\");\n } else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n };\n return TimSort2;\n })();\n function sort(array, compare, lo, hi) {\n if (!Array.isArray(array)) {\n throw new TypeError(\"Can only sort arrays\");\n }\n if (!compare) {\n compare = alphabeticalCompare;\n } else if (typeof compare !== \"function\") {\n hi = lo;\n lo = compare;\n compare = alphabeticalCompare;\n }\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n var remaining = hi - lo;\n if (remaining < 2) {\n return;\n }\n var runLength = 0;\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n var ts = new TimSort(array, compare);\n var minRun = minRunLength(remaining);\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n ts.forceMergeRuns();\n }\n });\n })(timsort$1);\n return timsort$1;\n}\nvar timsort;\nvar hasRequiredTimsort;\nfunction requireTimsort() {\n if (hasRequiredTimsort) return timsort;\n hasRequiredTimsort = 1;\n timsort = requireTimsort$1();\n return timsort;\n}\nvar timsortExports = requireTimsort();\nvar lib;\nvar hasRequiredLib;\nfunction requireLib() {\n if (hasRequiredLib) return lib;\n hasRequiredLib = 1;\n function lessThanZeroError(p) {\n return 'Expect percentile to be >= 0 but given \"' + p + '\" and its type is \"' + typeof p + '\".';\n }\n function greaterThanHundredError(p) {\n return 'Expect percentile to be <= 100 but given \"' + p + '\" and its type is \"' + typeof p + '\".';\n }\n function nanError(p) {\n return 'Expect percentile to be a number but given \"' + p + '\" and its type is \"' + typeof p + '\".';\n }\n function validateInput(ps) {\n return ps.reduce(function(errors, p) {\n if (isNaN(Number(p))) {\n errors.push(nanError(p));\n } else if (p < 0) {\n errors.push(lessThanZeroError(p));\n } else if (p > 100) {\n errors.push(greaterThanHundredError(p));\n }\n return errors;\n }, []);\n }\n function getPsValue(p, list) {\n if (p === 0) return list[0];\n var kIndex = Math.ceil(list.length * (p / 100)) - 1;\n return list[kIndex];\n }\n function percentile2(pOrPs, list, fn) {\n var ps = Array.isArray(pOrPs) ? pOrPs : [pOrPs];\n var validationErrors = validateInput(ps);\n if (validationErrors.length) {\n throw new Error(validationErrors.join(\" \"));\n }\n list = list.slice().sort(function(a, b) {\n if (fn) {\n a = fn(a);\n b = fn(b);\n }\n a = Number.isNaN(a) ? Number.NEGATIVE_INFINITY : a;\n b = Number.isNaN(b) ? Number.NEGATIVE_INFINITY : b;\n if (a > b) return 1;\n if (a < b) return -1;\n return 0;\n });\n if (ps.length === 1) {\n return getPsValue(ps[0], list);\n }\n return ps.map(function(p) {\n return getPsValue(p, list);\n });\n }\n lib = percentile2;\n return lib;\n}\nvar libExports = requireLib();\nconst percentile = /* @__PURE__ */ getDefaultExportFromCjs(libExports);\nclass InstrumentGaugeOptions extends InstrumentBaseOptions {\n interval;\n sampleSize;\n fromJSON;\n initValue;\n}\nclass InstrumentGaugeTelemetry extends InstrumentBaseTelemetry {\n val;\n Inc;\n Dec;\n}\nclass InstrumentGauge extends InstrumentBase {\n #val = 0;\n #maxval = null;\n #lastObservedValue = 0;\n #timeSeriesList = [];\n #maxSampleSize = 0;\n #timerInterval = 0;\n #observer = null;\n //@@ extras\n #min = null;\n #max = 0;\n #observations = 0;\n #total = 0;\n #copy = false;\n constructor(options = {}) {\n super(options);\n if (!options.label) {\n this.label = \"InstrumentGauge\";\n } else {\n this.label = options.label;\n }\n if (typeof options.interval === \"undefined\") {\n this.#timerInterval = 0;\n } else {\n this.#timerInterval = options.interval;\n }\n if (typeof options.sampleSize === \"undefined\") {\n this.#maxSampleSize = 600;\n } else {\n this.#maxSampleSize = options.sampleSize;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_GAUGE\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\",\n \"min\",\n \"max\",\n \"avg\",\n \"percentile\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n if (this.#timerInterval > 0) {\n Object.defineProperty(this, \"percentile\", {\n enumerable: true,\n get: () => this.#GetPercentileData()\n });\n this._StartTimer();\n }\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n if (result.percentile) {\n this.percentile = result.percentile;\n }\n if (result.min) {\n this.min = result.min;\n }\n if (result.max) {\n this.max = result.max;\n }\n if (result.avg) {\n this.avg = result.avg;\n }\n }\n }\n percentile;\n min;\n max;\n avg;\n val = 0;\n WithInitVal(initVal) {\n this.val = initVal;\n return this;\n }\n WithMin() {\n Object.defineProperty(this, \"min\", {\n enumerable: true,\n get: () => this.#GetMin()\n });\n return this;\n }\n WithMax() {\n Object.defineProperty(this, \"max\", {\n enumerable: true,\n get: () => this.#GetMax()\n });\n return this;\n }\n WithAverage() {\n Object.defineProperty(this, \"avg\", {\n enumerable: true,\n get: () => this.#GetAverage()\n });\n return this;\n }\n _StartTimer() {\n if (this.#timerInterval > 0) {\n this.#timeSeriesList = [];\n this.#observer = setInterval(() => {\n if (this.#timeSeriesList.length > this.#maxSampleSize) {\n this.#timeSeriesList.shift();\n }\n const maxval = this.#GetAndResetMaxVal();\n this.#timeSeriesList.push(maxval);\n }, this.#timerInterval);\n if (isNode) {\n this.#observer.unref();\n }\n } else {\n throw new Error(`Unable to StartTimer for this instrument. The interval is set to <= 0.`);\n }\n }\n StopTimer() {\n if (this.#observer) {\n clearTimeout(this.#observer);\n this.#observer = null;\n this.#timeSeriesList = [];\n }\n }\n /**\n * If the gauge is being monitored as part of a time series, get the most recent recorded value (max value) from within the time interval\n * otherwise, just return the current instant value.\n */\n #GetVal() {\n if (this.#timerInterval > 0 && this.#observer !== null) {\n if (this.#maxval === null) {\n return this.GetNumber(this.#lastObservedValue);\n } else {\n return this.GetNumber(this.#maxval);\n }\n }\n return this.GetNumber(this.#val);\n }\n #SetVal(updatedValue) {\n this.#val = updatedValue;\n this.#observations++;\n this.#total += updatedValue;\n if (this.#val > this.#max) {\n this.#max = this.#val;\n }\n if (this.#min !== null) {\n if (this.#val < this.#min) {\n this.#min = this.#val;\n }\n } else {\n this.#min = this.#val;\n }\n if (this.#timerInterval > 0) {\n this.#lastObservedValue = updatedValue;\n if (this.#maxval === null) {\n this.#maxval = this.#val;\n } else if (this.#val > this.#maxval) {\n this.#maxval = this.#val;\n }\n }\n }\n #GetMin() {\n if (this.#min !== null) {\n return this.#min;\n }\n return 0;\n }\n #GetMax() {\n return this.#max;\n }\n #GetAverage() {\n if (this.#observations > 0) {\n return this.#total / this.#observations;\n }\n return 0;\n }\n Reset() {\n this.StopTimer();\n this.#maxval = 0;\n this.#lastObservedValue = 0;\n this.#val = 0;\n this.#min = null;\n this.#max = 0;\n this.#observations = 0;\n this.#total = 0;\n if (this.#timerInterval > 0) {\n this._StartTimer();\n }\n }\n #GetAndResetMaxVal() {\n if (this.#maxval === null) {\n return this.#lastObservedValue;\n }\n const retVal = this.#maxval;\n this.#maxval = null;\n return retVal;\n }\n Inc(incVal = 1) {\n this.#SetVal(this.#val + incVal);\n }\n Dec(decVal = 1) {\n this.#SetVal(this.#val - decVal);\n }\n #NumberCompare(a, b) {\n return a - b;\n }\n #GetPercentileData() {\n const sortedList = this.#timeSeriesList.slice(0);\n timsortExports.sort(sortedList, this.#NumberCompare);\n return percentile([50, 80, 90, 95, 99, 99.95], sortedList);\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.Inc !== void 0) {\n this.Inc(telemetry.Inc);\n }\n if (telemetry.Dec !== void 0) {\n this.Dec(telemetry.Dec);\n }\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nclass InstrumentObjectOptions extends InstrumentBaseOptions {\n fromJSON;\n initValue;\n}\nclass InstrumentObjectTelemetry extends InstrumentBaseTelemetry {\n val;\n}\nclass InstrumentObject extends InstrumentBase {\n #val = {};\n #copy = false;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentObject\";\n } else {\n this.label = options.label;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_OBJECT\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n } else {\n this.val = {};\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n }\n val;\n WithInitVal(initVal) {\n this.val = initVal;\n return this;\n }\n #GetVal() {\n return this.#val;\n }\n #SetVal(updatedValue) {\n this.#val = updatedValue;\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nfunction CreateInstrument(sourceInstrument) {\n switch (sourceInstrument[GaugeTypes.GAUGE_TYPE]) {\n case GaugeTypes.INSTRUMENT_GAUGE:\n return new InstrumentGauge({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_VELOCITY:\n return new InstrumentVelocity({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_HISTOGRAM:\n return new InstrumentHistogram({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_LOG:\n return new InstrumentLog({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_TIMER:\n return new InstrumentTimerGauge({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_OBJECT:\n return new InstrumentObject({ fromJSON: sourceInstrument });\n }\n throw new Error(`Cannot create instrument from type: [${sourceInstrument[GaugeTypes.GAUGE_TYPE]}]`);\n}\nfunction GetInstrumentName(gauge) {\n switch (gauge) {\n case Gauge.ACTIVE_REQUEST_GAUGE:\n return \"Active Requests\";\n case Gauge.AUTHENTICATION_COUNT_GAUGE:\n return \"Authentication Count\";\n case Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE:\n return \"Authentication Error Count\";\n case Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE:\n return \"Authentication Retry Count\";\n case Gauge.CONNECTION_POOL_IDLE_GAUGE:\n return \"Connection Pool Idle\";\n case Gauge.CONNECTION_POOL_TOTAL_GAUGE:\n return \"Connection Pool Total\";\n case Gauge.CONNECTION_POOL_WAITING_GAUGE:\n return \"Connection Pool Waiting\";\n case Gauge.CPU_LOAD_GAUGE:\n return \"CPU Load\";\n case Gauge.CPU_SYSTEM_LOAD_GAUGE:\n return \"CPU SYstem Load\";\n case Gauge.DURATION_GAUGE:\n return \"Duration\";\n case Gauge.DURATION_HISTOGRAM_GAUGE:\n return \"Diration Histogram\";\n case Gauge.ERROR_COUNT_GAUGE:\n return \"Errors\";\n case Gauge.LATENCY_GAUGE:\n return \"Latency\";\n case Gauge.LATENCY_HISTOGRAM_GAUGE:\n return \"Latency Histogram\";\n case Gauge.LOGGER:\n return \"Logger\";\n case Gauge.LOGGER_COPY:\n return \"_Logger\";\n case Gauge.NETWORK_RX_GAUGE:\n return \"Network Receive\";\n case Gauge.NETWORK_TX_GAUGE:\n return \"Network Transmit\";\n case Gauge.REQUEST_COUNT_GAUGE:\n return \"Requests\";\n case Gauge.RETRY_COUNT_GAUGE:\n return \"Retries\";\n case Gauge.TIMER_GAUGE:\n return \"Timer\";\n case Gauge.VELOCITY_GAUGE:\n return \"Velocity\";\n case Gauge.CONNECTION_COUNT_GAUGE:\n return \"TCP Connection\";\n case Gauge.OBJECT_GAUGE:\n return \"Object\";\n case Gauge.CORE_COUNT_GAUGE:\n return \"Core Count\";\n default:\n return \"Unknown\";\n }\n}\nfunction StopInstruments(instruments) {\n if (instruments) {\n if (Array.isArray(instruments)) {\n instruments.forEach((instrument) => {\n if (instrument.StopTimer) {\n instrument.StopTimer();\n }\n });\n } else {\n for (const [, value] of Object.entries(instruments)) {\n if (value.StopTimer) {\n value.StopTimer();\n }\n }\n }\n }\n}\nexport {\n CreateInstrument,\n Gauge,\n GaugeTypes,\n GetInstrumentName,\n HistogramDataElementPos,\n InstrumentBase,\n InstrumentBaseOptions,\n InstrumentBaseTelemetry,\n InstrumentGauge,\n InstrumentGaugeOptions,\n InstrumentGaugeTelemetry,\n InstrumentHistogram,\n InstrumentHistogramOptions,\n InstrumentHistogramTelemetry,\n InstrumentLog,\n InstrumentLogOptions,\n InstrumentLogTelemetry,\n InstrumentObject,\n InstrumentObjectOptions,\n InstrumentObjectTelemetry,\n InstrumentTimerGauge,\n InstrumentTimerOptions,\n InstrumentTimerTelemetry,\n InstrumentVelocity,\n InstrumentVelocityOptions,\n InstrumentVelocityTelemetry,\n StopInstruments\n};\n//# sourceMappingURL=index.mjs.map\n","export function utf8Count(str) {\n const strLength = str.length;\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n }\n else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\nexport function utf8EncodeJs(str, output, outputOffset) {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n// TextEncoder and TextDecoder are standardized in whatwg encoding:\n// https://encoding.spec.whatwg.org/\n// and available in all the modern browsers:\n// https://caniuse.com/textencoder\n// They are available in Node.js since v12 LTS as well:\n// https://nodejs.org/api/globals.html#textencoder\nconst sharedTextEncoder = new TextEncoder();\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/encode-string.ts` for details.\nconst TEXT_ENCODER_THRESHOLD = 50;\nexport function utf8EncodeTE(str, output, outputOffset) {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\nexport function utf8Encode(str, output, outputOffset) {\n if (str.length > TEXT_ENCODER_THRESHOLD) {\n utf8EncodeTE(str, output, outputOffset);\n }\n else {\n utf8EncodeJs(str, output, outputOffset);\n }\n}\nconst CHUNK_SIZE = 4096;\nexport function utf8DecodeJs(bytes, inputOffset, byteLength) {\n let offset = inputOffset;\n const end = offset + byteLength;\n const units = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n }\n else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n }\n else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n }\n else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n const byte4 = bytes[offset++] & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n }\n else {\n units.push(byte1);\n }\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n return result;\n}\nconst sharedTextDecoder = new TextDecoder();\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/decode-string.ts` for details.\nconst TEXT_DECODER_THRESHOLD = 200;\nexport function utf8DecodeTD(bytes, inputOffset, byteLength) {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\nexport function utf8Decode(bytes, inputOffset, byteLength) {\n if (byteLength > TEXT_DECODER_THRESHOLD) {\n return utf8DecodeTD(bytes, inputOffset, byteLength);\n }\n else {\n return utf8DecodeJs(bytes, inputOffset, byteLength);\n }\n}\n//# sourceMappingURL=utf8.mjs.map","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n type;\n data;\n constructor(type, data) {\n this.type = type;\n this.data = data;\n }\n}\n//# sourceMappingURL=ExtData.mjs.map","export class DecodeError extends Error {\n constructor(message) {\n super(message);\n // fix the prototype chain in a cross-platform way\n const proto = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n//# sourceMappingURL=DecodeError.mjs.map","// Integer Utility\nexport const UINT32_MAX = 4294967295;\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\nexport function setUint64(view, offset, value) {\n const high = value / 4294967296;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function setInt64(view, offset, value) {\n const high = Math.floor(value / 4294967296);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function getInt64(view, offset) {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\nexport function getUint64(view, offset) {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\n//# sourceMappingURL=int.mjs.map","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.mjs\";\nimport { getInt64, setInt64 } from \"./utils/int.mjs\";\nexport const EXT_TIMESTAMP = -1;\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\nexport function encodeTimeSpecToTimestamp({ sec, nsec }) {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n }\n else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n }\n else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\nexport function encodeDateToTimeSpec(date) {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\nexport function encodeTimestampExtension(object) {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n }\n else {\n return null;\n }\n}\nexport function decodeTimestampToTimeSpec(data) {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\nexport function decodeTimestampExtension(data) {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n//# sourceMappingURL=timestamp.mjs.map","// ExtensionCodec to handle MessagePack extensions\nimport { ExtData } from \"./ExtData.mjs\";\nimport { timestampExtension } from \"./timestamp.mjs\";\nexport class ExtensionCodec {\n static defaultCodec = new ExtensionCodec();\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand;\n // built-in extensions\n builtInEncoders = [];\n builtInDecoders = [];\n // custom extensions\n encoders = [];\n decoders = [];\n constructor() {\n this.register(timestampExtension);\n }\n register({ type, encode, decode, }) {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n }\n else {\n // built-in extensions\n const index = -1 - type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n tryToEncode(object, context) {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n decode(data, type, context) {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n }\n else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n//# sourceMappingURL=ExtensionCodec.mjs.map","function isArrayBufferLike(buffer) {\n return (buffer instanceof ArrayBuffer || (typeof SharedArrayBuffer !== \"undefined\" && buffer instanceof SharedArrayBuffer));\n}\nexport function ensureUint8Array(buffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n }\n else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n else if (isArrayBufferLike(buffer)) {\n return new Uint8Array(buffer);\n }\n else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n//# sourceMappingURL=typedArrays.mjs.map","import { utf8Count, utf8Encode } from \"./utils/utf8.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { setInt64, setUint64 } from \"./utils/int.mjs\";\nimport { ensureUint8Array } from \"./utils/typedArrays.mjs\";\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\nexport class Encoder {\n extensionCodec;\n context;\n useBigInt64;\n maxDepth;\n initialBufferSize;\n sortKeys;\n forceFloat32;\n ignoreUndefined;\n forceIntegerToFloat;\n pos;\n view;\n bytes;\n entered = false;\n constructor(options) {\n this.extensionCodec = options?.extensionCodec ?? ExtensionCodec.defaultCodec;\n this.context = options?.context; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n this.useBigInt64 = options?.useBigInt64 ?? false;\n this.maxDepth = options?.maxDepth ?? DEFAULT_MAX_DEPTH;\n this.initialBufferSize = options?.initialBufferSize ?? DEFAULT_INITIAL_BUFFER_SIZE;\n this.sortKeys = options?.sortKeys ?? false;\n this.forceFloat32 = options?.forceFloat32 ?? false;\n this.ignoreUndefined = options?.ignoreUndefined ?? false;\n this.forceIntegerToFloat = options?.forceIntegerToFloat ?? false;\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n clone() {\n // Because of slightly special argument `context`,\n // type assertion is needed.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new Encoder({\n extensionCodec: this.extensionCodec,\n context: this.context,\n useBigInt64: this.useBigInt64,\n maxDepth: this.maxDepth,\n initialBufferSize: this.initialBufferSize,\n sortKeys: this.sortKeys,\n forceFloat32: this.forceFloat32,\n ignoreUndefined: this.ignoreUndefined,\n forceIntegerToFloat: this.forceIntegerToFloat,\n });\n }\n reinitializeState() {\n this.pos = 0;\n }\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n encodeSharedRef(object) {\n if (this.entered) {\n const instance = this.clone();\n return instance.encodeSharedRef(object);\n }\n try {\n this.entered = true;\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n }\n finally {\n this.entered = false;\n }\n }\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n encode(object) {\n if (this.entered) {\n const instance = this.clone();\n return instance.encode(object);\n }\n try {\n this.entered = true;\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n }\n finally {\n this.entered = false;\n }\n }\n doEncode(object, depth) {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n if (object == null) {\n this.encodeNil();\n }\n else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n }\n else if (typeof object === \"number\") {\n if (!this.forceIntegerToFloat) {\n this.encodeNumber(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n else if (typeof object === \"string\") {\n this.encodeString(object);\n }\n else if (this.useBigInt64 && typeof object === \"bigint\") {\n this.encodeBigInt64(object);\n }\n else {\n this.encodeObject(object, depth);\n }\n }\n ensureBufferSizeToWrite(sizeToWrite) {\n const requiredSize = this.pos + sizeToWrite;\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n resizeBuffer(newSize) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n newBytes.set(this.bytes);\n this.view = newView;\n this.bytes = newBytes;\n }\n encodeNil() {\n this.writeU8(0xc0);\n }\n encodeBoolean(object) {\n if (object === false) {\n this.writeU8(0xc2);\n }\n else {\n this.writeU8(0xc3);\n }\n }\n encodeNumber(object) {\n if (!this.forceIntegerToFloat && Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n }\n else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n }\n else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n }\n else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n }\n else if (!this.useBigInt64) {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n }\n else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n }\n else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n }\n else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n }\n else if (!this.useBigInt64) {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n encodeNumberAsFloat(object) {\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n }\n else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n encodeBigInt64(object) {\n if (object >= BigInt(0)) {\n // uint 64\n this.writeU8(0xcf);\n this.writeBigUint64(object);\n }\n else {\n // int 64\n this.writeU8(0xd3);\n this.writeBigInt64(object);\n }\n }\n writeStringHeader(byteLength) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n }\n else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n }\n else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n }\n else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n }\n else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n encodeString(object) {\n const maxHeaderSize = 1 + 4;\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8Encode(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n encodeObject(object, depth) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n }\n else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n }\n else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n }\n else if (typeof object === \"object\") {\n this.encodeMap(object, depth);\n }\n else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n encodeBinary(object) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n encodeArray(object, depth) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n }\n else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n countWithoutUndefined(object, keys) {\n let count = 0;\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n return count;\n }\n encodeMap(object, depth) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n }\n else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large map object: ${size}`);\n }\n for (const key of keys) {\n const value = object[key];\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n encodeExtension(ext) {\n if (typeof ext.data === \"function\") {\n const data = ext.data(this.pos + 6);\n const size = data.length;\n if (size >= 0x100000000) {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeU8(0xc9);\n this.writeU32(size);\n this.writeI8(ext.type);\n this.writeU8a(data);\n return;\n }\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n }\n else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n }\n else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n }\n else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n }\n else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n }\n else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n writeU8(value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n writeU8a(values) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n writeI8(value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n writeU16(value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n writeI16(value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n writeU32(value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n writeI32(value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n writeF32(value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n writeF64(value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n writeU64(value) {\n this.ensureBufferSizeToWrite(8);\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n writeI64(value) {\n this.ensureBufferSizeToWrite(8);\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n writeBigUint64(value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setBigUint64(this.pos, value);\n this.pos += 8;\n }\n writeBigInt64(value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setBigInt64(this.pos, value);\n this.pos += 8;\n }\n}\n//# sourceMappingURL=Encoder.mjs.map","import { Encoder } from \"./Encoder.mjs\";\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(value, options) {\n const encoder = new Encoder(options);\n return encoder.encodeSharedRef(value);\n}\n//# sourceMappingURL=encode.mjs.map","import chalk from 'chalk';\n\nimport isNode from 'detect-node';\n\nimport axios from 'axios'\n\nimport { IPublishTransportRESTServerOptions, IInstrumentPayload, IPublisherTransport } from './../../commonTypes'\n\nimport { STSOptionsBase, STSAxiosConfig } from '@nsshunt/stsutils'\n\nimport { encode } from \"@msgpack/msgpack\";\n\nexport class PublishTransportRESTServer extends STSOptionsBase implements IPublisherTransport\n{\n constructor(options: IPublishTransportRESTServerOptions) {\n super(options);\n }\n\n override get options(): IPublishTransportRESTServerOptions {\n return super.options as IPublishTransportRESTServerOptions;\n }\n\n // Returns true for success or false for failure.\n Publish = async (payload: IInstrumentPayload): Promise<boolean> => {\n try {\n if (this.options.showPublishPayload) {\n console.log(chalk.grey(`PublishTransportRESTServer::Publish() url: [${this.options.url}]`))\n console.log(payload)\n }\n const encodedData: Uint8Array = encode(payload, { ignoreUndefined: true});\n //const buffer: Buffer = Buffer.from(encodedData); // copies the data\n //const buffer2: Buffer = Buffer.from(encodedData.buffer, encodedData.byteOffset, encodedData.byteLength); // does not copy the data\n //const headers = { 'Content-Type': 'application/octet-stream', 'Content-Length': encodedData.length };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = { 'Content-Type': 'application/octet-stream' };\n //const headers = { 'Content-Type': 'application/json' };\n let retVal = null;\n //const processStart = performance.now();\n if (this.options.socketPath) {\n retVal = await axios({\n method: 'post',\n data: Buffer.from(encodedData),\n headers: headers,\n socketPath: this.options.socketPath\n });\n } else {\n if (isNode) {\n if (this.options.agentManager) {\n retVal = await axios(new STSAxiosConfig(this.options.url as string, 'post', headers)\n .withData(Buffer.from(encodedData))\n .withAgentManager(this.options.agentManager).config);\n } else {\n retVal = await axios(new STSAxiosConfig(this.options.url as string, 'post', headers)\n .withData(Buffer.from(encodedData)).config);\n }\n } else {\n //@@\n //const blob = new Blob([encodedData], { type: 'application/octet-stream' });\n const blob = new Blob([new Uint8Array(encodedData)], { type: 'application/octet-stream' });\n retVal = await axios(new STSAxiosConfig(this.options.url as string, 'post', headers)\n .withData(blob).config);\n }\n }\n\n if (retVal.status !== 200) {\n\n if (this.options.showPublishPayload) {\n console.log(chalk.red(`PublishTransportRESTServer::Publish() Error (_PerformPublishRESTAPI:_PerformPublish:#publishmessage): Invalid response from server: [${retVal.status}]`))\n }\n \n this.options.logger.debug(chalk.red(`Error (_PerformPublishRESTAPI:_PerformPublish:#publishmessage): Invalid response from server: [${retVal.status}]`));\n return false;\n } else {\n\n if (this.options.showPublishPayload) {\n console.log(chalk.grey(`PublishTransportRESTServer::Publish() _PerformPublishRESTAPI:_PerformPublish:#publishmessage: [${this.options.url}] - Valid response from server: [${retVal.status}]`))\n }\n \n //@@this.options.logger.debug(chalk.green(`_PerformPublishRESTAPI:_PerformPublish:#publishmessage: [${this.options.url}] - Valid response from server: [${retVal.status}]`));\n }\n\n return true;\n \n } catch (error) {\n\n if (this.options.showPublishPayload) {\n console.log(chalk.red(`PublishTransportRESTServer::Publish() Error (PublishRESTServer:_PerformPublishRESTAPI:Error: [${error}]`))\n }\n\n //@@\n //this.options.logger.error(chalk.red(`Error (PublishRESTServer:_PerformPublishRESTAPI:Error: [${error}]`));\n return false;\n }\n }\n\n async Close(): Promise<boolean> {\n if (this.options.agentManager) {\n this.options.agentManager.Terminate();\n }\n return true;\n }\n}\n","import chalk from 'chalk';\n\nimport isNode from 'detect-node'\n\nimport { STSOptionsBase } from '@nsshunt/stsutils'\n\nimport { IPublishInstrumentsOptions, IInstrumentPayload, TransportType, IPublisherTransport } from './../commonTypes'\n\nimport { PublishTransportRESTServer } from './publishers/publishTransportRESTServer'\n\nexport enum ePublishState {\n init,\n started,\n stopping\n}\n/**\n * This class managers the creation of instruments and the publication of instrumentation telemetry to the instrument manager service.\n */\nexport class PublishInstruments extends STSOptionsBase {\n #inPublish = false;\n #observer: NodeJS.Timeout | null = null;\n #publishState: ePublishState = ePublishState.init;\n #publisherTransport: IPublisherTransport | null = null;\n\n constructor(options: IPublishInstrumentsOptions) {\n super(options);\n\n this.#publisherTransport = null;\n switch (options.publishTransportBaseOptions.transportType) {\n case TransportType.RESTAPI :\n this.#publisherTransport = new PublishTransportRESTServer(options.publishTransportBaseOptions);\n break;\n }\n\n this.#UpdateState(ePublishState.init, \"constructor()\");\n }\n\n override get options(): IPublishInstrumentsOptions {\n return super.options as IPublishInstrumentsOptions;\n }\n\t\n async Publish(): Promise<boolean> {\n if (this.#inPublish) {\n return false;\n }\n\n if (this.#publisherTransport) {\n try {\n this.#inPublish = true;\n\n //const instrumentPayload: IInstrumentPayload = this.#GetPayloadData();\n if (this.options.publishInstrumentController) {\n const instrumentPayload: IInstrumentPayload = this.options.publishInstrumentController.GetPayloadData();\n return await this.#publisherTransport.Publish(instrumentPayload);\n }\n\n return false;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n } finally {\n this.#inPublish = false;\n }\n } else {\n return false;\n }\n }\n\n #PublishTimeoutLoop(publishInterval: number) { \n this.#observer = setTimeout(async () => {\n const start = performance.now();\n const result = await this.Publish();\n const end = performance.now();\n const diff = end - start;\n\n if (this.#publishState === ePublishState.started) {\n if (result === true) {\n this.#PublishTimeoutLoop(this.options.publishInterval - (diff));\n } else {\n this.#PublishTimeoutLoop(this.options.publishPostFailInterval - (diff));\n }\n }\n }, publishInterval);\n if (isNode) this.#observer.unref();\n }\n\n async StartPublish(): Promise<boolean> {\n if (this.#publishState !== ePublishState.init) {\n this.options.logger.debug(chalk.yellow(`StartPublish:${this.options.processContext.nid}: StartPublish called when not currently in the init state. Current State: [${this.#publishState}]`));\n return false;\n }\n this.#UpdateState(ePublishState.started, \"StartPublish()\");\n this.#PublishTimeoutLoop(this.options.publishInterval);\n return true;\n }\n\n #UpdateState(newState: ePublishState, comment: string): void {\n const previousState = this.#publishState;\n this.#publishState = newState;\n this.options.logger.debug(chalk.yellow(`#UpdateState:${this.options.processContext.nid}: Previous State: [${previousState}]. Current State: [${this.#publishState}]. Comment: [${comment}]`));\n }\n\n async EndPublish(): Promise<boolean> {\n if (this.#publishState !== ePublishState.started) {\n this.options.logger.debug(chalk.yellow(`EndPublish:${this.options.processContext.nid}: EndPublish called when not within the started state. Current State: [${this.#publishState}]`));\n return false;\n }\n this.#UpdateState(ePublishState.stopping, \"EndPublish() (1)\");\n if (this.#observer !== null) {\n clearTimeout(this.#observer);\n this.#observer = null;\n // Perform a final publish/flush of any remaining instrument data (such as logs etc.)\n await this.Publish();\n }\n if (this.#publisherTransport) {\n await this.#publisherTransport.Close();\n }\n this.#UpdateState(ePublishState.init, \"EndPublish() (2)\");\n return true;\n }\n}\n","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport chalk from 'chalk';\n\nimport { GaugeTypes, Gauge, InstrumentBaseOptions, InstrumentBase, InstrumentBaseTelemetry,\n InstrumentLog, InstrumentLogTelemetry, InstrumentGauge, InstrumentHistogram, \n InstrumentVelocity, InstrumentTimerGauge, InstrumentObject\n} from '@nsshunt/stsobservability'\n\nimport { STSOptionsBase } from '@nsshunt/stsutils'\n\nimport { IPublishInstrumentControllerOptions, InstrumentDefinitions, InstrumentDefinition,\n IContextBase, IInstrumentPayload, IPublishInstrumentController, IPublishInstrumentsOptions } from './../commonTypes'\n\nimport { PublishInstruments } from './publishInstruments'\nexport enum ePublishState {\n init,\n started,\n stopping\n}\n/**\n * This class managers the creation of instruments and the publication of instrumentation telemetry to the instrument manager service.\n */\nexport class PublishInstrumentController extends STSOptionsBase implements IPublishInstrumentController {\n #instruments: Record<string, InstrumentBase> = { };\n #publisher: PublishInstruments | null = null;\n\n constructor(options: IPublishInstrumentControllerOptions) {\n super(options);\n this.SetupInstrumentation();\n\n const publishInstrumentsOptions: IPublishInstrumentsOptions = {\n logger: options.logger,\n processContext: { ...options.processContext },\n publishInterval: options.publishInterval,\n publishPostFailInterval: options.publishPostFailInterval,\n publishInstrumentController: this,\n publishTransportBaseOptions: { ...options.publishTransportBaseOptions }\n }\n this.#publisher = new PublishInstruments(publishInstrumentsOptions);\n\n if (this.options.autoStart === true) {\n this.StartPublish();\n }\n }\n\n override get options(): IPublishInstrumentControllerOptions {\n return super.options as IPublishInstrumentControllerOptions;\n }\n\n async StartPublish(): Promise<boolean> {\n return (this.#publisher as PublishInstruments).StartPublish();\n }\n\n async EndPublish(): Promise<boolean> {\n return (this.#publisher as PublishInstruments).EndPublish();\n }\n\n async Publish(): Promise<boolean> {\n return (this.#publisher as PublishInstruments).Publish();\n }\n\n LogEx = (message: string) => {\n this.UpdateInstrument(Gauge.LOGGER, {\n LogMessage: message\n } as InstrumentLogTelemetry);\n }\n\n #GetInstrument(instrumentName: Gauge): InstrumentBase {\n // get the gauge from the internal gauge map - created using the factory function\n return this.#instruments[instrumentName];\n }\n\n #ProcessTelemetryCommand(instrumentName: Gauge, telemetry: InstrumentBaseTelemetry): void {\n const instrument: InstrumentBase = this.#GetInstrument(instrumentName);\n if (instrument) {\n instrument.ProcessTelemetry(telemetry);\n }\n }\n\n // Instrument factory\n #CreateInstrument(instrumentType: GaugeTypes, options: InstrumentBaseOptions): InstrumentBase {\n let instrument: InstrumentBase;\n\n switch (instrumentType) {\n case GaugeTypes.INSTRUMENT_GAUGE :\n instrument = new InstrumentGauge(options);\n break;\n case GaugeTypes.INSTRUMENT_HISTOGRAM :\n instrument = new InstrumentHistogram(options);\n break;\n case GaugeTypes.INSTRUMENT_LOG :\n instrument = new InstrumentLog(options);\n break;\n case GaugeTypes.INSTRUMENT_OBJECT :\n instrument = new InstrumentObject(options);\n break;\n case GaugeTypes.INSTRUMENT_TIMER :\n instrument = new InstrumentTimerGauge(options);\n break;\n case GaugeTypes.INSTRUMENT_VELOCITY :\n instrument = new InstrumentVelocity(options);\n break;\n default :\n throw new Error(`Gauge type: [${instrumentType} not known.]`);\n }\n return instrument;\n }\n\n #CreateInstruments(payload: InstrumentDefinitions): void {\n payload.forEach((instrumentDefinition: InstrumentDefinition) => {\n const g: Gauge = instrumentDefinition[0];\n const gt: GaugeTypes = instrumentDefinition[1];\n const instrumentBaseOptions: InstrumentBaseOptions | undefined = instrumentDefinition[2];\n const instrument: InstrumentBase = this.#CreateInstrument(gt, instrumentBaseOptions as InstrumentBaseOptions);\n // Add to instrument map\n this.#instruments[g] = instrument;\n })\n }\n\n GetPayloadData(): IInstrumentPayload {\n const context = this.options.processContext;\n const instruments = this.#instruments;\n const payloadInstruments: Record<string, InstrumentBase> = { };\n for (const [key, value] of Object.entries(instruments)) {\n if (value instanceof InstrumentLog) {\n payloadInstruments[key] = { ...value.WithUseLatestMessages(true) } as InstrumentLog;\n } else {\n payloadInstruments[key] = { ...value } as InstrumentBase;\n }\n }\n\n return {\n context,\n instruments: payloadInstruments\n } as IInstrumentPayload;\n }\n\n SetupInstrumentation() {\n if (!this.options.instrumentDefinitions) {\n this.options.logger.debug(chalk.yellow(`SetupInstrumentation:${this.options.processContext.nid}: No instrument(s) defined within supplied options.`));\n return;\n }\n if (!this.options.processContext) {\n this.options.logger.debug(chalk.yellow(`SetupInstrumentation: No context defined within supplied options.`));\n return;\n }\n this.#CreateInstruments(this.options.instrumentDefinitions);\n }\n\n /**\n * Check if an instrument exists within the managed instrument collection\n * @param instrumentName \n * @returns \n */\n InstrumentExists(instrumentName: Gauge): boolean {\n if (this.#instruments[instrumentName]) {\n return true;\n }\n return false;\n }\n\n /**\n * Update instrument telemetry.\n * @param instrumentName \n * @param telemetry \n */\n UpdateInstrument(instrumentName: Gauge, telemetry: InstrumentBaseTelemetry): void {\n if (this.#instruments[instrumentName]) {\n this.#ProcessTelemetryCommand(instrumentName, telemetry);\n } else {\n // Error state\n this.options.logger.debug(chalk.red(`UpdateInstrument:${this.options.processContext.nid}: Attempted to UpdateInstrument before initialised.`));\n }\n }\n\n /**\n\t * Add additional instrument publishers. Usually invoked when adding workers to the app and/or async runners within a worker.\n\t * @param processContext \n\t * @returns Returns the newly created PublishInstrumentController\n\t */\n AddPublishInstrumentController(processContext: IContextBase): PublishInstrumentController {\n const options: IPublishInstrumentControllerOptions = { ...this.options };\n options.processContext = processContext;\n return new PublishInstrumentController(options);\n }\n}\n","// Individual STS plugin keys for provide/inject logic\nexport const STSInstrumentControllerPluginKey = Symbol('instrumentController')\n","import chalk from 'chalk';\n\nimport { inject } from 'vue'\n\nimport { PublishInstrumentController } from './publishInstrumentController'\nimport { IPublishInstrumentControllerOptions } from './../commonTypes'\n\nimport { STSInstrumentControllerPluginKey } from './stsPluginKeys';\n\nexport const GetSTSInstrumentControllerPluginKey = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKey = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\n// Create our use composable. This pattern is also used by vue router library with the useRoute and useRouter composables.\n// https://skirtles-code.github.io/vue-examples/patterns/global-properties.html#application-level-provide-inject\nexport const useSTSInstrumentControllerPlugin = (): PublishInstrumentController => inject(STSInstrumentControllerPluginKey) as PublishInstrumentController\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const GetSTSInstrumentController = (app: any): PublishInstrumentController => {\n return app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n}\n\nexport const STSInstrumentControllerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any \n install: (app: any, options: IPublishInstrumentControllerOptions) => {\n options.logger.debug(chalk.yellow(`STSInstrumentControllerPlugin:install:Start`));\n const aic = new PublishInstrumentController(options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: [app.config.globalProperties.$sts] does not exist.`));\n app.config.globalProperties.$sts = { };\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: created empty [app.config.globalProperties.$sts].`));\n } else {\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: [app.config.globalProperties.$sts] already exists.`));\n }\n app.config.globalProperties.$sts.aic = aic; //@@ for legacy implementation in oauthplugin - remove once PublishInstrumentControllerOptions is a seperate plugin\n app.config.globalProperties.$sts[STSInstrumentControllerPluginKey] = aic;\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: AgentInstrumentController installed into [app.config.globalProperties.$sts] using: [${String(STSInstrumentControllerPluginKey)}].`));\n\n // Assign App level provide for this STS plugin using symbol keys\n // https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\n app.provide(STSInstrumentControllerPluginKey, aic);\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: AgentInstrumentController installed into 'provide' using: [${String(STSInstrumentControllerPluginKey)}].`));\n\n options.logger.debug(chalk.green(`STSInstrumentControllerPlugin:install:End`));\n }\n}\n","import { Gauge, GaugeTypes, InstrumentBaseOptions, InstrumentGaugeOptions,\n InstrumentObjectOptions, InstrumentLogOptions\n} from '@nsshunt/stsobservability'\n\nimport { IContextBase, InstrumentDefinitions } from './commonTypes'\n\nimport { SubscriptionTopic } from './commonTypes'\n\nexport type IInstrumentHashMap = Record<string, string>;\n\nexport interface IHistoField {\n label: string\n bucketLimit: number\n}\n\nexport enum influxDBDataType {\n intField = 'intField',\n floatField = 'floatField',\n stringField = 'stringField'\n}\n\nexport interface IFieldRecord {\n fieldName: string\n gauge: Gauge\n instrumentProperty: string\n dataType: string\n influxdbDataType: influxDBDataType\n timeSeriesIndex?: boolean\n quantile?: boolean // Does this field require a quantile ?\n histo?: IHistoField[],\n histoGauge?: Gauge,\n gaugeType: GaugeTypes,\n instrumentOptions?: InstrumentBaseOptions\n}\n\n//@@ current not used - delete if required ...\nexport interface IRedisQueryFilters {\n level1ContextField: string\n level2ContextField: string\n level3ContextField: string\n}\n\nexport interface IRedisIndexPrefixDefinitions {\n timeSeriesIndex: string\n timeSeriesPrefix: string\n instantIndex: string\n instantPrefix: string\n}\n\nexport interface IsubscriptionTopic {\n subscriptionTopic: SubscriptionTopic\n route: string,\n}\n\nexport interface IServiceDefinition {\n influxDBContextTags: string[],\n redisIndexPrefixDefinitions: IRedisIndexPrefixDefinitions\n fieldList: IFieldRecord[] // Specific additional fields (beyond the core fields) that this service supports\n GetPathFromContext: (context: IContextBase) => string\n redisQueryFilters: IRedisQueryFilters\n subscriptionTopics: IsubscriptionTopic[]\n}\n\nexport interface IGlobalServiceDefinitions {\n coreFieldList: IFieldRecord[] // Set of instruments that are used by all service types\n logFieldList: IFieldRecord[] // Set of log instruments that are used by all service types\n services: Record<string, IServiceDefinition>;\n}\n\nconst instrumentationObservationInterval = 1000;\nconst instrumentationTimeWindow = 600;\nconst consoleLogging = false;\nconst instrumentLogging = true;\n\nexport const globalServiceDefinitions: IGlobalServiceDefinitions = {\n coreFieldList: [\n { fieldName: 'requestCount', gauge: Gauge.REQUEST_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'errorCount', gauge: Gauge.ERROR_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'retryCount', gauge: Gauge.RETRY_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'authenticationCount', gauge: Gauge.AUTHENTICATION_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'authenticationErrorCount', gauge: Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'authenticationRetryCount', gauge: Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'velocity', gauge: Gauge.VELOCITY_GAUGE, instrumentProperty: 'va', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_VELOCITY },\n { fieldName: 'activeRequestCount', gauge: Gauge.ACTIVE_REQUEST_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.intField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions\n },\n { fieldName: 'coreCount', gauge: Gauge.CORE_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'rx', gauge: Gauge.NETWORK_RX_GAUGE, instrumentProperty: 'va', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_VELOCITY },\n { fieldName: 'tx', gauge: Gauge.NETWORK_TX_GAUGE, instrumentProperty: 'va', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_VELOCITY },\n { fieldName: 'timer', gauge: Gauge.TIMER_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_TIMER },\n { fieldName: 'duration', gauge: Gauge.DURATION_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions,\n histo: [\n { label: 'B10', bucketLimit: 10 },\n { label: 'B20', bucketLimit: 20 },\n { label: 'B50', bucketLimit: 50 },\n { label: 'B100', bucketLimit: 100 },\n { label: 'B1000', bucketLimit: 1000 },\n { label: 'B50000', bucketLimit: 50000 },\n { label: 'BInfinity', bucketLimit: -1 }\n ],\n histoGauge: Gauge.DURATION_HISTOGRAM_GAUGE\n },\n { fieldName: 'latency', gauge: Gauge.LATENCY_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions,\n histo: [\n { label: 'B10', bucketLimit: 10 },\n { label: 'B20', bucketLimit: 20 },\n { label: 'B50', bucketLimit: 50 },\n { label: 'B100', bucketLimit: 100 },\n { label: 'B1000', bucketLimit: 1000 },\n { label: 'B50000', bucketLimit: 50000 },\n { label: 'BInfinity', bucketLimit: -1 }\n ],\n histoGauge: Gauge.LATENCY_HISTOGRAM_GAUGE\n }\n ],\n logFieldList: [\n { fieldName: 'log', gauge: Gauge.LOGGER, instrumentProperty: 'val', dataType: 'string', timeSeriesIndex: false, quantile: false, influxdbDataType: influxDBDataType.stringField,\n gaugeType: GaugeTypes.INSTRUMENT_LOG,\n instrumentOptions: {\n consoleLogging: consoleLogging, \n instrumentLogging: instrumentLogging \n } as InstrumentLogOptions\n }\n ],\n services: {\n ['service']: {\n influxDBContextTags: [\n 'serviceId',\n 'serviceName',\n 'serviceVersion',\n 'serviceInstanceId',\n 'serviceInstanceProcessId',\n 'hostName',\n 'pid',\n 'ppid'\n ],\n redisIndexPrefixDefinitions: {\n timeSeriesIndex: 'idx:serviceIndexTimeSeries',\n timeSeriesPrefix: '/serviceTimeSeries:',\n instantIndex: 'idx:serviceIndexInstant',\n instantPrefix: '/serviceInstant:'\n },\n fieldList: [\n { fieldName: 'cpu', gauge: Gauge.CPU_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE, \n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions\n },\n { fieldName: 'connectionCount', gauge: Gauge.CONNECTION_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.intField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions,\n },\n { fieldName: 'connectionPoolCount', gauge: Gauge.CONNECTION_POOL_TOTAL_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionIdleCount', gauge: Gauge.CONNECTION_POOL_IDLE_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionWaitingCount', gauge: Gauge.CONNECTION_POOL_WAITING_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'systemcpu', gauge: Gauge.CPU_SYSTEM_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'memory', gauge: Gauge.OBJECT_GAUGE, instrumentProperty: 'val', dataType: 'JSON', influxdbDataType: influxDBDataType.stringField, \n gaugeType: GaugeTypes.INSTRUMENT_OBJECT,\n instrumentOptions: {\n label: 'InstrumentObjectMaster'\n } as InstrumentObjectOptions\n }\n ],\n GetPathFromContext(context: IContextBase): string {\n //const { serviceId, serviceInstanceId, hostName, serviceInstanceProcessId, \n //pid, ppid, serviceName, serviceVersion } = instrumentPayload.context;\n const { serviceId, serviceInstanceId, serviceInstanceProcessId } = context;\n return `/${serviceId}/${serviceInstanceId}/${serviceInstanceProcessId}`; //@@ these should line up with the query filer names\n },\n redisQueryFilters: {\n level1ContextField: 'serviceType',\n level2ContextField: 'appid',\n level3ContextField: 'appinstanceid'\n },\n subscriptionTopics: [\n {\n subscriptionTopic: SubscriptionTopic.AllServicesCombined,\n route: '/metrics'\n },\n {\n subscriptionTopic: SubscriptionTopic.Services,\n route: '/metrics/services'\n },\n {\n subscriptionTopic: SubscriptionTopic.ServiceInstances,\n route: '/metrics/services/:key'\n },\n {\n subscriptionTopic: SubscriptionTopic.ServiceInstance,\n route: '/metrics/services/:key/:subkey'\n }\n ]\n },\n ['agent']: {\n influxDBContextTags: [\n 'id',\n 'hostName',\n 'agentName',\n 'threadId',\n 'asyncRunnerId'\n ],\n redisIndexPrefixDefinitions: {\n timeSeriesIndex: 'idx:agentIndexTimeSeries',\n timeSeriesPrefix: '/agentTimeSeries:',\n instantIndex: 'idx:agentIndexInstant',\n instantPrefix: '/agentInstant:'\n },\n fieldList: [\n { fieldName: 'childCount', gauge: Gauge.CHILD_COUNT, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE }\n ],\n //@@ need type declare in appframework ?? agent does not use appframework ... perhaps stspublisher\n GetPathFromContext(context: IContextBase): string {\n //const { nid, id, hostName, agentName, threadId, asyncRunnerId } = context;\n const { agentName, threadId, asyncRunnerId } = context;\n return `/${agentName}/${threadId}/${asyncRunnerId}`; //@@ these should line up with the query filer names\n },\n redisQueryFilters: {\n level1ContextField: 'serviceType',\n level2ContextField: 'appid', //@@ this should be named something else\n level3ContextField: 'appinstanceid' //@@ this should be named something else\n },\n subscriptionTopics: [\n {\n subscriptionTopic: SubscriptionTopic.AllAgentsCombined,\n route: '/metrics'\n },\n {\n subscriptionTopic: SubscriptionTopic.Agents,\n route: '/metrics/agents'\n },\n {\n subscriptionTopic: SubscriptionTopic.AgentWorkers,\n route: '/metrics/agents/:key'\n },\n {\n subscriptionTopic: SubscriptionTopic.AgentWorker,\n route: '/metrics/agents/:key/:subkey'\n }\n ]\n },\n ['lambda']: {\n influxDBContextTags: [\n 'technology',\n 'subTechnology',\n 'lambdaFunctionName',\n 'lambdaInstance',\n 'hostName',\n 'processId',\n 'parentProcessId',\n 'useCase',\n 'pattern'\n ],\n redisIndexPrefixDefinitions: {\n timeSeriesIndex: 'idx:lambdaIndexTimeSeries',\n timeSeriesPrefix: '/lambdaTimeSeries:',\n instantIndex: 'idx:lambdaIndexInstant',\n instantPrefix: '/lambdaInstant:'\n },\n fieldList: [\n { fieldName: 'cpu', gauge: Gauge.CPU_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionCount', gauge: Gauge.CONNECTION_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionPoolCount', gauge: Gauge.CONNECTION_POOL_TOTAL_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionIdleCount', gauge: Gauge.CONNECTION_POOL_IDLE_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionWaitingCount', gauge: Gauge.CONNECTION_POOL_WAITING_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'systemcpu', gauge: Gauge.CPU_SYSTEM_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'memory', gauge: Gauge.OBJECT_GAUGE, instrumentProperty: 'val', dataType: 'JSON', influxdbDataType: influxDBDataType.stringField, gaugeType: GaugeTypes.INSTRUMENT_OBJECT }\n ],\n //@@ need type declare in appframework\n GetPathFromContext(context: IContextBase): string {\n //const { serviceId, serviceInstanceId, hostName, serviceInstanceProcessId, \n //pid, ppid, serviceName, serviceVersion } = instrumentPayload.context;\n const { technology, subTechnology, lambdaInstance } = context;\n return `/${technology}/${subTechnology}/${lambdaInstance}`;\n },\n redisQueryFilters: {\n level1ContextField: 'serviceType',\n level2ContextField: 'technology',\n level3ContextField: 'subTechnology'\n },\n subscriptionTopics: [\n {\n subscriptionTopic: SubscriptionTopic.AllLambdasCombined, // uicontrollerlanding\n route: '/metrics'\n },\n {\n subscriptionTopic: SubscriptionTopic.LambdaTechnologies, // uicontrollerlambda\n route: '/metrics/lambdas'\n },\n {\n subscriptionTopic: SubscriptionTopic.LambdaSubTechnologies, // uicontrollerlambdasubtechnologies\n route: '/metrics/lambdas/:key'\n },\n {\n subscriptionTopic: SubscriptionTopic.LambdaSubTechnologiesInstance, // uicontrollerlambdasubtechnologiesinstance\n route: '/metrics/lambdas/:key/:subkey'\n }\n ]\n }\n }\n}\n\nexport const GetInstruments = (service: string): InstrumentDefinitions => {\n const fieldList = [\n ...globalServiceDefinitions.coreFieldList,\n ...globalServiceDefinitions.logFieldList,\n ...globalServiceDefinitions.services[service].fieldList\n ]\n const retVal: InstrumentDefinitions = [ ];\n fieldList.forEach(v => {\n if (v.instrumentOptions) {\n retVal.push([v.gauge, v.gaugeType, v.instrumentOptions]);\n } else {\n retVal.push([v.gauge, v.gaugeType]);\n }\n if (v.histo) {\n retVal.push([v.histoGauge as Gauge, GaugeTypes.INSTRUMENT_HISTOGRAM]);\n }\n });\n return retVal;\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { HistogramDataElement, QuantileDataElement, Gauge, GaugeTypes } from '@nsshunt/stsobservability'\nimport { quantile, histo, IServiceInstanceTelemetry, IAgentInstanceTelemetry, ILambdaInstanceTelemetry } from './../commonTypes'\nimport { globalServiceDefinitions } from './../globalServiceDefinitions'\n\n//import _cloneDeep from 'lodash.clonedeep'\nimport { ISTSLogger, JSONObject } from '@nsshunt/stsutils'\n\nexport interface IModelNode {\n val: number\n vf: string\n value: string\n}\n\nexport interface IModelNodeRawStringArray {\n val: string[]\n}\n\nexport interface IModelNodeJSONFromObject {\n val: any\n}\n\nexport interface IModelNodeQuantile {\n val: number\n vf: string\n value: string\n percentile: QuantileDataElement[]\n percentileFormatted: string\n}\n\nexport interface IModelNodeHist {\n hist: HistogramDataElement[]\n}\n\nexport interface IModelNodes {\n id: string\n instruments: Record<string, IModelNode | IModelNodeRawStringArray | IModelNodeJSONFromObject | IModelNodeQuantile | IModelNodeHist>\n canNavigate?: boolean\n options?: JSONObject\n}\n\nexport class ObservabilityModelUtils {\n static GetModelNode(data: number): IModelNode {\n const fixedSize = 2;\n const padLength = 9;\n try {\n return {\n val: data,\n vf: parseFloat(data.toString()).toFixed(fixedSize).padStart(padLength, ' '),\n value: parseFloat(data.toString()).toFixed(fixedSize)\n }\n } catch (error) {\n return {\n val: 0,\n vf: \"\",\n value: \"\"\n }\n }\n }\n\n static GetModelNodeRawStringArray(data: string[]): IModelNodeRawStringArray {\n try {\n return {\n val: data\n }\n } catch (error) {\n return {\n val: []\n }\n }\n }\n\n static GetModelNodeObject(data: any): IModelNodeJSONFromObject {\n try {\n return {\n val: JSON.parse(data)\n }\n } catch (error) {\n return {\n val: null\n }\n }\n }\n\n static GetModelNodeWithQuantile(data: number, quantileData: quantile): IModelNodeQuantile {\n let quantile: string = '';\n const quantileDataElementArray: QuantileDataElement[] = [ ];\n for (const [key, val] of Object.entries(quantileData)) {\n quantile += parseFloat((val as number).toFixed(2)).toString().padStart(8, ' ');\n quantileDataElementArray.push([\n key,\n val\n ])\n }\n\n const fixedSize = 2;\n const padLength = 9;\n try {\n return {\n val: data,\n vf: parseFloat(data.toString()).toFixed(fixedSize).padStart(padLength, ' '),\n value: parseFloat(data.toString()).toFixed(fixedSize),\n percentile: quantileDataElementArray,\n percentileFormatted: quantile\n }\n } catch (error) {\n return {\n val: 0,\n vf: '',\n value: '',\n percentile: [],\n percentileFormatted: ''\n }\n }\n }\n\n static GetModelNodeHistFromInfluxData(data: histo): IModelNodeHist {\n try {\n const histVal: HistogramDataElement[] = [ ];\n if (data) {\n for (const [key, val] of Object.entries(data)) {\n const dataElement: HistogramDataElement = [\n val as number,\n key,\n parseInt(key)\n ]\n histVal.push(dataElement)\n }\n }\n try {\n return {\n hist: histVal,\n }\n } catch (error) {\n return {\n hist: []\n }\n }\n } catch (error) {\n //console.log(chalk.red(`GetModelNodeHistFromInfluxData: Error [${error}]`));\n return {\n hist: []\n }\n }\n }\n\n static ParseModelNode = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNode((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNode(): Field not present: [${fieldName}], default to [0]`)\n model.instruments[gaugeName] = this.GetModelNode(0);\n }\n }\n\n static ParseModelNodeWithQuantile = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string, quantileFieldName: string) => {\n if (fieldName in data && quantileFieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile((data as any)[fieldName], (data as any)[quantileFieldName]);\n } else if (fieldName in data) {\n const dataVal = (data as any)[fieldName];\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeWithQuantile(): QuantileFieldName not present: [${quantileFieldName}], default to [${dataVal},{}]`)\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile(dataVal, {});\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeWithQuantile(): Field not present: [${fieldName}], QuantileFieldName not present: [${quantileFieldName}], default to [0,{}]`)\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile(0, {});\n }\n }\n\n static ParseModelNodeHisto = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeHistFromInfluxData((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeHisto(): Field not present: [${fieldName}], default to [{}]`)\n model.instruments[gaugeName] = this.GetModelNodeHistFromInfluxData({});\n }\n }\n\n static ParseModelNodeObject = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeObject((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeObject(): Field not present: [${fieldName}], default to [{}]`)\n model.instruments[gaugeName] = this.GetModelNodeObject({});\n }\n }\n\n static GetModelData(serviceType: string, model: IModelNodes, data: IServiceInstanceTelemetry | ILambdaInstanceTelemetry | IAgentInstanceTelemetry, parseLog: string[]) {\n const fieldList = [\n ...globalServiceDefinitions.coreFieldList,\n ...globalServiceDefinitions.services[serviceType].fieldList\n ]\n fieldList.forEach(field => {\n if (field.quantile) {\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, field.gauge, field.fieldName, `${field.fieldName}_quantile`);\n } else if (field.gaugeType.localeCompare(GaugeTypes.INSTRUMENT_OBJECT) === 0) {\n ObservabilityModelUtils.ParseModelNodeObject(model, data, parseLog, field.gauge, field.fieldName);\n } else {\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, field.gauge, field.fieldName);\n }\n\n if (field.histo) {\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, field.histoGauge as Gauge, `${field.fieldName}_histo`);\n }\n });\n }\n\n static GetModelForService(id: string, data: IServiceInstanceTelemetry, logger: ISTSLogger): IModelNodes | null {\n try {\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n this.GetModelData('service', model, data, parseLog);\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n return model;\n } catch (error) {\n return null;\n }\n }\n\n static GetModelForLambda(id: string, data: ILambdaInstanceTelemetry, logger: ISTSLogger): IModelNodes | null {\n try {\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n this.GetModelData('lambda', model, data, parseLog);\n\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n\n static GetModelForAgent(id: string, data: IAgentInstanceTelemetry, logger: ISTSLogger): IModelNodes | null {\n try {\n if (Object.keys(data).length === 0) {\n return null;\n }\n\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n this.GetModelData('agent', model, data, parseLog);\n\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport chalk from 'chalk';\n\nimport { JSONObject } from '@nsshunt/stsutils'\nimport { ISubscriptionPayload, IServiceInstanceTelemetry, \n IAgentInstanceTelemetry, SubscriptionTopic, IServiceInstances, IServiceInstancesThreads, \n IServices, IAgentWorkers, IAgentWorkerRunners, IAgents,\n ILambdaInstanceTelemetry, ILambdaTechnologies, ILambdaSubTechnologies,ILambdaSubTechnologiesInstance } from './../commonTypes'\n\nimport { ObservabilityModelUtils, IModelNodes, IModelNode } from './observabilitymodelutils'\n\nimport { Gauge } from '@nsshunt/stsobservability'\n\nimport { ISTSLogger } from '@nsshunt/stsutils'\n\nexport interface IObservabilitySubscriptionManager {\n logger: ISTSLogger\n maxLogLength: number\n}\n\nexport enum runStates {\n idle = \"idle\",\n started = \"started\",\n stopped = \"stopped\"\n}\n\nexport class ObservabilityPayloadTransformer {\n #serviceModel: Record<string, IModelNodes | null> = { };\n #agentModel: Record<string, IModelNodes | null> = { };\n #lambdaModel: Record<string, IModelNodes | null> = { };\n #options: IObservabilitySubscriptionManager\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n constructor(options: IObservabilitySubscriptionManager) {\n this.#options = options;\n }\n\n get serviceModel(): JSONObject {\n return this.#serviceModel;\n }\n\n get agentModel(): JSONObject {\n return this.#agentModel;\n }\n\n get lambdaModel(): JSONObject {\n return this.#lambdaModel;\n }\n\n TransformSubscriptionPayloadCallback(subscriptionPayload: ISubscriptionPayload): void {\n switch (subscriptionPayload.subscriptionKey.topic) {\n // Services -----------------------------------------------------------------------------\n case SubscriptionTopic.AllServicesCombined : // /\n this.CreateModelAllServicesCombined(subscriptionPayload);\n break;\n case SubscriptionTopic.Services : // /serviceId\n this.CreateModelServices(subscriptionPayload);\n break;\n case SubscriptionTopic.ServiceInstances : // /serviceId/serviceInstanceId\n this.CreateModelServiceInstances(subscriptionPayload);\n break;\n case SubscriptionTopic.ServiceInstance : // /serviceId/serviceInstanceId/serviceInstanceProcessId\n this.CreateModelServiceInstance(subscriptionPayload);\n break;\n\n // Lambda -----------------------------------------------------------------------------\n case SubscriptionTopic.AllLambdasCombined : // /\n this.CreateModelAllLambdasCombined(subscriptionPayload);\n break;\n case SubscriptionTopic.LambdaTechnologies : // /technology\n this.CreateModelLambdaTechnologies(subscriptionPayload);\n break;\n case SubscriptionTopic.LambdaSubTechnologies : // /technology/subTechnology\n this.CreateModelLambdaSubTechnologies(subscriptionPayload);\n break;\n case SubscriptionTopic.LambdaSubTechnologiesInstance : // /technology/subTechnology/subTechnologyInstance\n this.CreateModelLambdaSubTechnologiesInstance(subscriptionPayload);\n break;\n\n // Agents -----------------------------------------------------------------------------\n case SubscriptionTopic.AllAgentsCombined : // /\n this.CreateModelAllAgentsCombined(subscriptionPayload);\n break;\n case SubscriptionTopic.Agents : // /agentId\n this.CreateModelAgents(subscriptionPayload);\n break;\n case SubscriptionTopic.AgentWorkers :// /agentId/agentWorkerId\n this.CreateModelAgentWorkers(subscriptionPayload);\n break;\n case SubscriptionTopic.AgentWorker :// /agentId/agentWorkerId/asyncRunnerId\n this.CreateModelAgentWorker(subscriptionPayload);\n break;\n }\n }\n\n // --- [ Services ] ------------------------------------------------------------------------------------------------------------------------------------------------\n\n // /\n CreateModelAllServicesCombined(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined.toString()) === 0) {\n this.#serviceModel['STS-Service'] = ObservabilityModelUtils.GetModelForService('STS-Service', subscriptionPayload.data as IServiceInstanceTelemetry, this.#options.logger);\n if (this.#serviceModel['STS-Service'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllServicesCombined():Error: GetModelForService() returned null`));\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /serviceId\n CreateModelServices(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, serviceTelemetry] of Object.entries(subscriptionPayload.data as IServices)) {\n this.#serviceModel[serviceId] = ObservabilityModelUtils.GetModelForService(serviceId, serviceTelemetry, this.#options.logger);\n if (this.#serviceModel[serviceId] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelServices():Error: GetModelForService() returned null`));\n }\n }\n } catch (error) {\n return\n }\n }\n \n // /serviceId/serviceInstanceId\n CreateModelServiceInstances(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, service] of Object.entries(subscriptionPayload.data as IServiceInstances)) {\n for (const [serviceInstanceId, serviceInstanceTelemetry] of Object.entries(service)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (serviceInstanceTelemetry.cpu && serviceInstanceTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#serviceModel[serviceInstanceId] = ObservabilityModelUtils.GetModelForService(serviceInstanceId, serviceInstanceTelemetry, this.#options.logger);\n if (this.#serviceModel[serviceInstanceId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#serviceModel[serviceInstanceId] as IModelNodes).options = { serviceId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelServiceInstances():Error: GetModelForService() returned null`));\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // serviceId/serviceInstanceId/serviceInstanceProcessId\n CreateModelServiceInstance(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, service] of Object.entries(subscriptionPayload.data as IServiceInstancesThreads)) {\n for (const [serviceInstanceId, serviceInstance] of Object.entries(service)) {\n for (const [serviceInstanceProcessId, serviceInstanceProcessTelemetry] of Object.entries(serviceInstance)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (serviceInstanceProcessTelemetry.cpu && serviceInstanceProcessTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#serviceModel[serviceInstanceProcessId] = ObservabilityModelUtils.GetModelForService(serviceInstanceProcessId, serviceInstanceProcessTelemetry, this.#options.logger);\n if (this.#serviceModel[serviceInstanceProcessId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#serviceModel[serviceInstanceProcessId] as IModelNodes).options = { serviceId, serviceInstanceId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelServiceInstance():Error: GetModelForService() returned null`));\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // --- [ Agents ] ------------------------------------------------------------------------------------------------------------------------------------------------\n \n // /\n CreateModelAllAgentsCombined(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined.toString()) === 0) {\n if (Object.keys(subscriptionPayload.data as IAgentInstanceTelemetry).length !== 0) {\n this.#agentModel['STS-Agent'] = ObservabilityModelUtils.GetModelForAgent('STS-Agent', subscriptionPayload.data as IAgentInstanceTelemetry, this.#options.logger);\n if (this.#agentModel['STS-Agent'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllAgentsCombined():Error: GetModelForAgent() returned null`));\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /agentId\n CreateModelAgents(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentInstanceTelemetry] of Object.entries(subscriptionPayload.data as IAgents)) {\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n this.#agentModel[agentId] = ObservabilityModelUtils.GetModelForAgent(agentId, agentInstanceTelemetry, this.#options.logger);\n if (this.#agentModel[agentId] !== null) {\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgents():Error: GetModelForAgent() returned null`));\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgent:CreateModel(): Error: [${error}]`));\n }\n }\n\n // /agentId/agentWorkerId\n CreateModelAgentWorkers(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentWorker] of Object.entries(subscriptionPayload.data as IAgentWorkers)) {\n for (const [agentWorkerId, agentInstanceTelemetry] of Object.entries(agentWorker)) {\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n //const threadKey = `${agentName}_${threadId}`;\n const threadKey = `${agentWorkerId}`;\n this.#agentModel[threadKey] = ObservabilityModelUtils.GetModelForAgent(threadKey, agentInstanceTelemetry, this.#options.logger);\n if (this.#agentModel[threadKey] !== null) {\n const coreCount = (((this.#agentModel[threadKey] as IModelNodes).instruments[Gauge.CORE_COUNT_GAUGE]) as IModelNode).val;\n (this.#agentModel[threadKey] as IModelNodes).canNavigate = coreCount > 0;\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#agentModel[threadKey] as IModelNodes).options = { agentId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgentWorkers():Error: GetModelForAgent() returned null`));\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgentThreads:CreateModel(): Error: [${error}]`));\n }\n }\n\n // /agentId/agentWorkerId/asyncRunnerId\n CreateModelAgentWorker(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentWorker] of Object.entries(subscriptionPayload.data as IAgentWorkerRunners)) {\n for (const [agentWorkerId, asyncRunnerData] of Object.entries(agentWorker)) {\n for (const [asyncRunnerId, agentInstanceTelemetry] of Object.entries(asyncRunnerData)) {\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n this.#agentModel[asyncRunnerId] = ObservabilityModelUtils.GetModelForAgent(asyncRunnerId, agentInstanceTelemetry, this.#options.logger);\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgentThread:CreateModel(): Error: [${error}]`));\n }\n }\n // --- [ Lambdas ] ------------------------------------------------------------------------------------------------------------------------------------------------\n\n // /\n CreateModelAllLambdasCombined(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllLambdasCombined.toString()) === 0) {\n this.#lambdaModel['STS-Lambda'] = ObservabilityModelUtils.GetModelForLambda('STS-Lambda', subscriptionPayload.data as ILambdaInstanceTelemetry, this.#options.logger);\n if (this.#lambdaModel['STS-Lambda'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllLambdasCombined():Error: GetModelForLambda() returned null`));\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /technologyId\n CreateModelLambdaTechnologies(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaTechnologies)) {\n this.#lambdaModel[technologyId] = ObservabilityModelUtils.GetModelForLambda(technologyId, technologyTelemetry, this.#options.logger);\n if (this.#lambdaModel[technologyId] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaTechnologies():Error: GetModelForLambda() returned null`));\n }\n }\n } catch (error) {\n return\n }\n }\n\n // /technologyId/subTechnologyId\n CreateModelLambdaSubTechnologies(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n //console.log(chalk.red(`CreateModelLambdaSubTechnologies()-zz: [${JSON.stringify(subscriptionPayload.data)}]`));\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaSubTechnologies)) {\n for (const [subTechnologyId, subTechnologyTelemetry] of Object.entries(technologyTelemetry)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (subTechnologyTelemetry.cpu && subTechnologyTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#lambdaModel[subTechnologyId] = ObservabilityModelUtils.GetModelForLambda(subTechnologyId, subTechnologyTelemetry, this.#options.logger);\n if (this.#lambdaModel[subTechnologyId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#lambdaModel[subTechnologyId] as IModelNodes).options = { technologyId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaSubTechnologies():Error: GetModelForLambda() returned null`));\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // /technologyId/subTechnologyId/subTechnologyInstanceId\n CreateModelLambdaSubTechnologiesInstance(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n //console.log(chalk.red(`CreateModelLambdaSubTechnologies()-zz: [${JSON.stringify(subscriptionPayload.data)}]`));\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaSubTechnologiesInstance)) {\n for (const [subTechnologyId, subTechnologyTelemetry] of Object.entries(technologyTelemetry)) {\n for (const [subTechnologyInstanceId, subTechnologyInstanceTelemetry] of Object.entries(subTechnologyTelemetry)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (subTechnologyInstanceTelemetry.cpu && subTechnologyInstanceTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#lambdaModel[subTechnologyInstanceId] = ObservabilityModelUtils.GetModelForLambda(subTechnologyInstanceId, subTechnologyInstanceTelemetry, this.#options.logger);\n if (this.#lambdaModel[subTechnologyInstanceId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#lambdaModel[subTechnologyInstanceId] as IModelNodes).options = { technologyId, subTechnologyId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaSubTechnologiesInstance():Error: GetModelForLambda() returned null`));\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { ISubscription, ISubscriptions, ISubscriptionPayload, SubscriptionTopic, IObservabilitySocketIOSubscriberOptions } from './../commonTypes'\n\nimport chalk from 'chalk';\n\nimport axios from 'axios';\n\n//import isNode from 'detect-node'\n//import { AgentManager, STSAxiosConfig } from '@nsshunt/stsutils';\n\nimport { STSAxiosConfig } from '@nsshunt/stsutils';\n\ndeclare interface ISocketSubscribeKeepAlive {\n id: string\n timeout?: number\n}\n\nexport class RESTClientSubscriber {\n #socketSubscribeKeepAlive: Record<string, ISocketSubscribeKeepAlive> = { };\n #options: IObservabilitySocketIOSubscriberOptions\n // This is required becuase each call to .bind create a new replica bound function - so we need the same instance for on/off event bindings.\n KeepAliveAckBoundFunction: any;\n #currentSubscriptions: ISubscriptions = [ ];\n\n constructor(options: IObservabilitySocketIOSubscriberOptions) {\n this.#options = options;\n }\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n async Subscribe(subscriptions: ISubscriptions): Promise<void> {\n subscriptions.map(async (subId) => {\n // Subscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n try {\n this.#AddKeepAlive(subId);\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subId);\n }\n });\n }\n\n UnSubscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n // Unsubscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n });\n }\n\n UpdateModelCursor = (subscriptions: ISubscriptions): void => {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:UnSubscribe(): UpdateModelCursor()`));\n this.UnSubscribe(this.#currentSubscriptions);\n this.#currentSubscriptions = subscriptions;\n this.Subscribe(this.#currentSubscriptions);\n }\n\n async #InvokeRESTAPI(subscription: ISubscription): Promise<any> {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n // Service subscriptions\n const { subscriptionKey } = subscription;\n let url: string = '';\n switch (subscriptionKey.topic) {\n // Services -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllServicesCombined : // /metrics = getMetrics\n url = `/metrics`;\n break;\n case SubscriptionTopic.Services : // /metrics/:apptype = getApps apptype = services\n url = `/metrics/services`;\n break;\n case SubscriptionTopic.ServiceInstances :\n if (subscriptionKey.key) { // key = service_id /metrics/:apptype/:appid = getApp\n url = `/metrics/services/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Services): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.ServiceInstance :\n url = `/metrics/services/${subscriptionKey.key}`;\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = service instance id /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n url = `/metrics/services/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Services): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n\n // Lambdas -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllLambdasCombined : // /metrics = getMetrics\n url = `/metrics`;\n break;\n case SubscriptionTopic.LambdaTechnologies : // /metrics/:apptype = getApps apptype = services\n url = `/metrics/lambdas`;\n break;\n case SubscriptionTopic.LambdaSubTechnologies :\n if (subscriptionKey.key) { // key = service_id /metrics/:apptype/:appid = getApp\n url = `/metrics/lambdas/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Lambdas): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.LambdaSubTechnologiesInstance :\n url = `/metrics/lambdas/${subscriptionKey.key}`;\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = service instance id /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n url = `/metrics/lambdas/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Lambdas): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n\n // User Agents -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllAgentsCombined : // /metrics = getMetrics (@@ called twice ??)\n url = `/metrics`;\n break;\n case SubscriptionTopic.Agents : // /metrics/:apptype = getApps apptype = agents\n url = `/metrics/agents`;\n break;\n case SubscriptionTopic.AgentWorkers :\n if (subscriptionKey.key) { // key = agent instance id /metrics/:apptype/:appid = getApp\n url = `/metrics/agents/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Agents): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.AgentWorker : // /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = agent instance id, subkey = agent instance worker id\n url = `/metrics/agents/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Agents): key and/or subkey not provided for subscription: [${JSON.stringify(subscriptionKey.topic)}]`);\n }\n }\n if (url.localeCompare('') !== 0) {\n const endPointUrl = `${this.#options.urlBase}${url}`;\n\n let retVal: any;\n\n const start = performance.now();\n try {\n /*\n if (isNode && this.#options.agentManager) {\n retVal = await axios(new STSAxiosConfig(endPointUrl, 'get')\n .withDefaultHeaders()\n .withAgentManager(this.#options.agentManager).config);\n } else {\n retVal = await axios(new STSAxiosConfig(endPointUrl, 'get')\n .withDefaultHeaders().config);\n }\n */\n\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): axios call: endPointUrl: [${endPointUrl}]`));\n retVal = await axios(new STSAxiosConfig(endPointUrl, 'get')\n .withDefaultHeaders().config);\n\n if (retVal) {\n if (retVal.data) {\n //@@ could use silly here\n //@@this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): retVal.data: [${JSON.stringify(retVal.data)}]`));\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): no retVal.data`)); \n }\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): no retVal`));\n }\n\n const end = performance.now();\n const diff = end - start;\n //console.log(`total time: [${diff}]`);\n\n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined) === 0) {\n return retVal.data['services'];\n }\n \n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined) === 0) {\n return retVal.data['agents'];\n }\n\n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllLambdasCombined) === 0) {\n return retVal.data['lambdas'];\n }\n return retVal.data;\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:#InvokeRESTAPI(): subscriptionKey: [${subscription.subscriptionKey.id}], Error: [${error}]`));\n //console.error(chalk.red(`RESTClientSubscriber:#InvokeRESTAPI(): Error: [${error}]`));\n return null;\n }\n } else {\n return null;\n }\n }\n\n #GetData = async (subscription: ISubscription) => {\n try {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#GetData(): subscriptionKey: [${JSON.stringify(subscription.subscriptionKey)}`));\n const retVal = await this.#InvokeRESTAPI(subscription);\n if (retVal) {\n const payload: ISubscriptionPayload = {\n subscriptionKey: subscription.subscriptionKey,\n data: retVal\n };\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#GetData(): data returned: subscriptionKey: [${JSON.stringify(subscription.subscriptionKey)}, retVal: [${JSON.stringify(retVal)}]`));\n subscription.cb(payload);\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#GetData(): No data returned: subscriptionKey: [${JSON.stringify(subscription.subscriptionKey)}`));\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subscription);\n }\n }\n\n #SetupTimeout(socketSubscribeKeepAlive: ISocketSubscribeKeepAlive, subscription: ISubscription, timeout: number): number {\n return setTimeout(async () => {\n try {\n const start = performance.now();\n await this.#GetData(subscription);\n if (socketSubscribeKeepAlive.timeout) {\n const end = performance.now();\n const diff = end - start;\n let timeoutDuration = (this.#options.keepAlive ?? 1000) - diff;\n if (timeoutDuration < 500) {\n timeoutDuration = 500;\n }\n //@@this.#LogDebugMessage(chalk.yellow(`Total duration for subscription: [${diff}], waiting: [${timeoutDuration}]`));\n socketSubscribeKeepAlive.timeout = this.#SetupTimeout(socketSubscribeKeepAlive, subscription, timeoutDuration)\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber: Subscription removed: [${socketSubscribeKeepAlive.id}]. Processing terminate.`));\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subscription);\n }\n }, timeout) as any\n }\n\n\n #AddKeepAlive(subscription: ISubscription): void {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#AddKeepAlive(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n this.#RemoveKeepAlive(subscription);\n const socketSubscribeKeepAlive:ISocketSubscribeKeepAlive = {\n id: subscription.subscriptionKey.id,\n }\n socketSubscribeKeepAlive.timeout = this.#SetupTimeout(socketSubscribeKeepAlive, subscription, (this.#options.keepAlive ?? 1000));\n this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id] = socketSubscribeKeepAlive;\n\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#AddKeepAlive(): Getting Data: subscriptionKey: [${subscription.subscriptionKey.id}]`));\n this.#GetData(subscription);\n }\n\n #RemoveKeepAlive(subscription: ISubscription): void {\n if (this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id]) {\n this.#LogDebugMessage(chalk.gray(`RESTClientSubscriber:#RemoveKeepAlive(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n clearTimeout(this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout);\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout;\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id];\n }\n }\n}","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","/* eslint @typescript-eslint/no-unused-vars: 0, @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { Socket } from 'socket.io-client'\n\nimport { type ISubscriptions, ClientToServerEvents, ISubscriptionPayload, ServerToClientEvents, ISubscription } from './../commonTypes'\n\nimport { defaultLogger } from '@nsshunt/stsutils'\n\nimport chalk from 'chalk';\n\nimport { SocketIoClient, STSDefaultClientToServerEvents, STSDefaultServerToClientEvents } from '@nsshunt/stssocketioutils'\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { IObservabilitySubscriberManagerOptions } from './../commonTypes'\n\nconst SOCKET_NAMESPACE = 'stsinstrumentmanager/stsmonitor'\n\nexport class SocketClientSubscriber extends SocketIoClient<ServerToClientEvents, ClientToServerEvents> {\n #options: IObservabilitySubscriberManagerOptions;\n #id: string;\n #currentSubscriptions: ISubscriptions = [ ];\n\n protected subscriptions: Record<string, ISubscription> = { };\n\n constructor(options: IObservabilitySubscriberManagerOptions) {\n super('STSVueTilsTester');\n this.#id = uuidv4();\n this.#options = options;\n\n this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start()`));\n const url = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`;\n this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SetupSocket() url: [${url}]`));\n this.WithAddress(url)\n .WithLogger(this.logger ?? defaultLogger)\n .SetupSocket();\n }\n \n get id() {\n return this.#id;\n }\n\n get logPrefix() {\n if (this.#options) {\n return `stsuxvue:ObservabilitySubscriberManager[${this.#options.consumeInstrumentationMode}]:`;\n } else {\n return `stsuxvue:ObservabilitySubscriberManager:`;\n }\n }\n\n UpdateModelCursor = (subscriptions: ISubscriptions): void => {\n this.UnSubscribe(this.#currentSubscriptions);\n this.#currentSubscriptions = subscriptions;\n this.Subscribe(this.#currentSubscriptions);\n }\n\n Subscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n // Subscribe to socket.io event from stsinstrumentmanager\n try {\n if (this.socket) {\n this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n this.socket.timeout(1000).emit('subscribe', subId.subscriptionKey, (error: Error, data: any) => {\n if (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: [${error}], data: [${data}]`));\n } else {\n this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:Subscribe(): Response: [${JSON.stringify(data)}]`));\n this.subscriptions[subId.subscriptionKey.id] = subId;\n }\n });\n }\n } catch (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));\n }\n });\n }\n\n UnSubscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n try {\n if (this.socket) {\n this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n this.socket.timeout(1000).emit('unsubscribe', subId.subscriptionKey, (error: Error, data: any) => {\n if (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error: [${error}], data: [${data}]`));\n } else {\n this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:UnSubscribe(): Response: [${JSON.stringify(data)}]`));\n delete this.subscriptions[subId.subscriptionKey.id];\n }\n });\n }\n } catch (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error response: [${JSON.stringify(error)}]`));\n }\n });\n }\n\n protected SocketConnect(socket: Socket<STSDefaultServerToClientEvents, STSDefaultClientToServerEvents>): void {\n this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SocketConnect(): Socket ID: [${socket.id}]`));\n this.UpdateModelCursor(this.#currentSubscriptions);\n }\n\n protected SocketError(error: Error): void {\n this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketError(): Error: [${error}]`))\n }\n\n protected SetupSocketEvents(socket: Socket<STSDefaultServerToClientEvents, STSDefaultClientToServerEvents>): void {\n this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): Socket ID: [${socket.id}]`));\n if (this.socket) {\n this.socket.on('subscriptionData', (data: ISubscriptionPayload, cb) => {\n this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): on subscriptionData(): Socket ID: [${socket.id}]`));\n const subId = data.subscriptionKey.id;\n const currentSubscriptions = Object.keys(this.subscriptions).toString();\n if (this.subscriptions[subId]) {\n this.subscriptions[subId].cb(data);\n cb(`stsuxvue:subscriptionData Response: [${JSON.stringify(data.subscriptionKey)}], Current Subscriptions: [${currentSubscriptions}]`);\n } else {\n cb(`stsuxvue:subscriptionData Response: No subscription found in subscriptions: [${JSON.stringify(data.subscriptionKey)}], Current Subscriptions: [${currentSubscriptions}]`);\n }\n });\n }\n }\n\n protected SocketConnectError(error: Error): void {\n this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketConnectError(): Error: [${error}]`))\n }\n\n protected SocketDisconnect(reason: string): void {\n this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketDisconnect(): reason: [${reason}]`))\n }\n}\n"],"names":["SubscriptionTopic","TransportType","InstrumentPayloadType","RequestLoggerMiddlewareEventName","STSOptionsBase","TinyEmitter","require$$0","conversions","route","require$$1","colorConvert","module","chalk","styles","ansiStyles","require$$2","require$$3","consoleLogging","instrumentLogging","exports","encode","size","STSAxiosConfig","ePublishState","inject","influxDBDataType","quantile","runStates","SocketIoClient","uuidv4","defaultLogger"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/commonTypes.ts","../src/publish/middleware/requestLoggerMiddleware.ts","../node_modules/color-name/index.js","../node_modules/color-convert/conversions.js","../node_modules/color-convert/route.js","../node_modules/color-convert/index.js","../node_modules/ansi-styles/index.js","../node_modules/supports-color/browser.js","../node_modules/chalk/source/util.js","../node_modules/chalk/source/templates.js","../node_modules/chalk/source/index.js","../node_modules/@nsshunt/stsobservability/dist/index.mjs","../node_modules/@msgpack/msgpack/dist.esm/utils/utf8.mjs","../node_modules/@msgpack/msgpack/dist.esm/ExtData.mjs","../node_modules/@msgpack/msgpack/dist.esm/DecodeError.mjs","../node_modules/@msgpack/msgpack/dist.esm/utils/int.mjs","../node_modules/@msgpack/msgpack/dist.esm/timestamp.mjs","../node_modules/@msgpack/msgpack/dist.esm/ExtensionCodec.mjs","../node_modules/@msgpack/msgpack/dist.esm/utils/typedArrays.mjs","../node_modules/@msgpack/msgpack/dist.esm/Encoder.mjs","../node_modules/@msgpack/msgpack/dist.esm/encode.mjs","../src/publish/publishers/publishTransportRESTServer.ts","../src/publish/publishInstruments.ts","../src/publish/publishInstrumentController.ts","../src/publish/stsPluginKeys.ts","../src/publish/agentinstrumentcontroller.ts","../src/globalServiceDefinitions.ts","../src/subscribe/observabilitymodelutils.ts","../src/subscribe/observabilityPayloadTransformer.ts","../src/subscribe/restClientSubscriber.ts","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../src/subscribe/socketClientSubscriber.ts"],"sourcesContent":["/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { AgentManager, ISTSLogger, JSONObject } from '@nsshunt/stsutils';\nimport { type STSDefaultServerToClientEvents, type STSDefaultClientToServerEvents } from '@nsshunt/stssocketioutils'\nimport { InstrumentBase, Gauge, GaugeTypes, InstrumentBaseOptions } from '@nsshunt/stsobservability'\n\nexport interface IServiceSideSocketRecord {\n start: number\n globalSockets: any\n namespaceSockets: any\n namespaceRoomSockets: any\n end: number\n duration: number\n message: string\n}\n\nexport interface ClientToServerEvents extends STSDefaultClientToServerEvents {\n subscribe: (data: any, callback: (data: any) => void) => void;\n unsubscribe: (data: any, callback: (data: any) => void) => void;\n getCurrentSubscriptions: (namespace: string, rooms: string[], callback: (data: IServiceSideSocketRecord) => void) => void;\n}\n\nexport interface ServerToClientEvents extends STSDefaultServerToClientEvents {\n subscriptionData: (data: ISubscriptionPayload, callback: (data: any) => void) => void;\n}\n\nexport enum SubscriptionTopic {\n // Services topics\n AllServicesCombined = 'AllServicesCombined',\n Services = 'Services',\n ServiceInstances = 'ServiceInstances',\n ServiceInstance = 'ServiceInstance',\n\n // User Agents topics\n AllAgentsCombined = 'AllAgentsCombined',\n Agents = 'Agents',\n AgentWorkers = 'AgentWorkers',\n AgentWorker = 'AgentWorker',\n\n // Lambda topics\n AllLambdasCombined = \"AllLambdasCombined\",\n LambdaTechnologies = \"LambdaTechnologies\", // e.g. aws was lambdas\n LambdaSubTechnologies = \"LambdaSubTechnologies\", // e.g. aws_s3, aws_sqs, aws_sns was LambdaInstances\n LambdaSubTechnologiesInstance = \"LambdaSubTechnologiesInstance\", // (uuidv4()) was ServiceInstance\n\n // Logging (both service and agent)\n LogProcessing = 'LogProcessing'\n}\n\nexport interface ISubscriptionKey {\n id: string // uuid - unique ID for this subscription\n topic: SubscriptionTopic\n key?: string\n subkey?: string\n}\n\nexport interface IKafkaData {\n kafkaTopic: string\n kafkaGroupId: string\n partition: number,\n topic: string\n key: string\n value: string\n}\n\nexport interface ISubscription {\n subscriptionKey: ISubscriptionKey\n cb: (payload: ISubscriptionPayload) => void\n}\n\nexport type ISubscriptions = ISubscription[]\n\nexport type quantile = Record<string, number>;\nexport type histo = Record<string, number>;\n\nexport interface ICommonInstanceTelemetry {\n activeRequestCount: number\n authenticationCount: number\n coreCount: number\n duration: number\n errorCount: number\n latency: number\n requestCount: number\n retryCount: number\n timer: number\n velocity: number\n duration_quantile: quantile\n duration_histo: histo\n latency_quantile: quantile\n latency_histo: histo\n}\n\nexport interface IServiceInstanceTelemetry extends ICommonInstanceTelemetry {\n connectionCount: number\n connectionIdleCount: number\n connectionPoolCount: number\n connectionWaitingCount: number\n cpu: number\n cpu_quantile: quantile\n systemcpu: number\n systemcpu_quantile: quantile\n memory: string\n rx: number\n tx: number\n}\n\nexport interface ILambdaInstanceTelemetry extends ICommonInstanceTelemetry {\n connectionCount: number\n connectionIdleCount: number\n connectionPoolCount: number\n connectionWaitingCount: number\n cpu: number\n cpu_quantile: quantile\n systemcpu: number\n systemcpu_quantile: quantile\n memory: string\n rx: number\n tx: number\n}\n\nexport interface IAgentInstanceTelemetry extends ICommonInstanceTelemetry {\n childCount: number\n}\n\nexport interface ISubscriptionPayload {\n subscriptionKey: ISubscriptionKey\n data: IKafkaData \n // Agent processing\n | IAgentInstanceTelemetry | IAgents | IAgentWorkers | IAgentWorkerRunners\n // Service processing\n | IServiceInstanceTelemetry | IServices | IServiceInstances | IServiceInstancesThreads \n // Lambda processing\n | IServiceInstanceTelemetry | ILambdaTechnologies | ILambdaSubTechnologies | ILambdaSubTechnologiesInstance\n | null\n}\n\n// /serviceId\nexport interface IServices {\n [serviceId: string]: IServiceInstanceTelemetry\n}\n\n// /serviceId/serviceInstanceId\nexport interface IServiceInstances {\n [serviceId: string]: {\n [serviceInstanceId: string]: IServiceInstanceTelemetry\n }\n}\n\n// /serviceId/serviceInstanceId/threadId\nexport interface IServiceInstancesThreads {\n [serviceId: string]: {\n [serviceInstanceId: string]: {\n [threadId: string]: IServiceInstanceTelemetry\n }\n }\n}\n\n// /lambdaTechnoplogyId\nexport interface ILambdaTechnologies {\n [lambdaTechnoplogyId: string]: ILambdaInstanceTelemetry\n}\n\n// /lambdaTechnoplogyId/lambdaSubTechnoplogyId\nexport interface ILambdaSubTechnologies {\n [lambdaTechnoplogyId: string]: {\n [lambdaSubTechnoplogyId: string]: IServiceInstanceTelemetry\n }\n}\n\n// /lambdaTechnoplogyId/lambdaSubTechnoplogyId/lambdaSubTechnoplogyInstanceId\nexport interface ILambdaSubTechnologiesInstance {\n [lambdaTechnoplogyId: string]: {\n [lambdaSubTechnoplogyId: string]: {\n [lambdaSubTechnoplogyInstanceId: string]: IServiceInstanceTelemetry\n }\n }\n}\n\n// /agentId\nexport interface IAgents {\n [agentId: string]: IAgentInstanceTelemetry\n}\n\n// /agentId/agentWorkerId\nexport interface IAgentWorkers {\n [agentId: string]: {\n [agentWorkerId: string]: IAgentInstanceTelemetry\n }\n}\n\n// /agentId/agentWorkerId/asyncRunnerId\nexport interface IAgentWorkerRunners {\n [agentId: string]: {\n [agentWorkerId: string]: {\n [asyncRunnerId: string]: IAgentInstanceTelemetry\n }\n }\n}\n\n// Event key passed back from socket.io - stsinstrumentmanager\nexport const GetSocketIOSubscriptionKey = (subscriptionKey: ISubscriptionKey): string => {\n return `SubscriptionData_${subscriptionKey.id}`;\n}\n\nexport interface IObservabilitySocketIOSubscriberOptions {\n socket?: any\n keepAlive?: number // keep alive ping interval (ms) (REST only)\n urlBase?: string\n agentManager?: AgentManager\n logger: ISTSLogger\n}\n\nexport interface IObservabilitySocketIOSubscriber {\n Subscribe(subscriptions: ISubscriptions): void\n UnSubscribe(subscriptions: ISubscriptions): void\n}\n\nexport const KAFKA_PREFIX: string = '__STS__'; //@@ move to sock.io\n\nexport interface IObservabilitySubscriberManagerOptions {\n modelId: string\n consumeInstrumentationMode: string\n instrumentManagerEndpoint: string\n instrumentManagerPort: string\n instrumentManagerAPIRoot: string\n}\n\n// Publisher common types\n// ------------------------------------------------------------------------------------------------------------------------\n\nexport enum TransportType {\n none = 0,\n IPC = 1, // Inter-process communication (local)\n websocket = 2, // node ws\n RESTAPI = 4, // RESTful API\n redis = 8,\n kafka = 16, // https://www.npmjs.com/package/kafkajs\n influxdb = 32, // https://github.com/influxdata/influxdb-client-js/ https://www.npmjs.com/package/@influxdata/influxdb-client\n prometheus = 64,\n gRPC = 128, // https://www.npmjs.com/package/@grpc/grpc-js\n unixsocket = 256, // Uses https://www.npmjs.com/package/json-socket\n socketio = 512, // https://socket.io\n otelcollector = 1024, \n messageport = 2048,\n jsonrpc = 4096, // https://www.npmjs.com/package/jayson\n postgresql =8192,\n grafanaloki = 16384,\n logstash = 32768,\n fluentbit = 65536,\n fluentd = 131072,\n inmemory = 262144\n}\n\nexport function GetTransportMode(transport: string): TransportType {\n let trans: TransportType = 0 as TransportType;\n try {\n transport.split('|').forEach(item => {\n switch (item) {\n case 'IPC' :\n trans |= TransportType.IPC;\n break;\n case 'websocket' :\n trans |= TransportType.websocket;\n break;\n case 'RESTAPI' :\n trans |= TransportType.RESTAPI;\n break;\n case 'redis' :\n trans |= TransportType.redis;\n break;\n case 'kafka' :\n trans |= TransportType.kafka;\n break;\n case 'influxdb' :\n trans |= TransportType.influxdb;\n break;\n case 'prometheus' :\n trans |= TransportType.prometheus;\n break;\n case 'gRPC' :\n trans |= TransportType.gRPC;\n break;\n case 'unixsocket' :\n trans |= TransportType.unixsocket;\n break;\n case 'socketio' :\n trans |= TransportType.socketio;\n break;\n case 'otelcollector' :\n trans |= TransportType.otelcollector;\n break;\n case 'messageport' :\n trans |= TransportType.messageport\n break;\n case 'jsonrpc' :\n trans |= TransportType.jsonrpc\n break;\n case 'postgresql' :\n trans |= TransportType.postgresql\n break;\n case 'grafanaloki' :\n trans |= TransportType.grafanaloki\n break;\n case 'logstash' :\n trans |= TransportType.logstash\n break;\n case 'fluentbit' :\n trans |= TransportType.fluentbit\n break;\n case 'fluentd' :\n trans |= TransportType.fluentd\n break;\n case 'inmemory' :\n trans |= TransportType.inmemory\n break;\n }\n });\n } catch (error) {\n throw new Error(`GetTransportMode(): Error: [${error}]`);\n }\n return trans;\n}\n\nexport type Nid = string;\n\nexport interface IContextBase extends JSONObject {\n serviceType?: string\n nid?: Nid\n}\n\nexport enum InstrumentPayloadType {\n agent = 'agent',\n service = 'service'\n}\n\nexport interface IInstrumentPayload {\n //context: IServiceProcessContext | IAsyncRunnerContext | ILambdaProcessContext\n context: IContextBase\n instruments: Record<string, InstrumentBase>\n}\n\nexport type InstrumentDefinition = [ Gauge, GaugeTypes, InstrumentBaseOptions? ]\n\nexport type InstrumentDefinitions = InstrumentDefinition[];\n\nexport interface IPublisherTransport {\n Publish(payload: IInstrumentPayload): Promise<boolean>\n Close(): Promise<boolean>\n}\n\nexport interface IPublishInstrumentController {\n GetPayloadData(): IInstrumentPayload\n}\n\nexport interface IPublishInstrumentControllerOptions {\n processContext: IContextBase\n consoleLogging?: boolean\n instrumentLogging?: boolean\n httpServer?: boolean // Is this service running an http server (express via STSFramework)\n instrumentationObservationInterval?: number\n instrumentationTimeWindow?: number\n instrumentDefinitions?: InstrumentDefinitions\n publishInterval: number\n publishPostFailInterval: number\n logger: ISTSLogger\n publishTransportBaseOptions: IPublishTransportBaseOptions\n autoStart: boolean\n}\n\nexport interface IPublishInstrumentsOptions {\n processContext: IContextBase\n publishInterval: number\n publishPostFailInterval: number\n logger: ISTSLogger\n publishInstrumentController?: IPublishInstrumentController\n publishTransportBaseOptions: IPublishTransportBaseOptions\n}\n\nexport interface IPublishTransportBaseOptions {\n id?: string\n transportType: TransportType\n logger: ISTSLogger\n}\n\nexport interface IPublishTransportRESTServerOptions extends IPublishTransportBaseOptions {\n url?: string\n socketPath?: string\n agentManager?: AgentManager\n showPublishPayload?: boolean\n}\n","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { JSONObject, STSOptionsBase } from '@nsshunt/stsutils'\nimport { TinyEmitter } from 'tiny-emitter';\n//import { Express, Request, Response, NextFunction } from 'express';\n//import { v4 as uuidv4 } from 'uuid';\n\nexport interface RequestLoggerMiddlewareOptions {\n\tignoresocketio: boolean\n}\n\nexport enum RequestLoggerMiddlewareEventName {\n UpdateInstrument_AR_DEC = 'UpdateInstrument_AR_DEC', // active request gauge - decrement\n UpdateInstrument_AR_INC = 'UpdateInstrument_AR_INC', // active request gauge - increment\n UpdateInstrument_RC_INC = 'UpdateInstrument_RC_INC', // request count gauge - increment\n UpdateInstrument_V_INC = 'UpdateInstrument_V_INC', // velocity gauge - increment\n UpdateInstrument_DH_VAL = 'UpdateInstrument_DH_VAL', // duration histo - value\n UpdateInstrument_D_VAL = 'UpdateInstrument_D_VAL' // duration - value\n}\n\nexport type RequestLoggerMiddlewareEventFunc = (data?: string | number | JSONObject) => void;\n\n//@@ use TinyEmitter to emit logger events\nexport class RequestLoggerMiddleware extends STSOptionsBase\n{\n #tinyEmitter: TinyEmitter = new TinyEmitter();\n\n constructor(options: RequestLoggerMiddlewareOptions) {\n super(options);\n }\n\n override get options(): RequestLoggerMiddlewareOptions {\n return super.options as RequestLoggerMiddlewareOptions;\n }\n\n on(eventName: string, callBackFn: RequestLoggerMiddlewareEventFunc) {\n this.#tinyEmitter.on(eventName, callBackFn);\n }\n\n #RequestCompleted = (start: [number, number]) => {\n // Decrease the number of active requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_AR_DEC);\n\n // Update request duration histo data\n let timeInMs = 0;\n const end = process.hrtime(start);\n timeInMs = (end[0]* 1000000000 + end[1]) / 1000000;\n timeInMs = parseFloat(timeInMs.toFixed(4));\n\t\t\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_DH_VAL, timeInMs);\n\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_D_VAL, timeInMs);\n };\n\n // https://stackoverflow.com/questions/18031839/how-to-use-process-hrtime-to-get-execution-time-of-async-function/18031945\n\n /**\n\t * Use with .bind(class instance).\n\t * Example;\n\t * ---\n\t * `let requestLoggerMiddleware = new RequestLoggerMiddleware();\n\t * app.use(requestLoggerMiddleware.Middleware.bind(requestLoggerMiddleware));`\n\t * @param {*} req \n\t * @param {*} res \n\t * @param {*} next \n\t * @returns \n\t */\n \n Middleware = async (req: any, res: any, next: any) => { \n if (this.options.ignoresocketio && req.originalUrl.includes('socket.io')) {\n return;\n }\n\n const start = process.hrtime();\n\n // Increase the number of active requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_AR_INC);\n\n // Increase the total number of requests\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_RC_INC);\n\n // Increase the total number of requests to determine velocity (requests per second)\n this.#tinyEmitter.emit(RequestLoggerMiddlewareEventName.UpdateInstrument_V_INC);\n\n req.on(\"aborted\", () => {\n // request closed unexpectedly\n //@@RequestCompleted(start);\n });\n\n req.on(\"close\", () => {\n // request closed unexpectedly or normally\n this.#RequestCompleted(start);\n });\n\n req.on(\"end\", () => {\n \n });\n\n res.on('finish', () => {\n //@@RequestCompleted(start);\n });\n\t\n next();\n }\n}\n","'use strict'\r\n\r\nmodule.exports = {\r\n\t\"aliceblue\": [240, 248, 255],\r\n\t\"antiquewhite\": [250, 235, 215],\r\n\t\"aqua\": [0, 255, 255],\r\n\t\"aquamarine\": [127, 255, 212],\r\n\t\"azure\": [240, 255, 255],\r\n\t\"beige\": [245, 245, 220],\r\n\t\"bisque\": [255, 228, 196],\r\n\t\"black\": [0, 0, 0],\r\n\t\"blanchedalmond\": [255, 235, 205],\r\n\t\"blue\": [0, 0, 255],\r\n\t\"blueviolet\": [138, 43, 226],\r\n\t\"brown\": [165, 42, 42],\r\n\t\"burlywood\": [222, 184, 135],\r\n\t\"cadetblue\": [95, 158, 160],\r\n\t\"chartreuse\": [127, 255, 0],\r\n\t\"chocolate\": [210, 105, 30],\r\n\t\"coral\": [255, 127, 80],\r\n\t\"cornflowerblue\": [100, 149, 237],\r\n\t\"cornsilk\": [255, 248, 220],\r\n\t\"crimson\": [220, 20, 60],\r\n\t\"cyan\": [0, 255, 255],\r\n\t\"darkblue\": [0, 0, 139],\r\n\t\"darkcyan\": [0, 139, 139],\r\n\t\"darkgoldenrod\": [184, 134, 11],\r\n\t\"darkgray\": [169, 169, 169],\r\n\t\"darkgreen\": [0, 100, 0],\r\n\t\"darkgrey\": [169, 169, 169],\r\n\t\"darkkhaki\": [189, 183, 107],\r\n\t\"darkmagenta\": [139, 0, 139],\r\n\t\"darkolivegreen\": [85, 107, 47],\r\n\t\"darkorange\": [255, 140, 0],\r\n\t\"darkorchid\": [153, 50, 204],\r\n\t\"darkred\": [139, 0, 0],\r\n\t\"darksalmon\": [233, 150, 122],\r\n\t\"darkseagreen\": [143, 188, 143],\r\n\t\"darkslateblue\": [72, 61, 139],\r\n\t\"darkslategray\": [47, 79, 79],\r\n\t\"darkslategrey\": [47, 79, 79],\r\n\t\"darkturquoise\": [0, 206, 209],\r\n\t\"darkviolet\": [148, 0, 211],\r\n\t\"deeppink\": [255, 20, 147],\r\n\t\"deepskyblue\": [0, 191, 255],\r\n\t\"dimgray\": [105, 105, 105],\r\n\t\"dimgrey\": [105, 105, 105],\r\n\t\"dodgerblue\": [30, 144, 255],\r\n\t\"firebrick\": [178, 34, 34],\r\n\t\"floralwhite\": [255, 250, 240],\r\n\t\"forestgreen\": [34, 139, 34],\r\n\t\"fuchsia\": [255, 0, 255],\r\n\t\"gainsboro\": [220, 220, 220],\r\n\t\"ghostwhite\": [248, 248, 255],\r\n\t\"gold\": [255, 215, 0],\r\n\t\"goldenrod\": [218, 165, 32],\r\n\t\"gray\": [128, 128, 128],\r\n\t\"green\": [0, 128, 0],\r\n\t\"greenyellow\": [173, 255, 47],\r\n\t\"grey\": [128, 128, 128],\r\n\t\"honeydew\": [240, 255, 240],\r\n\t\"hotpink\": [255, 105, 180],\r\n\t\"indianred\": [205, 92, 92],\r\n\t\"indigo\": [75, 0, 130],\r\n\t\"ivory\": [255, 255, 240],\r\n\t\"khaki\": [240, 230, 140],\r\n\t\"lavender\": [230, 230, 250],\r\n\t\"lavenderblush\": [255, 240, 245],\r\n\t\"lawngreen\": [124, 252, 0],\r\n\t\"lemonchiffon\": [255, 250, 205],\r\n\t\"lightblue\": [173, 216, 230],\r\n\t\"lightcoral\": [240, 128, 128],\r\n\t\"lightcyan\": [224, 255, 255],\r\n\t\"lightgoldenrodyellow\": [250, 250, 210],\r\n\t\"lightgray\": [211, 211, 211],\r\n\t\"lightgreen\": [144, 238, 144],\r\n\t\"lightgrey\": [211, 211, 211],\r\n\t\"lightpink\": [255, 182, 193],\r\n\t\"lightsalmon\": [255, 160, 122],\r\n\t\"lightseagreen\": [32, 178, 170],\r\n\t\"lightskyblue\": [135, 206, 250],\r\n\t\"lightslategray\": [119, 136, 153],\r\n\t\"lightslategrey\": [119, 136, 153],\r\n\t\"lightsteelblue\": [176, 196, 222],\r\n\t\"lightyellow\": [255, 255, 224],\r\n\t\"lime\": [0, 255, 0],\r\n\t\"limegreen\": [50, 205, 50],\r\n\t\"linen\": [250, 240, 230],\r\n\t\"magenta\": [255, 0, 255],\r\n\t\"maroon\": [128, 0, 0],\r\n\t\"mediumaquamarine\": [102, 205, 170],\r\n\t\"mediumblue\": [0, 0, 205],\r\n\t\"mediumorchid\": [186, 85, 211],\r\n\t\"mediumpurple\": [147, 112, 219],\r\n\t\"mediumseagreen\": [60, 179, 113],\r\n\t\"mediumslateblue\": [123, 104, 238],\r\n\t\"mediumspringgreen\": [0, 250, 154],\r\n\t\"mediumturquoise\": [72, 209, 204],\r\n\t\"mediumvioletred\": [199, 21, 133],\r\n\t\"midnightblue\": [25, 25, 112],\r\n\t\"mintcream\": [245, 255, 250],\r\n\t\"mistyrose\": [255, 228, 225],\r\n\t\"moccasin\": [255, 228, 181],\r\n\t\"navajowhite\": [255, 222, 173],\r\n\t\"navy\": [0, 0, 128],\r\n\t\"oldlace\": [253, 245, 230],\r\n\t\"olive\": [128, 128, 0],\r\n\t\"olivedrab\": [107, 142, 35],\r\n\t\"orange\": [255, 165, 0],\r\n\t\"orangered\": [255, 69, 0],\r\n\t\"orchid\": [218, 112, 214],\r\n\t\"palegoldenrod\": [238, 232, 170],\r\n\t\"palegreen\": [152, 251, 152],\r\n\t\"paleturquoise\": [175, 238, 238],\r\n\t\"palevioletred\": [219, 112, 147],\r\n\t\"papayawhip\": [255, 239, 213],\r\n\t\"peachpuff\": [255, 218, 185],\r\n\t\"peru\": [205, 133, 63],\r\n\t\"pink\": [255, 192, 203],\r\n\t\"plum\": [221, 160, 221],\r\n\t\"powderblue\": [176, 224, 230],\r\n\t\"purple\": [128, 0, 128],\r\n\t\"rebeccapurple\": [102, 51, 153],\r\n\t\"red\": [255, 0, 0],\r\n\t\"rosybrown\": [188, 143, 143],\r\n\t\"royalblue\": [65, 105, 225],\r\n\t\"saddlebrown\": [139, 69, 19],\r\n\t\"salmon\": [250, 128, 114],\r\n\t\"sandybrown\": [244, 164, 96],\r\n\t\"seagreen\": [46, 139, 87],\r\n\t\"seashell\": [255, 245, 238],\r\n\t\"sienna\": [160, 82, 45],\r\n\t\"silver\": [192, 192, 192],\r\n\t\"skyblue\": [135, 206, 235],\r\n\t\"slateblue\": [106, 90, 205],\r\n\t\"slategray\": [112, 128, 144],\r\n\t\"slategrey\": [112, 128, 144],\r\n\t\"snow\": [255, 250, 250],\r\n\t\"springgreen\": [0, 255, 127],\r\n\t\"steelblue\": [70, 130, 180],\r\n\t\"tan\": [210, 180, 140],\r\n\t\"teal\": [0, 128, 128],\r\n\t\"thistle\": [216, 191, 216],\r\n\t\"tomato\": [255, 99, 71],\r\n\t\"turquoise\": [64, 224, 208],\r\n\t\"violet\": [238, 130, 238],\r\n\t\"wheat\": [245, 222, 179],\r\n\t\"white\": [255, 255, 255],\r\n\t\"whitesmoke\": [245, 245, 245],\r\n\t\"yellow\": [255, 255, 0],\r\n\t\"yellowgreen\": [154, 205, 50]\r\n};\r\n","/* MIT license */\n/* eslint-disable no-mixed-operators */\nconst cssKeywords = require('color-name');\n\n// NOTE: conversions should only return primitive values (i.e. arrays, or\n// values that give correct `typeof` results).\n// do not use box values types (i.e. Number(), String(), etc.)\n\nconst reverseKeywords = {};\nfor (const key of Object.keys(cssKeywords)) {\n\treverseKeywords[cssKeywords[key]] = key;\n}\n\nconst convert = {\n\trgb: {channels: 3, labels: 'rgb'},\n\thsl: {channels: 3, labels: 'hsl'},\n\thsv: {channels: 3, labels: 'hsv'},\n\thwb: {channels: 3, labels: 'hwb'},\n\tcmyk: {channels: 4, labels: 'cmyk'},\n\txyz: {channels: 3, labels: 'xyz'},\n\tlab: {channels: 3, labels: 'lab'},\n\tlch: {channels: 3, labels: 'lch'},\n\thex: {channels: 1, labels: ['hex']},\n\tkeyword: {channels: 1, labels: ['keyword']},\n\tansi16: {channels: 1, labels: ['ansi16']},\n\tansi256: {channels: 1, labels: ['ansi256']},\n\thcg: {channels: 3, labels: ['h', 'c', 'g']},\n\tapple: {channels: 3, labels: ['r16', 'g16', 'b16']},\n\tgray: {channels: 1, labels: ['gray']}\n};\n\nmodule.exports = convert;\n\n// Hide .channels and .labels properties\nfor (const model of Object.keys(convert)) {\n\tif (!('channels' in convert[model])) {\n\t\tthrow new Error('missing channels property: ' + model);\n\t}\n\n\tif (!('labels' in convert[model])) {\n\t\tthrow new Error('missing channel labels property: ' + model);\n\t}\n\n\tif (convert[model].labels.length !== convert[model].channels) {\n\t\tthrow new Error('channel and label counts mismatch: ' + model);\n\t}\n\n\tconst {channels, labels} = convert[model];\n\tdelete convert[model].channels;\n\tdelete convert[model].labels;\n\tObject.defineProperty(convert[model], 'channels', {value: channels});\n\tObject.defineProperty(convert[model], 'labels', {value: labels});\n}\n\nconvert.rgb.hsl = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst min = Math.min(r, g, b);\n\tconst max = Math.max(r, g, b);\n\tconst delta = max - min;\n\tlet h;\n\tlet s;\n\n\tif (max === min) {\n\t\th = 0;\n\t} else if (r === max) {\n\t\th = (g - b) / delta;\n\t} else if (g === max) {\n\t\th = 2 + (b - r) / delta;\n\t} else if (b === max) {\n\t\th = 4 + (r - g) / delta;\n\t}\n\n\th = Math.min(h * 60, 360);\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst l = (min + max) / 2;\n\n\tif (max === min) {\n\t\ts = 0;\n\t} else if (l <= 0.5) {\n\t\ts = delta / (max + min);\n\t} else {\n\t\ts = delta / (2 - max - min);\n\t}\n\n\treturn [h, s * 100, l * 100];\n};\n\nconvert.rgb.hsv = function (rgb) {\n\tlet rdif;\n\tlet gdif;\n\tlet bdif;\n\tlet h;\n\tlet s;\n\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst v = Math.max(r, g, b);\n\tconst diff = v - Math.min(r, g, b);\n\tconst diffc = function (c) {\n\t\treturn (v - c) / 6 / diff + 1 / 2;\n\t};\n\n\tif (diff === 0) {\n\t\th = 0;\n\t\ts = 0;\n\t} else {\n\t\ts = diff / v;\n\t\trdif = diffc(r);\n\t\tgdif = diffc(g);\n\t\tbdif = diffc(b);\n\n\t\tif (r === v) {\n\t\t\th = bdif - gdif;\n\t\t} else if (g === v) {\n\t\t\th = (1 / 3) + rdif - bdif;\n\t\t} else if (b === v) {\n\t\t\th = (2 / 3) + gdif - rdif;\n\t\t}\n\n\t\tif (h < 0) {\n\t\t\th += 1;\n\t\t} else if (h > 1) {\n\t\t\th -= 1;\n\t\t}\n\t}\n\n\treturn [\n\t\th * 360,\n\t\ts * 100,\n\t\tv * 100\n\t];\n};\n\nconvert.rgb.hwb = function (rgb) {\n\tconst r = rgb[0];\n\tconst g = rgb[1];\n\tlet b = rgb[2];\n\tconst h = convert.rgb.hsl(rgb)[0];\n\tconst w = 1 / 255 * Math.min(r, Math.min(g, b));\n\n\tb = 1 - 1 / 255 * Math.max(r, Math.max(g, b));\n\n\treturn [h, w * 100, b * 100];\n};\n\nconvert.rgb.cmyk = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\n\tconst k = Math.min(1 - r, 1 - g, 1 - b);\n\tconst c = (1 - r - k) / (1 - k) || 0;\n\tconst m = (1 - g - k) / (1 - k) || 0;\n\tconst y = (1 - b - k) / (1 - k) || 0;\n\n\treturn [c * 100, m * 100, y * 100, k * 100];\n};\n\nfunction comparativeDistance(x, y) {\n\t/*\n\t\tSee https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance\n\t*/\n\treturn (\n\t\t((x[0] - y[0]) ** 2) +\n\t\t((x[1] - y[1]) ** 2) +\n\t\t((x[2] - y[2]) ** 2)\n\t);\n}\n\nconvert.rgb.keyword = function (rgb) {\n\tconst reversed = reverseKeywords[rgb];\n\tif (reversed) {\n\t\treturn reversed;\n\t}\n\n\tlet currentClosestDistance = Infinity;\n\tlet currentClosestKeyword;\n\n\tfor (const keyword of Object.keys(cssKeywords)) {\n\t\tconst value = cssKeywords[keyword];\n\n\t\t// Compute comparative distance\n\t\tconst distance = comparativeDistance(rgb, value);\n\n\t\t// Check if its less, if so set as closest\n\t\tif (distance < currentClosestDistance) {\n\t\t\tcurrentClosestDistance = distance;\n\t\t\tcurrentClosestKeyword = keyword;\n\t\t}\n\t}\n\n\treturn currentClosestKeyword;\n};\n\nconvert.keyword.rgb = function (keyword) {\n\treturn cssKeywords[keyword];\n};\n\nconvert.rgb.xyz = function (rgb) {\n\tlet r = rgb[0] / 255;\n\tlet g = rgb[1] / 255;\n\tlet b = rgb[2] / 255;\n\n\t// Assume sRGB\n\tr = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);\n\tg = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);\n\tb = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);\n\n\tconst x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);\n\tconst y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);\n\tconst z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);\n\n\treturn [x * 100, y * 100, z * 100];\n};\n\nconvert.rgb.lab = function (rgb) {\n\tconst xyz = convert.rgb.xyz(rgb);\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.hsl.rgb = function (hsl) {\n\tconst h = hsl[0] / 360;\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\tlet t2;\n\tlet t3;\n\tlet val;\n\n\tif (s === 0) {\n\t\tval = l * 255;\n\t\treturn [val, val, val];\n\t}\n\n\tif (l < 0.5) {\n\t\tt2 = l * (1 + s);\n\t} else {\n\t\tt2 = l + s - l * s;\n\t}\n\n\tconst t1 = 2 * l - t2;\n\n\tconst rgb = [0, 0, 0];\n\tfor (let i = 0; i < 3; i++) {\n\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\tif (t3 < 0) {\n\t\t\tt3++;\n\t\t}\n\n\t\tif (t3 > 1) {\n\t\t\tt3--;\n\t\t}\n\n\t\tif (6 * t3 < 1) {\n\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t} else if (2 * t3 < 1) {\n\t\t\tval = t2;\n\t\t} else if (3 * t3 < 2) {\n\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t} else {\n\t\t\tval = t1;\n\t\t}\n\n\t\trgb[i] = val * 255;\n\t}\n\n\treturn rgb;\n};\n\nconvert.hsl.hsv = function (hsl) {\n\tconst h = hsl[0];\n\tlet s = hsl[1] / 100;\n\tlet l = hsl[2] / 100;\n\tlet smin = s;\n\tconst lmin = Math.max(l, 0.01);\n\n\tl *= 2;\n\ts *= (l <= 1) ? l : 2 - l;\n\tsmin *= lmin <= 1 ? lmin : 2 - lmin;\n\tconst v = (l + s) / 2;\n\tconst sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);\n\n\treturn [h, sv * 100, v * 100];\n};\n\nconvert.hsv.rgb = function (hsv) {\n\tconst h = hsv[0] / 60;\n\tconst s = hsv[1] / 100;\n\tlet v = hsv[2] / 100;\n\tconst hi = Math.floor(h) % 6;\n\n\tconst f = h - Math.floor(h);\n\tconst p = 255 * v * (1 - s);\n\tconst q = 255 * v * (1 - (s * f));\n\tconst t = 255 * v * (1 - (s * (1 - f)));\n\tv *= 255;\n\n\tswitch (hi) {\n\t\tcase 0:\n\t\t\treturn [v, t, p];\n\t\tcase 1:\n\t\t\treturn [q, v, p];\n\t\tcase 2:\n\t\t\treturn [p, v, t];\n\t\tcase 3:\n\t\t\treturn [p, q, v];\n\t\tcase 4:\n\t\t\treturn [t, p, v];\n\t\tcase 5:\n\t\t\treturn [v, p, q];\n\t}\n};\n\nconvert.hsv.hsl = function (hsv) {\n\tconst h = hsv[0];\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\tconst vmin = Math.max(v, 0.01);\n\tlet sl;\n\tlet l;\n\n\tl = (2 - s) * v;\n\tconst lmin = (2 - s) * vmin;\n\tsl = s * vmin;\n\tsl /= (lmin <= 1) ? lmin : 2 - lmin;\n\tsl = sl || 0;\n\tl /= 2;\n\n\treturn [h, sl * 100, l * 100];\n};\n\n// http://dev.w3.org/csswg/css-color/#hwb-to-rgb\nconvert.hwb.rgb = function (hwb) {\n\tconst h = hwb[0] / 360;\n\tlet wh = hwb[1] / 100;\n\tlet bl = hwb[2] / 100;\n\tconst ratio = wh + bl;\n\tlet f;\n\n\t// Wh + bl cant be > 1\n\tif (ratio > 1) {\n\t\twh /= ratio;\n\t\tbl /= ratio;\n\t}\n\n\tconst i = Math.floor(6 * h);\n\tconst v = 1 - bl;\n\tf = 6 * h - i;\n\n\tif ((i & 0x01) !== 0) {\n\t\tf = 1 - f;\n\t}\n\n\tconst n = wh + f * (v - wh); // Linear interpolation\n\n\tlet r;\n\tlet g;\n\tlet b;\n\t/* eslint-disable max-statements-per-line,no-multi-spaces */\n\tswitch (i) {\n\t\tdefault:\n\t\tcase 6:\n\t\tcase 0: r = v; g = n; b = wh; break;\n\t\tcase 1: r = n; g = v; b = wh; break;\n\t\tcase 2: r = wh; g = v; b = n; break;\n\t\tcase 3: r = wh; g = n; b = v; break;\n\t\tcase 4: r = n; g = wh; b = v; break;\n\t\tcase 5: r = v; g = wh; b = n; break;\n\t}\n\t/* eslint-enable max-statements-per-line,no-multi-spaces */\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.cmyk.rgb = function (cmyk) {\n\tconst c = cmyk[0] / 100;\n\tconst m = cmyk[1] / 100;\n\tconst y = cmyk[2] / 100;\n\tconst k = cmyk[3] / 100;\n\n\tconst r = 1 - Math.min(1, c * (1 - k) + k);\n\tconst g = 1 - Math.min(1, m * (1 - k) + k);\n\tconst b = 1 - Math.min(1, y * (1 - k) + k);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.rgb = function (xyz) {\n\tconst x = xyz[0] / 100;\n\tconst y = xyz[1] / 100;\n\tconst z = xyz[2] / 100;\n\tlet r;\n\tlet g;\n\tlet b;\n\n\tr = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);\n\tg = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);\n\tb = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);\n\n\t// Assume sRGB\n\tr = r > 0.0031308\n\t\t? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)\n\t\t: r * 12.92;\n\n\tg = g > 0.0031308\n\t\t? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)\n\t\t: g * 12.92;\n\n\tb = b > 0.0031308\n\t\t? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)\n\t\t: b * 12.92;\n\n\tr = Math.min(Math.max(0, r), 1);\n\tg = Math.min(Math.max(0, g), 1);\n\tb = Math.min(Math.max(0, b), 1);\n\n\treturn [r * 255, g * 255, b * 255];\n};\n\nconvert.xyz.lab = function (xyz) {\n\tlet x = xyz[0];\n\tlet y = xyz[1];\n\tlet z = xyz[2];\n\n\tx /= 95.047;\n\ty /= 100;\n\tz /= 108.883;\n\n\tx = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);\n\ty = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);\n\tz = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);\n\n\tconst l = (116 * y) - 16;\n\tconst a = 500 * (x - y);\n\tconst b = 200 * (y - z);\n\n\treturn [l, a, b];\n};\n\nconvert.lab.xyz = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet x;\n\tlet y;\n\tlet z;\n\n\ty = (l + 16) / 116;\n\tx = a / 500 + y;\n\tz = y - b / 200;\n\n\tconst y2 = y ** 3;\n\tconst x2 = x ** 3;\n\tconst z2 = z ** 3;\n\ty = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;\n\tx = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;\n\tz = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;\n\n\tx *= 95.047;\n\ty *= 100;\n\tz *= 108.883;\n\n\treturn [x, y, z];\n};\n\nconvert.lab.lch = function (lab) {\n\tconst l = lab[0];\n\tconst a = lab[1];\n\tconst b = lab[2];\n\tlet h;\n\n\tconst hr = Math.atan2(b, a);\n\th = hr * 360 / 2 / Math.PI;\n\n\tif (h < 0) {\n\t\th += 360;\n\t}\n\n\tconst c = Math.sqrt(a * a + b * b);\n\n\treturn [l, c, h];\n};\n\nconvert.lch.lab = function (lch) {\n\tconst l = lch[0];\n\tconst c = lch[1];\n\tconst h = lch[2];\n\n\tconst hr = h / 360 * 2 * Math.PI;\n\tconst a = c * Math.cos(hr);\n\tconst b = c * Math.sin(hr);\n\n\treturn [l, a, b];\n};\n\nconvert.rgb.ansi16 = function (args, saturation = null) {\n\tconst [r, g, b] = args;\n\tlet value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization\n\n\tvalue = Math.round(value / 50);\n\n\tif (value === 0) {\n\t\treturn 30;\n\t}\n\n\tlet ansi = 30\n\t\t+ ((Math.round(b / 255) << 2)\n\t\t| (Math.round(g / 255) << 1)\n\t\t| Math.round(r / 255));\n\n\tif (value === 2) {\n\t\tansi += 60;\n\t}\n\n\treturn ansi;\n};\n\nconvert.hsv.ansi16 = function (args) {\n\t// Optimization here; we already know the value and don't need to get\n\t// it converted for us.\n\treturn convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);\n};\n\nconvert.rgb.ansi256 = function (args) {\n\tconst r = args[0];\n\tconst g = args[1];\n\tconst b = args[2];\n\n\t// We use the extended greyscale palette here, with the exception of\n\t// black and white. normal palette only has 4 greyscale shades.\n\tif (r === g && g === b) {\n\t\tif (r < 8) {\n\t\t\treturn 16;\n\t\t}\n\n\t\tif (r > 248) {\n\t\t\treturn 231;\n\t\t}\n\n\t\treturn Math.round(((r - 8) / 247) * 24) + 232;\n\t}\n\n\tconst ansi = 16\n\t\t+ (36 * Math.round(r / 255 * 5))\n\t\t+ (6 * Math.round(g / 255 * 5))\n\t\t+ Math.round(b / 255 * 5);\n\n\treturn ansi;\n};\n\nconvert.ansi16.rgb = function (args) {\n\tlet color = args % 10;\n\n\t// Handle greyscale\n\tif (color === 0 || color === 7) {\n\t\tif (args > 50) {\n\t\t\tcolor += 3.5;\n\t\t}\n\n\t\tcolor = color / 10.5 * 255;\n\n\t\treturn [color, color, color];\n\t}\n\n\tconst mult = (~~(args > 50) + 1) * 0.5;\n\tconst r = ((color & 1) * mult) * 255;\n\tconst g = (((color >> 1) & 1) * mult) * 255;\n\tconst b = (((color >> 2) & 1) * mult) * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.ansi256.rgb = function (args) {\n\t// Handle greyscale\n\tif (args >= 232) {\n\t\tconst c = (args - 232) * 10 + 8;\n\t\treturn [c, c, c];\n\t}\n\n\targs -= 16;\n\n\tlet rem;\n\tconst r = Math.floor(args / 36) / 5 * 255;\n\tconst g = Math.floor((rem = args % 36) / 6) / 5 * 255;\n\tconst b = (rem % 6) / 5 * 255;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hex = function (args) {\n\tconst integer = ((Math.round(args[0]) & 0xFF) << 16)\n\t\t+ ((Math.round(args[1]) & 0xFF) << 8)\n\t\t+ (Math.round(args[2]) & 0xFF);\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.hex.rgb = function (args) {\n\tconst match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);\n\tif (!match) {\n\t\treturn [0, 0, 0];\n\t}\n\n\tlet colorString = match[0];\n\n\tif (match[0].length === 3) {\n\t\tcolorString = colorString.split('').map(char => {\n\t\t\treturn char + char;\n\t\t}).join('');\n\t}\n\n\tconst integer = parseInt(colorString, 16);\n\tconst r = (integer >> 16) & 0xFF;\n\tconst g = (integer >> 8) & 0xFF;\n\tconst b = integer & 0xFF;\n\n\treturn [r, g, b];\n};\n\nconvert.rgb.hcg = function (rgb) {\n\tconst r = rgb[0] / 255;\n\tconst g = rgb[1] / 255;\n\tconst b = rgb[2] / 255;\n\tconst max = Math.max(Math.max(r, g), b);\n\tconst min = Math.min(Math.min(r, g), b);\n\tconst chroma = (max - min);\n\tlet grayscale;\n\tlet hue;\n\n\tif (chroma < 1) {\n\t\tgrayscale = min / (1 - chroma);\n\t} else {\n\t\tgrayscale = 0;\n\t}\n\n\tif (chroma <= 0) {\n\t\thue = 0;\n\t} else\n\tif (max === r) {\n\t\thue = ((g - b) / chroma) % 6;\n\t} else\n\tif (max === g) {\n\t\thue = 2 + (b - r) / chroma;\n\t} else {\n\t\thue = 4 + (r - g) / chroma;\n\t}\n\n\thue /= 6;\n\thue %= 1;\n\n\treturn [hue * 360, chroma * 100, grayscale * 100];\n};\n\nconvert.hsl.hcg = function (hsl) {\n\tconst s = hsl[1] / 100;\n\tconst l = hsl[2] / 100;\n\n\tconst c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));\n\n\tlet f = 0;\n\tif (c < 1.0) {\n\t\tf = (l - 0.5 * c) / (1.0 - c);\n\t}\n\n\treturn [hsl[0], c * 100, f * 100];\n};\n\nconvert.hsv.hcg = function (hsv) {\n\tconst s = hsv[1] / 100;\n\tconst v = hsv[2] / 100;\n\n\tconst c = s * v;\n\tlet f = 0;\n\n\tif (c < 1.0) {\n\t\tf = (v - c) / (1 - c);\n\t}\n\n\treturn [hsv[0], c * 100, f * 100];\n};\n\nconvert.hcg.rgb = function (hcg) {\n\tconst h = hcg[0] / 360;\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tif (c === 0.0) {\n\t\treturn [g * 255, g * 255, g * 255];\n\t}\n\n\tconst pure = [0, 0, 0];\n\tconst hi = (h % 1) * 6;\n\tconst v = hi % 1;\n\tconst w = 1 - v;\n\tlet mg = 0;\n\n\t/* eslint-disable max-statements-per-line */\n\tswitch (Math.floor(hi)) {\n\t\tcase 0:\n\t\t\tpure[0] = 1; pure[1] = v; pure[2] = 0; break;\n\t\tcase 1:\n\t\t\tpure[0] = w; pure[1] = 1; pure[2] = 0; break;\n\t\tcase 2:\n\t\t\tpure[0] = 0; pure[1] = 1; pure[2] = v; break;\n\t\tcase 3:\n\t\t\tpure[0] = 0; pure[1] = w; pure[2] = 1; break;\n\t\tcase 4:\n\t\t\tpure[0] = v; pure[1] = 0; pure[2] = 1; break;\n\t\tdefault:\n\t\t\tpure[0] = 1; pure[1] = 0; pure[2] = w;\n\t}\n\t/* eslint-enable max-statements-per-line */\n\n\tmg = (1.0 - c) * g;\n\n\treturn [\n\t\t(c * pure[0] + mg) * 255,\n\t\t(c * pure[1] + mg) * 255,\n\t\t(c * pure[2] + mg) * 255\n\t];\n};\n\nconvert.hcg.hsv = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst v = c + g * (1.0 - c);\n\tlet f = 0;\n\n\tif (v > 0.0) {\n\t\tf = c / v;\n\t}\n\n\treturn [hcg[0], f * 100, v * 100];\n};\n\nconvert.hcg.hsl = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\n\tconst l = g * (1.0 - c) + 0.5 * c;\n\tlet s = 0;\n\n\tif (l > 0.0 && l < 0.5) {\n\t\ts = c / (2 * l);\n\t} else\n\tif (l >= 0.5 && l < 1.0) {\n\t\ts = c / (2 * (1 - l));\n\t}\n\n\treturn [hcg[0], s * 100, l * 100];\n};\n\nconvert.hcg.hwb = function (hcg) {\n\tconst c = hcg[1] / 100;\n\tconst g = hcg[2] / 100;\n\tconst v = c + g * (1.0 - c);\n\treturn [hcg[0], (v - c) * 100, (1 - v) * 100];\n};\n\nconvert.hwb.hcg = function (hwb) {\n\tconst w = hwb[1] / 100;\n\tconst b = hwb[2] / 100;\n\tconst v = 1 - b;\n\tconst c = v - w;\n\tlet g = 0;\n\n\tif (c < 1) {\n\t\tg = (v - c) / (1 - c);\n\t}\n\n\treturn [hwb[0], c * 100, g * 100];\n};\n\nconvert.apple.rgb = function (apple) {\n\treturn [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];\n};\n\nconvert.rgb.apple = function (rgb) {\n\treturn [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];\n};\n\nconvert.gray.rgb = function (args) {\n\treturn [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];\n};\n\nconvert.gray.hsl = function (args) {\n\treturn [0, 0, args[0]];\n};\n\nconvert.gray.hsv = convert.gray.hsl;\n\nconvert.gray.hwb = function (gray) {\n\treturn [0, 100, gray[0]];\n};\n\nconvert.gray.cmyk = function (gray) {\n\treturn [0, 0, 0, gray[0]];\n};\n\nconvert.gray.lab = function (gray) {\n\treturn [gray[0], 0, 0];\n};\n\nconvert.gray.hex = function (gray) {\n\tconst val = Math.round(gray[0] / 100 * 255) & 0xFF;\n\tconst integer = (val << 16) + (val << 8) + val;\n\n\tconst string = integer.toString(16).toUpperCase();\n\treturn '000000'.substring(string.length) + string;\n};\n\nconvert.rgb.gray = function (rgb) {\n\tconst val = (rgb[0] + rgb[1] + rgb[2]) / 3;\n\treturn [val / 255 * 100];\n};\n","const conversions = require('./conversions');\n\n/*\n\tThis function routes a model to all other models.\n\n\tall functions that are routed have a property `.conversion` attached\n\tto the returned synthetic function. This property is an array\n\tof strings, each with the steps in between the 'from' and 'to'\n\tcolor models (inclusive).\n\n\tconversions that are not possible simply are not included.\n*/\n\nfunction buildGraph() {\n\tconst graph = {};\n\t// https://jsperf.com/object-keys-vs-for-in-with-closure/3\n\tconst models = Object.keys(conversions);\n\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tgraph[models[i]] = {\n\t\t\t// http://jsperf.com/1-vs-infinity\n\t\t\t// micro-opt, but this is simple.\n\t\t\tdistance: -1,\n\t\t\tparent: null\n\t\t};\n\t}\n\n\treturn graph;\n}\n\n// https://en.wikipedia.org/wiki/Breadth-first_search\nfunction deriveBFS(fromModel) {\n\tconst graph = buildGraph();\n\tconst queue = [fromModel]; // Unshift -> queue -> pop\n\n\tgraph[fromModel].distance = 0;\n\n\twhile (queue.length) {\n\t\tconst current = queue.pop();\n\t\tconst adjacents = Object.keys(conversions[current]);\n\n\t\tfor (let len = adjacents.length, i = 0; i < len; i++) {\n\t\t\tconst adjacent = adjacents[i];\n\t\t\tconst node = graph[adjacent];\n\n\t\t\tif (node.distance === -1) {\n\t\t\t\tnode.distance = graph[current].distance + 1;\n\t\t\t\tnode.parent = current;\n\t\t\t\tqueue.unshift(adjacent);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn graph;\n}\n\nfunction link(from, to) {\n\treturn function (args) {\n\t\treturn to(from(args));\n\t};\n}\n\nfunction wrapConversion(toModel, graph) {\n\tconst path = [graph[toModel].parent, toModel];\n\tlet fn = conversions[graph[toModel].parent][toModel];\n\n\tlet cur = graph[toModel].parent;\n\twhile (graph[cur].parent) {\n\t\tpath.unshift(graph[cur].parent);\n\t\tfn = link(conversions[graph[cur].parent][cur], fn);\n\t\tcur = graph[cur].parent;\n\t}\n\n\tfn.conversion = path;\n\treturn fn;\n}\n\nmodule.exports = function (fromModel) {\n\tconst graph = deriveBFS(fromModel);\n\tconst conversion = {};\n\n\tconst models = Object.keys(graph);\n\tfor (let len = models.length, i = 0; i < len; i++) {\n\t\tconst toModel = models[i];\n\t\tconst node = graph[toModel];\n\n\t\tif (node.parent === null) {\n\t\t\t// No possible conversion, or this node is the source model.\n\t\t\tcontinue;\n\t\t}\n\n\t\tconversion[toModel] = wrapConversion(toModel, graph);\n\t}\n\n\treturn conversion;\n};\n\n","const conversions = require('./conversions');\nconst route = require('./route');\n\nconst convert = {};\n\nconst models = Object.keys(conversions);\n\nfunction wrapRaw(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\treturn fn(args);\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nfunction wrapRounded(fn) {\n\tconst wrappedFn = function (...args) {\n\t\tconst arg0 = args[0];\n\n\t\tif (arg0 === undefined || arg0 === null) {\n\t\t\treturn arg0;\n\t\t}\n\n\t\tif (arg0.length > 1) {\n\t\t\targs = arg0;\n\t\t}\n\n\t\tconst result = fn(args);\n\n\t\t// We're assuming the result is an array here.\n\t\t// see notice in conversions.js; don't use box types\n\t\t// in conversion functions.\n\t\tif (typeof result === 'object') {\n\t\t\tfor (let len = result.length, i = 0; i < len; i++) {\n\t\t\t\tresult[i] = Math.round(result[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\t// Preserve .conversion property if there is one\n\tif ('conversion' in fn) {\n\t\twrappedFn.conversion = fn.conversion;\n\t}\n\n\treturn wrappedFn;\n}\n\nmodels.forEach(fromModel => {\n\tconvert[fromModel] = {};\n\n\tObject.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});\n\tObject.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});\n\n\tconst routes = route(fromModel);\n\tconst routeModels = Object.keys(routes);\n\n\trouteModels.forEach(toModel => {\n\t\tconst fn = routes[toModel];\n\n\t\tconvert[fromModel][toModel] = wrapRounded(fn);\n\t\tconvert[fromModel][toModel].raw = wrapRaw(fn);\n\t});\n});\n\nmodule.exports = convert;\n","'use strict';\n\nconst wrapAnsi16 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${code + offset}m`;\n};\n\nconst wrapAnsi256 = (fn, offset) => (...args) => {\n\tconst code = fn(...args);\n\treturn `\\u001B[${38 + offset};5;${code}m`;\n};\n\nconst wrapAnsi16m = (fn, offset) => (...args) => {\n\tconst rgb = fn(...args);\n\treturn `\\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;\n};\n\nconst ansi2ansi = n => n;\nconst rgb2rgb = (r, g, b) => [r, g, b];\n\nconst setLazyProperty = (object, property, get) => {\n\tObject.defineProperty(object, property, {\n\t\tget: () => {\n\t\t\tconst value = get();\n\n\t\t\tObject.defineProperty(object, property, {\n\t\t\t\tvalue,\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t});\n\n\t\t\treturn value;\n\t\t},\n\t\tenumerable: true,\n\t\tconfigurable: true\n\t});\n};\n\n/** @type {typeof import('color-convert')} */\nlet colorConvert;\nconst makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {\n\tif (colorConvert === undefined) {\n\t\tcolorConvert = require('color-convert');\n\t}\n\n\tconst offset = isBackground ? 10 : 0;\n\tconst styles = {};\n\n\tfor (const [sourceSpace, suite] of Object.entries(colorConvert)) {\n\t\tconst name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;\n\t\tif (sourceSpace === targetSpace) {\n\t\t\tstyles[name] = wrap(identity, offset);\n\t\t} else if (typeof suite === 'object') {\n\t\t\tstyles[name] = wrap(suite[targetSpace], offset);\n\t\t}\n\t}\n\n\treturn styles;\n};\n\nfunction assembleStyles() {\n\tconst codes = new Map();\n\tconst styles = {\n\t\tmodifier: {\n\t\t\treset: [0, 0],\n\t\t\t// 21 isn't widely supported and 22 does the same thing\n\t\t\tbold: [1, 22],\n\t\t\tdim: [2, 22],\n\t\t\titalic: [3, 23],\n\t\t\tunderline: [4, 24],\n\t\t\tinverse: [7, 27],\n\t\t\thidden: [8, 28],\n\t\t\tstrikethrough: [9, 29]\n\t\t},\n\t\tcolor: {\n\t\t\tblack: [30, 39],\n\t\t\tred: [31, 39],\n\t\t\tgreen: [32, 39],\n\t\t\tyellow: [33, 39],\n\t\t\tblue: [34, 39],\n\t\t\tmagenta: [35, 39],\n\t\t\tcyan: [36, 39],\n\t\t\twhite: [37, 39],\n\n\t\t\t// Bright color\n\t\t\tblackBright: [90, 39],\n\t\t\tredBright: [91, 39],\n\t\t\tgreenBright: [92, 39],\n\t\t\tyellowBright: [93, 39],\n\t\t\tblueBright: [94, 39],\n\t\t\tmagentaBright: [95, 39],\n\t\t\tcyanBright: [96, 39],\n\t\t\twhiteBright: [97, 39]\n\t\t},\n\t\tbgColor: {\n\t\t\tbgBlack: [40, 49],\n\t\t\tbgRed: [41, 49],\n\t\t\tbgGreen: [42, 49],\n\t\t\tbgYellow: [43, 49],\n\t\t\tbgBlue: [44, 49],\n\t\t\tbgMagenta: [45, 49],\n\t\t\tbgCyan: [46, 49],\n\t\t\tbgWhite: [47, 49],\n\n\t\t\t// Bright color\n\t\t\tbgBlackBright: [100, 49],\n\t\t\tbgRedBright: [101, 49],\n\t\t\tbgGreenBright: [102, 49],\n\t\t\tbgYellowBright: [103, 49],\n\t\t\tbgBlueBright: [104, 49],\n\t\t\tbgMagentaBright: [105, 49],\n\t\t\tbgCyanBright: [106, 49],\n\t\t\tbgWhiteBright: [107, 49]\n\t\t}\n\t};\n\n\t// Alias bright black as gray (and grey)\n\tstyles.color.gray = styles.color.blackBright;\n\tstyles.bgColor.bgGray = styles.bgColor.bgBlackBright;\n\tstyles.color.grey = styles.color.blackBright;\n\tstyles.bgColor.bgGrey = styles.bgColor.bgBlackBright;\n\n\tfor (const [groupName, group] of Object.entries(styles)) {\n\t\tfor (const [styleName, style] of Object.entries(group)) {\n\t\t\tstyles[styleName] = {\n\t\t\t\topen: `\\u001B[${style[0]}m`,\n\t\t\t\tclose: `\\u001B[${style[1]}m`\n\t\t\t};\n\n\t\t\tgroup[styleName] = styles[styleName];\n\n\t\t\tcodes.set(style[0], style[1]);\n\t\t}\n\n\t\tObject.defineProperty(styles, groupName, {\n\t\t\tvalue: group,\n\t\t\tenumerable: false\n\t\t});\n\t}\n\n\tObject.defineProperty(styles, 'codes', {\n\t\tvalue: codes,\n\t\tenumerable: false\n\t});\n\n\tstyles.color.close = '\\u001B[39m';\n\tstyles.bgColor.close = '\\u001B[49m';\n\n\tsetLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));\n\tsetLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));\n\tsetLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));\n\tsetLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));\n\n\treturn styles;\n}\n\n// Make the export immutable\nObject.defineProperty(module, 'exports', {\n\tenumerable: true,\n\tget: assembleStyles\n});\n","'use strict';\nmodule.exports = {\n\tstdout: false,\n\tstderr: false\n};\n","'use strict';\n\nconst stringReplaceAll = (string, substring, replacer) => {\n\tlet index = string.indexOf(substring);\n\tif (index === -1) {\n\t\treturn string;\n\t}\n\n\tconst substringLength = substring.length;\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\treturnValue += string.substr(endIndex, index - endIndex) + substring + replacer;\n\t\tendIndex = index + substringLength;\n\t\tindex = string.indexOf(substring, endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nconst stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {\n\tlet endIndex = 0;\n\tlet returnValue = '';\n\tdo {\n\t\tconst gotCR = string[index - 1] === '\\r';\n\t\treturnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\\r\\n' : '\\n') + postfix;\n\t\tendIndex = index + 1;\n\t\tindex = string.indexOf('\\n', endIndex);\n\t} while (index !== -1);\n\n\treturnValue += string.substr(endIndex);\n\treturn returnValue;\n};\n\nmodule.exports = {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n};\n","'use strict';\nconst TEMPLATE_REGEX = /(?:\\\\(u(?:[a-f\\d]{4}|\\{[a-f\\d]{1,6}\\})|x[a-f\\d]{2}|.))|(?:\\{(~)?(\\w+(?:\\([^)]*\\))?(?:\\.\\w+(?:\\([^)]*\\))?)*)(?:[ \\t]|(?=\\r?\\n)))|(\\})|((?:.|[\\r\\n\\f])+?)/gi;\nconst STYLE_REGEX = /(?:^|\\.)(\\w+)(?:\\(([^)]*)\\))?/g;\nconst STRING_REGEX = /^(['\"])((?:\\\\.|(?!\\1)[^\\\\])*)\\1$/;\nconst ESCAPE_REGEX = /\\\\(u(?:[a-f\\d]{4}|{[a-f\\d]{1,6}})|x[a-f\\d]{2}|.)|([^\\\\])/gi;\n\nconst ESCAPES = new Map([\n\t['n', '\\n'],\n\t['r', '\\r'],\n\t['t', '\\t'],\n\t['b', '\\b'],\n\t['f', '\\f'],\n\t['v', '\\v'],\n\t['0', '\\0'],\n\t['\\\\', '\\\\'],\n\t['e', '\\u001B'],\n\t['a', '\\u0007']\n]);\n\nfunction unescape(c) {\n\tconst u = c[0] === 'u';\n\tconst bracket = c[1] === '{';\n\n\tif ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {\n\t\treturn String.fromCharCode(parseInt(c.slice(1), 16));\n\t}\n\n\tif (u && bracket) {\n\t\treturn String.fromCodePoint(parseInt(c.slice(2, -1), 16));\n\t}\n\n\treturn ESCAPES.get(c) || c;\n}\n\nfunction parseArguments(name, arguments_) {\n\tconst results = [];\n\tconst chunks = arguments_.trim().split(/\\s*,\\s*/g);\n\tlet matches;\n\n\tfor (const chunk of chunks) {\n\t\tconst number = Number(chunk);\n\t\tif (!Number.isNaN(number)) {\n\t\t\tresults.push(number);\n\t\t} else if ((matches = chunk.match(STRING_REGEX))) {\n\t\t\tresults.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));\n\t\t} else {\n\t\t\tthrow new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction parseStyle(style) {\n\tSTYLE_REGEX.lastIndex = 0;\n\n\tconst results = [];\n\tlet matches;\n\n\twhile ((matches = STYLE_REGEX.exec(style)) !== null) {\n\t\tconst name = matches[1];\n\n\t\tif (matches[2]) {\n\t\t\tconst args = parseArguments(name, matches[2]);\n\t\t\tresults.push([name].concat(args));\n\t\t} else {\n\t\t\tresults.push([name]);\n\t\t}\n\t}\n\n\treturn results;\n}\n\nfunction buildStyle(chalk, styles) {\n\tconst enabled = {};\n\n\tfor (const layer of styles) {\n\t\tfor (const style of layer.styles) {\n\t\t\tenabled[style[0]] = layer.inverse ? null : style.slice(1);\n\t\t}\n\t}\n\n\tlet current = chalk;\n\tfor (const [styleName, styles] of Object.entries(enabled)) {\n\t\tif (!Array.isArray(styles)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!(styleName in current)) {\n\t\t\tthrow new Error(`Unknown Chalk style: ${styleName}`);\n\t\t}\n\n\t\tcurrent = styles.length > 0 ? current[styleName](...styles) : current[styleName];\n\t}\n\n\treturn current;\n}\n\nmodule.exports = (chalk, temporary) => {\n\tconst styles = [];\n\tconst chunks = [];\n\tlet chunk = [];\n\n\t// eslint-disable-next-line max-params\n\ttemporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {\n\t\tif (escapeCharacter) {\n\t\t\tchunk.push(unescape(escapeCharacter));\n\t\t} else if (style) {\n\t\t\tconst string = chunk.join('');\n\t\t\tchunk = [];\n\t\t\tchunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));\n\t\t\tstyles.push({inverse, styles: parseStyle(style)});\n\t\t} else if (close) {\n\t\t\tif (styles.length === 0) {\n\t\t\t\tthrow new Error('Found extraneous } in Chalk template literal');\n\t\t\t}\n\n\t\t\tchunks.push(buildStyle(chalk, styles)(chunk.join('')));\n\t\t\tchunk = [];\n\t\t\tstyles.pop();\n\t\t} else {\n\t\t\tchunk.push(character);\n\t\t}\n\t});\n\n\tchunks.push(chunk.join(''));\n\n\tif (styles.length > 0) {\n\t\tconst errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\\`}\\`)`;\n\t\tthrow new Error(errMessage);\n\t}\n\n\treturn chunks.join('');\n};\n","'use strict';\nconst ansiStyles = require('ansi-styles');\nconst {stdout: stdoutColor, stderr: stderrColor} = require('supports-color');\nconst {\n\tstringReplaceAll,\n\tstringEncaseCRLFWithFirstIndex\n} = require('./util');\n\nconst {isArray} = Array;\n\n// `supportsColor.level` → `ansiStyles.color[name]` mapping\nconst levelMapping = [\n\t'ansi',\n\t'ansi',\n\t'ansi256',\n\t'ansi16m'\n];\n\nconst styles = Object.create(null);\n\nconst applyOptions = (object, options = {}) => {\n\tif (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {\n\t\tthrow new Error('The `level` option should be an integer from 0 to 3');\n\t}\n\n\t// Detect level if not set manually\n\tconst colorLevel = stdoutColor ? stdoutColor.level : 0;\n\tobject.level = options.level === undefined ? colorLevel : options.level;\n};\n\nclass ChalkClass {\n\tconstructor(options) {\n\t\t// eslint-disable-next-line no-constructor-return\n\t\treturn chalkFactory(options);\n\t}\n}\n\nconst chalkFactory = options => {\n\tconst chalk = {};\n\tapplyOptions(chalk, options);\n\n\tchalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);\n\n\tObject.setPrototypeOf(chalk, Chalk.prototype);\n\tObject.setPrototypeOf(chalk.template, chalk);\n\n\tchalk.template.constructor = () => {\n\t\tthrow new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');\n\t};\n\n\tchalk.template.Instance = ChalkClass;\n\n\treturn chalk.template;\n};\n\nfunction Chalk(options) {\n\treturn chalkFactory(options);\n}\n\nfor (const [styleName, style] of Object.entries(ansiStyles)) {\n\tstyles[styleName] = {\n\t\tget() {\n\t\t\tconst builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);\n\t\t\tObject.defineProperty(this, styleName, {value: builder});\n\t\t\treturn builder;\n\t\t}\n\t};\n}\n\nstyles.visible = {\n\tget() {\n\t\tconst builder = createBuilder(this, this._styler, true);\n\t\tObject.defineProperty(this, 'visible', {value: builder});\n\t\treturn builder;\n\t}\n};\n\nconst usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];\n\nfor (const model of usedModels) {\n\tstyles[model] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nfor (const model of usedModels) {\n\tconst bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);\n\tstyles[bgModel] = {\n\t\tget() {\n\t\t\tconst {level} = this;\n\t\t\treturn function (...arguments_) {\n\t\t\t\tconst styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);\n\t\t\t\treturn createBuilder(this, styler, this._isEmpty);\n\t\t\t};\n\t\t}\n\t};\n}\n\nconst proto = Object.defineProperties(() => {}, {\n\t...styles,\n\tlevel: {\n\t\tenumerable: true,\n\t\tget() {\n\t\t\treturn this._generator.level;\n\t\t},\n\t\tset(level) {\n\t\t\tthis._generator.level = level;\n\t\t}\n\t}\n});\n\nconst createStyler = (open, close, parent) => {\n\tlet openAll;\n\tlet closeAll;\n\tif (parent === undefined) {\n\t\topenAll = open;\n\t\tcloseAll = close;\n\t} else {\n\t\topenAll = parent.openAll + open;\n\t\tcloseAll = close + parent.closeAll;\n\t}\n\n\treturn {\n\t\topen,\n\t\tclose,\n\t\topenAll,\n\t\tcloseAll,\n\t\tparent\n\t};\n};\n\nconst createBuilder = (self, _styler, _isEmpty) => {\n\tconst builder = (...arguments_) => {\n\t\tif (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {\n\t\t\t// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`\n\t\t\treturn applyStyle(builder, chalkTag(builder, ...arguments_));\n\t\t}\n\n\t\t// Single argument is hot path, implicit coercion is faster than anything\n\t\t// eslint-disable-next-line no-implicit-coercion\n\t\treturn applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));\n\t};\n\n\t// We alter the prototype because we must return a function, but there is\n\t// no way to create a function with a different prototype\n\tObject.setPrototypeOf(builder, proto);\n\n\tbuilder._generator = self;\n\tbuilder._styler = _styler;\n\tbuilder._isEmpty = _isEmpty;\n\n\treturn builder;\n};\n\nconst applyStyle = (self, string) => {\n\tif (self.level <= 0 || !string) {\n\t\treturn self._isEmpty ? '' : string;\n\t}\n\n\tlet styler = self._styler;\n\n\tif (styler === undefined) {\n\t\treturn string;\n\t}\n\n\tconst {openAll, closeAll} = styler;\n\tif (string.indexOf('\\u001B') !== -1) {\n\t\twhile (styler !== undefined) {\n\t\t\t// Replace any instances already present with a re-opening code\n\t\t\t// otherwise only the part of the string until said closing code\n\t\t\t// will be colored, and the rest will simply be 'plain'.\n\t\t\tstring = stringReplaceAll(string, styler.close, styler.open);\n\n\t\t\tstyler = styler.parent;\n\t\t}\n\t}\n\n\t// We can move both next actions out of loop, because remaining actions in loop won't have\n\t// any/visible effect on parts we add here. Close the styling before a linebreak and reopen\n\t// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92\n\tconst lfIndex = string.indexOf('\\n');\n\tif (lfIndex !== -1) {\n\t\tstring = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);\n\t}\n\n\treturn openAll + string + closeAll;\n};\n\nlet template;\nconst chalkTag = (chalk, ...strings) => {\n\tconst [firstString] = strings;\n\n\tif (!isArray(firstString) || !isArray(firstString.raw)) {\n\t\t// If chalk() was called by itself or with a string,\n\t\t// return the string itself as a string.\n\t\treturn strings.join(' ');\n\t}\n\n\tconst arguments_ = strings.slice(1);\n\tconst parts = [firstString.raw[0]];\n\n\tfor (let i = 1; i < firstString.length; i++) {\n\t\tparts.push(\n\t\t\tString(arguments_[i - 1]).replace(/[{}\\\\]/g, '\\\\$&'),\n\t\t\tString(firstString.raw[i])\n\t\t);\n\t}\n\n\tif (template === undefined) {\n\t\ttemplate = require('./templates');\n\t}\n\n\treturn template(chalk, parts.join(''));\n};\n\nObject.defineProperties(Chalk.prototype, styles);\n\nconst chalk = Chalk(); // eslint-disable-line new-cap\nchalk.supportsColor = stdoutColor;\nchalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap\nchalk.stderr.supportsColor = stderrColor;\n\nmodule.exports = chalk;\n","import _cloneDeep from \"lodash.clonedeep\";\nimport isNode from \"detect-node\";\nvar Gauge = /* @__PURE__ */ ((Gauge2) => {\n Gauge2[\"ACTIVE_REQUEST_GAUGE\"] = \"a\";\n Gauge2[\"AUTHENTICATION_COUNT_GAUGE\"] = \"b\";\n Gauge2[\"AUTHENTICATION_ERROR_COUNT_GAUGE\"] = \"aa\";\n Gauge2[\"AUTHENTICATION_RETRY_COUNT_GAUGE\"] = \"ab\";\n Gauge2[\"CONNECTION_POOL_IDLE_GAUGE\"] = \"c\";\n Gauge2[\"CONNECTION_POOL_TOTAL_GAUGE\"] = \"d\";\n Gauge2[\"CONNECTION_POOL_WAITING_GAUGE\"] = \"e\";\n Gauge2[\"CPU_LOAD_GAUGE\"] = \"f\";\n Gauge2[\"CPU_SYSTEM_LOAD_GAUGE\"] = \"g\";\n Gauge2[\"DURATION_GAUGE\"] = \"h\";\n Gauge2[\"DURATION_HISTOGRAM_GAUGE\"] = \"i\";\n Gauge2[\"ERROR_COUNT_GAUGE\"] = \"j\";\n Gauge2[\"LATENCY_GAUGE\"] = \"k\";\n Gauge2[\"LATENCY_HISTOGRAM_GAUGE\"] = \"l\";\n Gauge2[\"LOGGER\"] = \"m\";\n Gauge2[\"LOGGER_COPY\"] = \"n\";\n Gauge2[\"NETWORK_RX_GAUGE\"] = \"o\";\n Gauge2[\"NETWORK_TX_GAUGE\"] = \"p\";\n Gauge2[\"REQUEST_COUNT_GAUGE\"] = \"q\";\n Gauge2[\"RETRY_COUNT_GAUGE\"] = \"r\";\n Gauge2[\"TIMER_GAUGE\"] = \"s\";\n Gauge2[\"VELOCITY_GAUGE\"] = \"t\";\n Gauge2[\"CONNECTION_COUNT_GAUGE\"] = \"u\";\n Gauge2[\"OBJECT_GAUGE\"] = \"v\";\n Gauge2[\"PAYLOAD_SIZE\"] = \"w\";\n Gauge2[\"CORE_COUNT_GAUGE\"] = \"x\";\n Gauge2[\"CHILD_COUNT\"] = \"y\";\n Gauge2[\"UNKNOWN\"] = \"z\";\n return Gauge2;\n})(Gauge || {});\nvar GaugeTypes = /* @__PURE__ */ ((GaugeTypes2) => {\n GaugeTypes2[\"GAUGE_TYPE\"] = \"_\";\n GaugeTypes2[\"INSTRUMENT_GAUGE\"] = \"a\";\n GaugeTypes2[\"INSTRUMENT_VELOCITY\"] = \"b\";\n GaugeTypes2[\"INSTRUMENT_HISTOGRAM\"] = \"c\";\n GaugeTypes2[\"INSTRUMENT_LOG\"] = \"d\";\n GaugeTypes2[\"INSTRUMENT_TIMER\"] = \"e\";\n GaugeTypes2[\"INSTRUMENT_OBJECT\"] = \"f\";\n return GaugeTypes2;\n})(GaugeTypes || {});\nclass InstrumentBaseOptions {\n fixedSize;\n padLength;\n label;\n}\nclass InstrumentBaseTelemetry {\n}\nclass InstrumentBase {\n #label = \"\";\n #options = null;\n #data = {};\n // Use for copy objects only.\n //protected _data: Record<string, any> = { };\n constructor(options = {}) {\n if (typeof options === \"string\" || options instanceof String) {\n throw new Error(\"Instrument parameter must be an options object.\");\n }\n this.#options = options;\n if (options.label) {\n this.#label = options.label;\n } else {\n this.#label = \"InstrumentGauge\";\n }\n }\n [GaugeTypes.GAUGE_TYPE] = GaugeTypes.INSTRUMENT_OBJECT;\n // Default Gauge type\n val;\n WithLabel(label) {\n this.label = label;\n return this;\n }\n DefineCopyProperties(propertyNames) {\n propertyNames.forEach((propertyName) => {\n Object.defineProperty(this, propertyName, {\n enumerable: true,\n get: () => this.#data[propertyName],\n set: (value) => {\n if (value === void 0) {\n return;\n }\n this.#data[propertyName] = value;\n }\n });\n });\n }\n GetNumber(val) {\n if (Number.isInteger(val)) {\n return val;\n } else {\n return Math.round((val + Number.EPSILON) * 100) / 100;\n }\n }\n get options() {\n return this.#options;\n }\n set options(optionsValue) {\n this.#options = optionsValue;\n }\n get label() {\n return this.#label;\n }\n set label(labelValue) {\n this.#label = labelValue;\n }\n StopTimer() {\n }\n ProcessTelemetry(telemetry) {\n throw new Error(`Must override in extended class: [ProcessTelemetry]: [${telemetry}].`);\n }\n /*\n toJSON()\n {\n \treturn this._serialValue;\n }\n */\n /*\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n [Symbol.iterator]() {\n \t// Use a new index for each iterator. This makes multiple\n \t// iterations over the iterable safe for non-trivial cases,\n \t// such as use of break or nested looping over the same iterable.\n \tlet index = 0;\n \n \treturn {\n \t\tnext: () => {\n \t\t\tif (index < 1) {\n \t\t\t\treturn {value: this.GetFormatted(), done: false}\n \t\t\t} else {\n \t\t\t\treturn {done: true}\n \t\t\t}\n \t\t}\n \t}\n }\n */\n}\nclass InstrumentVelocityOptions extends InstrumentBaseOptions {\n interval;\n valStackMaxLength;\n maxAverageValStack;\n maxAverageIterations;\n fromJSON;\n initValue;\n autoComputeVelocity;\n velocityTimeDiff;\n vaTimeDiff;\n autoComputeVelocityTimeout;\n}\nclass InstrumentVelocityTelemetry extends InstrumentBaseTelemetry {\n val;\n Inc;\n}\nclass InstrumentVelocity extends InstrumentBase {\n // eslint-disable-next-line @/no-unused-private-class-members\n #val = 0;\n #interval = null;\n #timeoutComputeVelocity = null;\n // eslint-disable-next-line @/no-unused-private-class-members\n #lastVelocity = 0;\n #delta = 0;\n #maxVelocity = 0;\n #timerInterval = 0;\n #copy = false;\n #velocity = 0;\n #velocityVal = 0;\n #valStack = [];\n #averageValStack = [];\n #maxAverageValStack = 0;\n #maxAverageIterations = 0;\n // eslint-disable-next-line @/no-unused-private-class-members\n #valStackMaxLength = 0;\n #valStackAverage = 0;\n #timeStamp = 0;\n #maxTimeDiff = 0;\n #vaTimeDiff = 0;\n #velocityTimeDiff = 0;\n #autoComputeVelocity = false;\n #autoComputeVelocityTimeout = 0;\n // 50ms to auto computer after an update when not in auto compute mode.\n #countDiff = 0;\n #timeDiff = 0;\n #deltaCountDiff = 0;\n #deltaTimeDif = 0;\n #minTimeForReporting = 0;\n #averageVelocity = [];\n // timeWindow = Number of intervals to use as the sliding time window same size. Uses average value within the time window. Larger window produces a smooth (more laggy) curve. Shorter time\n // window may be \"spikey\" depending on the volatility of the data being recorded.\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentVelocity\";\n } else {\n this.label = options.label;\n }\n if (typeof options.interval === \"undefined\") {\n this.#timerInterval = 1e3;\n } else {\n this.#timerInterval = options.interval;\n }\n if (typeof options.valStackMaxLength === \"undefined\") {\n this.#valStackMaxLength = 100;\n } else {\n this.#valStackMaxLength = options.valStackMaxLength;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n if (typeof options.autoComputeVelocity === \"undefined\") {\n this.#autoComputeVelocity = false;\n } else {\n this.#autoComputeVelocity = options.autoComputeVelocity;\n }\n if (typeof options.maxAverageValStack === \"undefined\") {\n this.#maxAverageValStack = 5;\n } else {\n this.#maxAverageValStack = options.maxAverageValStack;\n }\n if (typeof options.maxAverageIterations === \"undefined\") {\n this.#maxAverageIterations = 3;\n } else {\n this.#maxAverageIterations = options.maxAverageIterations;\n }\n if (typeof options.velocityTimeDiff === \"undefined\") {\n this.#velocityTimeDiff = 5e3;\n } else {\n this.#velocityTimeDiff = options.velocityTimeDiff;\n }\n if (typeof options.vaTimeDiff === \"undefined\") {\n this.#vaTimeDiff = 1e4;\n } else {\n this.#vaTimeDiff = options.vaTimeDiff;\n }\n if (typeof options.autoComputeVelocityTimeout === \"undefined\") {\n this.#autoComputeVelocityTimeout = 50;\n } else {\n this.#autoComputeVelocityTimeout = options.autoComputeVelocityTimeout;\n }\n this.#maxTimeDiff = this.#vaTimeDiff * 2;\n this.#minTimeForReporting = this.#vaTimeDiff + 2e3;\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_VELOCITY\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\",\n \"maxVelocity\",\n \"delta\",\n \"velocity\",\n \"va\",\n \"timeStamp\",\n \"deltaTimeDif\",\n \"deltaCountDiff\",\n \"timeDiff\",\n \"countDiff\",\n \"averageVelocity\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n Object.defineProperty(this, \"maxVelocity\", {\n enumerable: true,\n get: () => this.#GetMaxVelocity()\n });\n Object.defineProperty(this, \"delta\", {\n enumerable: true,\n get: () => this.#GetDelta()\n });\n Object.defineProperty(this, \"velocity\", {\n enumerable: true,\n get: () => this.#GetVelocity()\n });\n Object.defineProperty(this, \"va\", {\n enumerable: true,\n get: () => this.#GetVelocityStackAverage()\n });\n Object.defineProperty(this, \"timeStamp\", {\n enumerable: true,\n get: () => this.#GetTimeStamp()\n });\n Object.defineProperty(this, \"countDiff\", {\n enumerable: true,\n get: () => this.#GetCountDiff()\n });\n Object.defineProperty(this, \"timeDiff\", {\n enumerable: true,\n get: () => this.#GetTimeDiff()\n });\n Object.defineProperty(this, \"deltaCountDiff\", {\n enumerable: true,\n get: () => this.#GetDeltaCountDiff()\n });\n Object.defineProperty(this, \"deltaTimeDif\", {\n enumerable: true,\n get: () => this.#GetDeltaTimeDif()\n });\n Object.defineProperty(this, \"averageVelocity\", {\n enumerable: true,\n get: () => this.#GetAverageVelocity()\n });\n if (this.#timerInterval > 0 && this.#autoComputeVelocity === false) {\n this._StartTimer();\n }\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n this.velocity = result.velocity;\n this.maxVelocity = result.maxVelocity;\n this.delta = result.delta;\n this.va = result.va;\n this.timeStamp = result.timeStamp;\n this.countDiff = result.countDiff;\n this.timeDiff = result.timeDiff;\n this.deltaCountDiff = result.deltaCountDiff;\n this.deltaTimeDif = result.deltaTimeDif;\n this.averageVelocity = _cloneDeep(result.averageVelocity);\n }\n }\n maxVelocity = 0;\n delta = 0;\n velocity = 0;\n va = 0;\n timeStamp = 0;\n countDiff = 0;\n timeDiff = 0;\n deltaCountDiff = 0;\n deltaTimeDif = 0;\n averageVelocity = [];\n val = 0;\n WithValStackMaxLength(valStackMaxLength) {\n this.#valStackMaxLength = valStackMaxLength;\n this.#valStack = [];\n return this;\n }\n _StartTimer() {\n this.#interval = setInterval(() => {\n this.#ComputeVelocity();\n let pushVal = this.#velocity;\n for (let i = 0; i < this.#maxAverageIterations; i++) {\n if (!this.#averageValStack[i]) {\n this.#averageValStack[i] = [];\n }\n this.#averageValStack[i].push(pushVal);\n if (this.#averageValStack[i].length > this.#maxAverageValStack) {\n this.#averageValStack[i].shift();\n }\n pushVal = this.#averageValStack[i].reduce((prev, current) => prev + current) / this.#averageValStack[i].length;\n this.#averageVelocity[i] = pushVal;\n }\n }, this.#timerInterval);\n if (isNode) {\n this.#interval.unref();\n }\n }\n #ComputeVelocityByTimeDiff(checkTimeDiff, checkDeltaTimeDiff) {\n let val = 0;\n let deltaVal = 0;\n let countDiff = 0;\n let timeDiff = 0;\n let deltaCountDiff = 0;\n let deltaTimeDiff = 0;\n if (this.#valStack.length > 1 && this.#valStack[this.#valStack.length - 1].timeStamp - this.#valStack[0].timeStamp > this.#minTimeForReporting) {\n const dp = this.#valStack[this.#valStack.length - 1];\n let timeDiffPos = -1;\n let deltaDiffPos = -1;\n for (let i = this.#valStack.length - 2; i > -1; i--) {\n if (timeDiffPos === -1 && this.#timeStamp - this.#valStack[i].timeStamp >= checkTimeDiff) {\n timeDiffPos = i;\n if (checkDeltaTimeDiff === 0) {\n break;\n }\n }\n if (deltaDiffPos === -1 && this.#timeStamp - this.#valStack[i].timeStamp >= checkDeltaTimeDiff) {\n deltaDiffPos = i;\n }\n if (timeDiffPos !== -1 && deltaDiffPos !== -1) {\n break;\n }\n }\n if (timeDiffPos > -1) {\n countDiff = dp.count - this.#valStack[timeDiffPos].count;\n if (countDiff > 0) {\n timeDiff = dp.timeStamp - this.#valStack[timeDiffPos].timeStamp;\n if (timeDiff > 0) {\n val = 1e3 / timeDiff * countDiff;\n } else {\n val = 0;\n }\n } else {\n val = 0;\n }\n } else {\n val = 0;\n }\n if (deltaDiffPos > -1) {\n deltaCountDiff = this.#valStack[timeDiffPos].count - this.#valStack[deltaDiffPos].count;\n if (deltaCountDiff > 0) {\n deltaTimeDiff = this.#valStack[timeDiffPos].timeStamp - this.#valStack[deltaDiffPos].timeStamp;\n if (deltaTimeDiff > 0) {\n deltaVal = 1e3 / deltaTimeDiff * deltaTimeDiff;\n } else {\n deltaVal = 0;\n }\n } else {\n deltaVal = 0;\n }\n } else {\n deltaVal = 0;\n }\n }\n return {\n val,\n countDiff,\n timeDiff,\n deltaVal,\n deltaCountDiff,\n deltaTimeDiff\n };\n }\n #ComputeVelocity() {\n const dp = {\n timeStamp: performance.now(),\n count: this.#velocityVal\n };\n this.#valStack.push(dp);\n this.#timeStamp = dp.timeStamp;\n while (this.#valStack.length > 0 && this.#timeStamp - this.#valStack[0].timeStamp > this.#maxTimeDiff) {\n this.#valStack.shift();\n }\n const valStackAverageDataPoint = this.#ComputeVelocityByTimeDiff(this.#vaTimeDiff, 0);\n this.#valStackAverage = valStackAverageDataPoint.val;\n const velocityDataPoint = this.#ComputeVelocityByTimeDiff(this.#velocityTimeDiff, this.#velocityTimeDiff * 2);\n this.#velocity = velocityDataPoint.val;\n this.#delta = velocityDataPoint.val - velocityDataPoint.deltaVal;\n this.#countDiff = velocityDataPoint.countDiff;\n this.#timeDiff = velocityDataPoint.timeDiff;\n this.#deltaCountDiff = velocityDataPoint.deltaCountDiff;\n this.#deltaTimeDif = velocityDataPoint.deltaTimeDiff;\n this.#lastVelocity = this.#velocity;\n if (this.#velocity > this.#maxVelocity) {\n this.#maxVelocity = this.#velocity;\n }\n }\n #SetupAutoComputeVelocity() {\n if (this.#timeoutComputeVelocity) {\n clearTimeout(this.#timeoutComputeVelocity);\n }\n this.#timeoutComputeVelocity = setTimeout(() => {\n this.#ComputeVelocity();\n }, this.#autoComputeVelocityTimeout);\n }\n #GetVelocityStackAverage() {\n return this.GetNumber(this.#valStackAverage);\n }\n Inc(incVal = 1) {\n this.#velocityVal += incVal;\n if (this.#autoComputeVelocity) {\n this.#ComputeVelocity();\n } else {\n this.#SetupAutoComputeVelocity();\n }\n }\n #GetVal() {\n return this.GetNumber(this.#velocityVal);\n }\n #SetVal(updatedValue) {\n this.#velocityVal = updatedValue;\n if (this.#autoComputeVelocity) {\n this.#ComputeVelocity();\n } else {\n this.#SetupAutoComputeVelocity();\n }\n }\n #GetVelocity() {\n return this.GetNumber(this.#velocity);\n }\n #GetMaxVelocity() {\n return this.GetNumber(this.#maxVelocity);\n }\n #GetDelta() {\n return this.GetNumber(this.#delta);\n }\n #GetTimeStamp() {\n return this.GetNumber(this.#timeStamp);\n }\n #GetCountDiff() {\n return this.GetNumber(this.#countDiff);\n }\n #GetTimeDiff() {\n return this.GetNumber(this.#timeDiff);\n }\n #GetDeltaCountDiff() {\n return this.GetNumber(this.#deltaCountDiff);\n }\n #GetDeltaTimeDif() {\n return this.GetNumber(this.#deltaTimeDif);\n }\n #GetAverageVelocity() {\n return this.#averageVelocity;\n }\n StopTimer() {\n if (this.#interval !== null) {\n clearTimeout(this.#interval);\n this.#interval = null;\n }\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.Inc !== void 0) {\n this.Inc(telemetry.Inc);\n }\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nvar HistogramDataElementPos = /* @__PURE__ */ ((HistogramDataElementPos2) => {\n HistogramDataElementPos2[HistogramDataElementPos2[\"val\"] = 0] = \"val\";\n HistogramDataElementPos2[HistogramDataElementPos2[\"label\"] = 1] = \"label\";\n HistogramDataElementPos2[HistogramDataElementPos2[\"breakPoint\"] = 2] = \"breakPoint\";\n return HistogramDataElementPos2;\n})(HistogramDataElementPos || {});\nclass InstrumentHistogramOptions extends InstrumentBaseOptions {\n histogramData;\n initValue;\n fromJSON;\n}\nclass InstrumentHistogramTelemetry extends InstrumentBaseTelemetry {\n val;\n}\nclass InstrumentHistogram extends InstrumentBase {\n #histogramData = [];\n #val = 0;\n #copy = false;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentHistogram\";\n } else {\n this.label = options.label;\n }\n let histogramData = null;\n if (typeof options.histogramData === \"undefined\") {\n histogramData = null;\n } else {\n histogramData = options.histogramData;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n if (histogramData === null) {\n this.#histogramData = [\n [0, \"10\", 10],\n [0, \"20\", 20],\n [0, \"50\", 50],\n [0, \"100\", 100],\n [0, \"1000\", 1e3],\n [0, \"5000\", 5e3],\n [0, \"EE\", 0]\n ];\n } else if (Array.isArray(histogramData)) {\n this.#histogramData = [];\n for (let i = 0; i < histogramData.length; i++) {\n this.#histogramData.push([0, \"\" + histogramData[i], parseFloat(histogramData[i].toString())]);\n }\n this.#histogramData.push([0, \"EE\", 0]);\n } else {\n throw new Error(`Passed [${histogramData}] must be an array.`);\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_HISTOGRAM\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\",\n \"hist\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n Object.defineProperty(this, \"hist\", {\n enumerable: true,\n get: () => this.#GetHistogramData(),\n set: (value) => {\n this.#SetHistogramData(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.#val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.#val = result.val;\n this.hist = result.hist;\n }\n }\n hist = [];\n val = 0;\n WithInitVal(initVal) {\n this.#val = initVal;\n return this;\n }\n ResetHistogramData() {\n for (let i = 0; i < this.hist.length; i++) {\n this.hist[i][0] = 0;\n }\n }\n AddObservation(updateValue) {\n if (this.#copy) {\n throw new Error(\"Cannot add observations from the copy version of this class.\");\n }\n let i = 0;\n for (; i < this.#histogramData.length - 1; i++) {\n if (updateValue <= this.#histogramData[i][\n 2\n /* breakPoint */\n ]) {\n this.#histogramData[i][\n 0\n /* val */\n ]++;\n return;\n }\n }\n this.#histogramData[i][\n 0\n /* val */\n ]++;\n }\n #GetVal() {\n return this.GetNumber(this.#val);\n }\n #SetVal(value) {\n this.#val = value;\n this.AddObservation(value);\n }\n get formattedHistogramData() {\n let retVal = \"\";\n let sep = \"\";\n for (let i = 0; i < this.hist.length; i++) {\n retVal += sep + \"[\" + (this.hist[i][\n 0\n /* val */\n ] + \"/\" + this.hist[i][\n 1\n /* label */\n ]).padStart(10, \" \") + \"]\";\n sep = \" \";\n }\n return retVal;\n }\n #GetHistogramData() {\n return this.#histogramData;\n }\n #SetHistogramData(value) {\n this.#histogramData = value;\n }\n static AddHistogramDataEx(histoA, histoB) {\n if (histoA === null) {\n return _cloneDeep(histoB);\n }\n const result = _cloneDeep(histoA);\n const histogramAData = result.hist;\n const histogramBData = histoB.hist;\n if (histogramAData.length !== histogramBData.length) {\n throw new Error(\"Invalid HistogramData. HistogramData bucket lengths must be the same.\");\n }\n for (let i = 0; i < histogramAData.length; i++) {\n if (histogramAData[i][\n 2\n /* breakPoint */\n ] !== histogramBData[i][\n 2\n /* breakPoint */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket break-point at index [${i}] must be the same.`);\n }\n if (histogramAData[i][\n 1\n /* label */\n ] !== histogramBData[i][\n 1\n /* label */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket label at index [${i}] must be the same.`);\n }\n histogramAData[i][\n 0\n /* val */\n ] += histogramBData[i][\n 0\n /* val */\n ];\n }\n return result;\n }\n /**\n * Adds a value object (from GetFormatted()) to this instance.\n * @param {*} value \n */\n AddHistogramData(histogramData) {\n if (histogramData === null) {\n return;\n }\n if (this.hist.length !== histogramData.hist.length) {\n throw new Error(\"Invalid HistogramData. HistogramData bucket lengths must be the same.\");\n }\n for (let i = 0; i < histogramData.hist.length; i++) {\n if (this.hist[i][\n 2\n /* breakPoint */\n ] !== histogramData.hist[i][\n 2\n /* breakPoint */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket break-point at index [${i}] must be the same.`);\n }\n if (this.hist[i][\n 1\n /* label */\n ] !== histogramData.hist[i][\n 1\n /* label */\n ]) {\n throw new Error(`Invalid HistogramData. HistogramData bucket label at index [${i}] must be the same.`);\n }\n this.hist[i][\n 0\n /* val */\n ] += histogramData.hist[i][\n 0\n /* val */\n ];\n }\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nclass InstrumentLogOptions extends InstrumentBaseOptions {\n maxSize;\n useLatestMessages;\n consoleLogging;\n instrumentLogging;\n winstonLogging;\n fromJSON;\n initValue;\n logger;\n}\nclass InstrumentLogTelemetry extends InstrumentBaseTelemetry {\n Append;\n LogMessage;\n val;\n ResetLog;\n}\nclass InstrumentLog extends InstrumentBase {\n #messages = [];\n #readPos = 0;\n #maxSize = 200;\n // Max length of cached log messages\n #copy = false;\n #useLatestMessages = false;\n #consoleLogging = false;\n #instrumentLogging = true;\n #winstonLogging = false;\n #stsLogger;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentLog\";\n } else {\n this.label = options.label;\n }\n if (typeof options.maxSize === \"undefined\") {\n this.#maxSize = 200;\n } else {\n this.#maxSize = options.maxSize;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n if (typeof options.useLatestMessages === \"undefined\") {\n this.#useLatestMessages = false;\n } else {\n this.#useLatestMessages = options.useLatestMessages;\n }\n if (typeof options.consoleLogging === \"undefined\") {\n this.#consoleLogging = false;\n } else {\n this.#consoleLogging = options.consoleLogging;\n }\n if (typeof options.instrumentLogging === \"undefined\") {\n this.#instrumentLogging = true;\n } else {\n this.#instrumentLogging = options.instrumentLogging;\n }\n if (typeof options.winstonLogging === \"undefined\") {\n this.#winstonLogging = false;\n } else {\n this.#winstonLogging = options.winstonLogging;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_LOG\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => _cloneDeep(this.#GetVal()),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n }\n val = [];\n WithMaxSize(maxSize) {\n this.#maxSize = maxSize;\n return this;\n }\n WithUseLatestMessages(useLatestMessages) {\n this.#useLatestMessages = useLatestMessages;\n return this;\n }\n WithConsoleLogging(consoleLogging) {\n this.#consoleLogging = consoleLogging;\n return this;\n }\n WithInstrumentLogging(instrumentLogging) {\n this.#instrumentLogging = instrumentLogging;\n return this;\n }\n get MaxSize() {\n return this.#maxSize;\n }\n set MaxSize(maxSize) {\n this.#maxSize = maxSize;\n }\n #DumpToConsole() {\n const logReport = this.GetMessagesSinceLastRead();\n for (let i = 0; i < logReport.length; i++) {\n console.log(logReport[i]);\n }\n }\n get consoleLogging() {\n return this.#consoleLogging;\n }\n set consoleLogging(value) {\n this.#consoleLogging = value;\n if (value === true) {\n this.#DumpToConsole();\n }\n }\n get instrumentLogging() {\n return this.#instrumentLogging;\n }\n set instrumentLogging(value) {\n this.#instrumentLogging = value;\n }\n Append(messageArray) {\n for (let i = 0; i < messageArray.length; i++) {\n this.LogMessage(messageArray[i]);\n }\n }\n error(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.error(message);\n }\n warn(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.warn(message);\n }\n info(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.info(message);\n }\n http(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.http(message);\n }\n verbose(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.verbose(message);\n }\n debug(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.debug(message);\n }\n silly(message) {\n if (this.#winstonLogging && this.#stsLogger) this.#stsLogger.silly(message);\n }\n LogMessage(message) {\n if (this.#copy) {\n throw new Error(\"Cannot add log messages from the copy version of this class.\");\n }\n if (this.#consoleLogging === true) {\n console.log(message);\n }\n if (this.#instrumentLogging === false) {\n return;\n }\n this.#messages.push(message);\n if (this.#messages.length > this.#maxSize) {\n this.#messages.shift();\n this.#readPos = this.#readPos > 0 ? this.#readPos - 1 : 0;\n }\n }\n #GetVal() {\n if (this.#useLatestMessages) {\n return this.GetMessagesSinceLastRead();\n } else {\n return this.#messages;\n }\n }\n #SetVal(updatedValue) {\n this.#messages = updatedValue;\n this.#readPos = 0;\n }\n GetMessagesNoUpdate() {\n return this.#messages.slice(this.#readPos);\n }\n // This will return only those messages that have been added since the last read\n GetMessagesSinceLastRead() {\n const retVal = this.#messages.slice(this.#readPos);\n this.#readPos = this.#messages.length;\n return retVal;\n }\n ResetLog() {\n this.#messages = [];\n this.#readPos = 0;\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n if (telemetry.Append !== void 0) {\n this.Append(telemetry.Append);\n }\n if (telemetry.LogMessage !== void 0) {\n this.LogMessage(telemetry.LogMessage);\n }\n if (telemetry.ResetLog !== void 0 && telemetry.ResetLog === true) {\n this.ResetLog();\n }\n }\n}\nclass InstrumentTimerOptions extends InstrumentBaseOptions {\n fromJSON;\n initValue;\n}\nclass InstrumentTimerTelemetry extends InstrumentBaseTelemetry {\n val;\n Pause;\n Resume;\n Reset;\n}\nclass InstrumentTimerGauge extends InstrumentBase {\n #start = 0;\n #copy = false;\n #pauseVal = 0;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentTimerGauge\";\n } else {\n this.label = options.label;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_TIMER\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n this.Reset();\n }\n val = 0;\n // Take a snap shot of the current elapsed time. The 'clock' will still keep running.\n Pause() {\n this.#pauseVal = this.val;\n }\n Resume() {\n this.#pauseVal = 0;\n }\n Reset() {\n this.#start = performance.now();\n }\n #GetVal() {\n if (this.#pauseVal !== 0) {\n return this.GetNumber(this.#pauseVal);\n }\n return this.GetNumber(performance.now() - this.#start);\n }\n #SetVal(updatedValue) {\n this.#start = performance.now() - updatedValue;\n }\n get start() {\n return this.#start;\n }\n /*\n #convertMS(ms: number): string {\n //let d, h, m, s;\n let s = Math.floor(ms / 1000);\n let m = Math.floor(s / 60);\n s = s % 60;\n let h = Math.floor(m / 60);\n m = m % 60;\n const d = Math.floor(h / 24);\n h = h % 24;\n \n const pad: (n: number) => string = function(n: number) { return n < 10 ? '0' + n : n.toString(); };\n \n return (d + '.' + pad(h) + ':' + pad(m) + ':' + pad(s)).padStart(12);\n }\n */\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n if (telemetry.Pause !== void 0 && telemetry.Pause === true) {\n this.Pause();\n }\n if (telemetry.Resume !== void 0 && telemetry.Resume === true) {\n this.Resume();\n }\n if (telemetry.Reset !== void 0 && telemetry.Reset === true) {\n this.Reset();\n }\n }\n}\nfunction getDefaultExportFromCjs(x) {\n return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, \"default\") ? x[\"default\"] : x;\n}\nvar timsort$1 = {};\nvar hasRequiredTimsort$1;\nfunction requireTimsort$1() {\n if (hasRequiredTimsort$1) return timsort$1;\n hasRequiredTimsort$1 = 1;\n (function(exports) {\n (function(global, factory) {\n {\n factory(exports);\n }\n })(timsort$1, function(exports2) {\n exports2.__esModule = true;\n exports2.sort = sort;\n function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n }\n var DEFAULT_MIN_MERGE = 32;\n var DEFAULT_MIN_GALLOPING = 7;\n var DEFAULT_TMP_STORAGE_LENGTH = 256;\n var POWERS_OF_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9];\n function log10(x) {\n if (x < 1e5) {\n if (x < 100) {\n return x < 10 ? 0 : 1;\n }\n if (x < 1e4) {\n return x < 1e3 ? 2 : 3;\n }\n return 4;\n }\n if (x < 1e7) {\n return x < 1e6 ? 5 : 6;\n }\n if (x < 1e9) {\n return x < 1e8 ? 7 : 8;\n }\n return 9;\n }\n function alphabeticalCompare(a, b) {\n if (a === b) {\n return 0;\n }\n if (~~a === a && ~~b === b) {\n if (a === 0 || b === 0) {\n return a < b ? -1 : 1;\n }\n if (a < 0 || b < 0) {\n if (b >= 0) {\n return -1;\n }\n if (a >= 0) {\n return 1;\n }\n a = -a;\n b = -b;\n }\n var al = log10(a);\n var bl = log10(b);\n var t = 0;\n if (al < bl) {\n a *= POWERS_OF_TEN[bl - al - 1];\n b /= 10;\n t = -1;\n } else if (al > bl) {\n b *= POWERS_OF_TEN[al - bl - 1];\n a /= 10;\n t = 1;\n }\n if (a === b) {\n return t;\n }\n return a < b ? -1 : 1;\n }\n var aStr = String(a);\n var bStr = String(b);\n if (aStr === bStr) {\n return 0;\n }\n return aStr < bStr ? -1 : 1;\n }\n function minRunLength(n) {\n var r = 0;\n while (n >= DEFAULT_MIN_MERGE) {\n r |= n & 1;\n n >>= 1;\n }\n return n + r;\n }\n function makeAscendingRun(array, lo, hi, compare) {\n var runHi = lo + 1;\n if (runHi === hi) {\n return 1;\n }\n if (compare(array[runHi++], array[lo]) < 0) {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) < 0) {\n runHi++;\n }\n reverseRun(array, lo, runHi);\n } else {\n while (runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0) {\n runHi++;\n }\n }\n return runHi - lo;\n }\n function reverseRun(array, lo, hi) {\n hi--;\n while (lo < hi) {\n var t = array[lo];\n array[lo++] = array[hi];\n array[hi--] = t;\n }\n }\n function binaryInsertionSort(array, lo, hi, start, compare) {\n if (start === lo) {\n start++;\n }\n for (; start < hi; start++) {\n var pivot = array[start];\n var left = lo;\n var right = start;\n while (left < right) {\n var mid = left + right >>> 1;\n if (compare(pivot, array[mid]) < 0) {\n right = mid;\n } else {\n left = mid + 1;\n }\n }\n var n = start - left;\n switch (n) {\n case 3:\n array[left + 3] = array[left + 2];\n case 2:\n array[left + 2] = array[left + 1];\n case 1:\n array[left + 1] = array[left];\n break;\n default:\n while (n > 0) {\n array[left + n] = array[left + n - 1];\n n--;\n }\n }\n array[left] = pivot;\n }\n }\n function gallopLeft(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) > 0) {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) > 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n } else {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) <= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) > 0) {\n lastOffset = m + 1;\n } else {\n offset = m;\n }\n }\n return offset;\n }\n function gallopRight(value, array, start, length, hint, compare) {\n var lastOffset = 0;\n var maxOffset = 0;\n var offset = 1;\n if (compare(value, array[start + hint]) < 0) {\n maxOffset = hint + 1;\n while (offset < maxOffset && compare(value, array[start + hint - offset]) < 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n var tmp = lastOffset;\n lastOffset = hint - offset;\n offset = hint - tmp;\n } else {\n maxOffset = length - hint;\n while (offset < maxOffset && compare(value, array[start + hint + offset]) >= 0) {\n lastOffset = offset;\n offset = (offset << 1) + 1;\n if (offset <= 0) {\n offset = maxOffset;\n }\n }\n if (offset > maxOffset) {\n offset = maxOffset;\n }\n lastOffset += hint;\n offset += hint;\n }\n lastOffset++;\n while (lastOffset < offset) {\n var m = lastOffset + (offset - lastOffset >>> 1);\n if (compare(value, array[start + m]) < 0) {\n offset = m;\n } else {\n lastOffset = m + 1;\n }\n }\n return offset;\n }\n var TimSort = (function() {\n function TimSort2(array, compare) {\n _classCallCheck(this, TimSort2);\n this.array = null;\n this.compare = null;\n this.minGallop = DEFAULT_MIN_GALLOPING;\n this.length = 0;\n this.tmpStorageLength = DEFAULT_TMP_STORAGE_LENGTH;\n this.stackLength = 0;\n this.runStart = null;\n this.runLength = null;\n this.stackSize = 0;\n this.array = array;\n this.compare = compare;\n this.length = array.length;\n if (this.length < 2 * DEFAULT_TMP_STORAGE_LENGTH) {\n this.tmpStorageLength = this.length >>> 1;\n }\n this.tmp = new Array(this.tmpStorageLength);\n this.stackLength = this.length < 120 ? 5 : this.length < 1542 ? 10 : this.length < 119151 ? 19 : 40;\n this.runStart = new Array(this.stackLength);\n this.runLength = new Array(this.stackLength);\n }\n TimSort2.prototype.pushRun = function pushRun(runStart, runLength) {\n this.runStart[this.stackSize] = runStart;\n this.runLength[this.stackSize] = runLength;\n this.stackSize += 1;\n };\n TimSort2.prototype.mergeRuns = function mergeRuns() {\n while (this.stackSize > 1) {\n var n = this.stackSize - 2;\n if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1]) {\n if (this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n } else if (this.runLength[n] > this.runLength[n + 1]) {\n break;\n }\n this.mergeAt(n);\n }\n };\n TimSort2.prototype.forceMergeRuns = function forceMergeRuns() {\n while (this.stackSize > 1) {\n var n = this.stackSize - 2;\n if (n > 0 && this.runLength[n - 1] < this.runLength[n + 1]) {\n n--;\n }\n this.mergeAt(n);\n }\n };\n TimSort2.prototype.mergeAt = function mergeAt(i) {\n var compare = this.compare;\n var array = this.array;\n var start1 = this.runStart[i];\n var length1 = this.runLength[i];\n var start2 = this.runStart[i + 1];\n var length2 = this.runLength[i + 1];\n this.runLength[i] = length1 + length2;\n if (i === this.stackSize - 3) {\n this.runStart[i + 1] = this.runStart[i + 2];\n this.runLength[i + 1] = this.runLength[i + 2];\n }\n this.stackSize--;\n var k = gallopRight(array[start2], array, start1, length1, 0, compare);\n start1 += k;\n length1 -= k;\n if (length1 === 0) {\n return;\n }\n length2 = gallopLeft(array[start1 + length1 - 1], array, start2, length2, length2 - 1, compare);\n if (length2 === 0) {\n return;\n }\n if (length1 <= length2) {\n this.mergeLow(start1, length1, start2, length2);\n } else {\n this.mergeHigh(start1, length1, start2, length2);\n }\n };\n TimSort2.prototype.mergeLow = function mergeLow(start1, length1, start2, length2) {\n var compare = this.compare;\n var array = this.array;\n var tmp = this.tmp;\n var i = 0;\n for (i = 0; i < length1; i++) {\n tmp[i] = array[start1 + i];\n }\n var cursor1 = 0;\n var cursor2 = start2;\n var dest = start1;\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n return;\n }\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n return;\n }\n var minGallop = this.minGallop;\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n do {\n if (compare(array[cursor2], tmp[cursor1]) < 0) {\n array[dest++] = array[cursor2++];\n count2++;\n count1 = 0;\n if (--length2 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest++] = tmp[cursor1++];\n count1++;\n count2 = 0;\n if (--length1 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare);\n if (count1 !== 0) {\n for (i = 0; i < count1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n dest += count1;\n cursor1 += count1;\n length1 -= count1;\n if (length1 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest++] = array[cursor2++];\n if (--length2 === 0) {\n exit = true;\n break;\n }\n count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare);\n if (count2 !== 0) {\n for (i = 0; i < count2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n dest += count2;\n cursor2 += count2;\n length2 -= count2;\n if (length2 === 0) {\n exit = true;\n break;\n }\n }\n array[dest++] = tmp[cursor1++];\n if (--length1 === 1) {\n exit = true;\n break;\n }\n minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (minGallop < 0) {\n minGallop = 0;\n }\n minGallop += 2;\n }\n this.minGallop = minGallop;\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n if (length1 === 1) {\n for (i = 0; i < length2; i++) {\n array[dest + i] = array[cursor2 + i];\n }\n array[dest + length2] = tmp[cursor1];\n } else if (length1 === 0) {\n throw new Error(\"mergeLow preconditions were not respected\");\n } else {\n for (i = 0; i < length1; i++) {\n array[dest + i] = tmp[cursor1 + i];\n }\n }\n };\n TimSort2.prototype.mergeHigh = function mergeHigh(start1, length1, start2, length2) {\n var compare = this.compare;\n var array = this.array;\n var tmp = this.tmp;\n var i = 0;\n for (i = 0; i < length2; i++) {\n tmp[i] = array[start2 + i];\n }\n var cursor1 = start1 + length1 - 1;\n var cursor2 = length2 - 1;\n var dest = start2 + length2 - 1;\n var customCursor = 0;\n var customDest = 0;\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n return;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n return;\n }\n var minGallop = this.minGallop;\n while (true) {\n var count1 = 0;\n var count2 = 0;\n var exit = false;\n do {\n if (compare(tmp[cursor2], array[cursor1]) < 0) {\n array[dest--] = array[cursor1--];\n count1++;\n count2 = 0;\n if (--length1 === 0) {\n exit = true;\n break;\n }\n } else {\n array[dest--] = tmp[cursor2--];\n count2++;\n count1 = 0;\n if (--length2 === 1) {\n exit = true;\n break;\n }\n }\n } while ((count1 | count2) < minGallop);\n if (exit) {\n break;\n }\n do {\n count1 = length1 - gallopRight(tmp[cursor2], array, start1, length1, length1 - 1, compare);\n if (count1 !== 0) {\n dest -= count1;\n cursor1 -= count1;\n length1 -= count1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = count1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n if (length1 === 0) {\n exit = true;\n break;\n }\n }\n array[dest--] = tmp[cursor2--];\n if (--length2 === 1) {\n exit = true;\n break;\n }\n count2 = length2 - gallopLeft(array[cursor1], tmp, 0, length2, length2 - 1, compare);\n if (count2 !== 0) {\n dest -= count2;\n cursor2 -= count2;\n length2 -= count2;\n customDest = dest + 1;\n customCursor = cursor2 + 1;\n for (i = 0; i < count2; i++) {\n array[customDest + i] = tmp[customCursor + i];\n }\n if (length2 <= 1) {\n exit = true;\n break;\n }\n }\n array[dest--] = array[cursor1--];\n if (--length1 === 0) {\n exit = true;\n break;\n }\n minGallop--;\n } while (count1 >= DEFAULT_MIN_GALLOPING || count2 >= DEFAULT_MIN_GALLOPING);\n if (exit) {\n break;\n }\n if (minGallop < 0) {\n minGallop = 0;\n }\n minGallop += 2;\n }\n this.minGallop = minGallop;\n if (minGallop < 1) {\n this.minGallop = 1;\n }\n if (length2 === 1) {\n dest -= length1;\n cursor1 -= length1;\n customDest = dest + 1;\n customCursor = cursor1 + 1;\n for (i = length1 - 1; i >= 0; i--) {\n array[customDest + i] = array[customCursor + i];\n }\n array[dest] = tmp[cursor2];\n } else if (length2 === 0) {\n throw new Error(\"mergeHigh preconditions were not respected\");\n } else {\n customCursor = dest - (length2 - 1);\n for (i = 0; i < length2; i++) {\n array[customCursor + i] = tmp[i];\n }\n }\n };\n return TimSort2;\n })();\n function sort(array, compare, lo, hi) {\n if (!Array.isArray(array)) {\n throw new TypeError(\"Can only sort arrays\");\n }\n if (!compare) {\n compare = alphabeticalCompare;\n } else if (typeof compare !== \"function\") {\n hi = lo;\n lo = compare;\n compare = alphabeticalCompare;\n }\n if (!lo) {\n lo = 0;\n }\n if (!hi) {\n hi = array.length;\n }\n var remaining = hi - lo;\n if (remaining < 2) {\n return;\n }\n var runLength = 0;\n if (remaining < DEFAULT_MIN_MERGE) {\n runLength = makeAscendingRun(array, lo, hi, compare);\n binaryInsertionSort(array, lo, hi, lo + runLength, compare);\n return;\n }\n var ts = new TimSort(array, compare);\n var minRun = minRunLength(remaining);\n do {\n runLength = makeAscendingRun(array, lo, hi, compare);\n if (runLength < minRun) {\n var force = remaining;\n if (force > minRun) {\n force = minRun;\n }\n binaryInsertionSort(array, lo, lo + force, lo + runLength, compare);\n runLength = force;\n }\n ts.pushRun(lo, runLength);\n ts.mergeRuns();\n remaining -= runLength;\n lo += runLength;\n } while (remaining !== 0);\n ts.forceMergeRuns();\n }\n });\n })(timsort$1);\n return timsort$1;\n}\nvar timsort;\nvar hasRequiredTimsort;\nfunction requireTimsort() {\n if (hasRequiredTimsort) return timsort;\n hasRequiredTimsort = 1;\n timsort = requireTimsort$1();\n return timsort;\n}\nvar timsortExports = requireTimsort();\nvar lib;\nvar hasRequiredLib;\nfunction requireLib() {\n if (hasRequiredLib) return lib;\n hasRequiredLib = 1;\n function lessThanZeroError(p) {\n return 'Expect percentile to be >= 0 but given \"' + p + '\" and its type is \"' + typeof p + '\".';\n }\n function greaterThanHundredError(p) {\n return 'Expect percentile to be <= 100 but given \"' + p + '\" and its type is \"' + typeof p + '\".';\n }\n function nanError(p) {\n return 'Expect percentile to be a number but given \"' + p + '\" and its type is \"' + typeof p + '\".';\n }\n function validateInput(ps) {\n return ps.reduce(function(errors, p) {\n if (isNaN(Number(p))) {\n errors.push(nanError(p));\n } else if (p < 0) {\n errors.push(lessThanZeroError(p));\n } else if (p > 100) {\n errors.push(greaterThanHundredError(p));\n }\n return errors;\n }, []);\n }\n function getPsValue(p, list) {\n if (p === 0) return list[0];\n var kIndex = Math.ceil(list.length * (p / 100)) - 1;\n return list[kIndex];\n }\n function percentile2(pOrPs, list, fn) {\n var ps = Array.isArray(pOrPs) ? pOrPs : [pOrPs];\n var validationErrors = validateInput(ps);\n if (validationErrors.length) {\n throw new Error(validationErrors.join(\" \"));\n }\n list = list.slice().sort(function(a, b) {\n if (fn) {\n a = fn(a);\n b = fn(b);\n }\n a = Number.isNaN(a) ? Number.NEGATIVE_INFINITY : a;\n b = Number.isNaN(b) ? Number.NEGATIVE_INFINITY : b;\n if (a > b) return 1;\n if (a < b) return -1;\n return 0;\n });\n if (ps.length === 1) {\n return getPsValue(ps[0], list);\n }\n return ps.map(function(p) {\n return getPsValue(p, list);\n });\n }\n lib = percentile2;\n return lib;\n}\nvar libExports = requireLib();\nconst percentile = /* @__PURE__ */ getDefaultExportFromCjs(libExports);\nclass InstrumentGaugeOptions extends InstrumentBaseOptions {\n interval;\n sampleSize;\n fromJSON;\n initValue;\n}\nclass InstrumentGaugeTelemetry extends InstrumentBaseTelemetry {\n val;\n Inc;\n Dec;\n}\nclass InstrumentGauge extends InstrumentBase {\n #val = 0;\n #maxval = null;\n #lastObservedValue = 0;\n #timeSeriesList = [];\n #maxSampleSize = 0;\n #timerInterval = 0;\n #observer = null;\n //@@ extras\n #min = null;\n #max = 0;\n #observations = 0;\n #total = 0;\n #copy = false;\n constructor(options = {}) {\n super(options);\n if (!options.label) {\n this.label = \"InstrumentGauge\";\n } else {\n this.label = options.label;\n }\n if (typeof options.interval === \"undefined\") {\n this.#timerInterval = 0;\n } else {\n this.#timerInterval = options.interval;\n }\n if (typeof options.sampleSize === \"undefined\") {\n this.#maxSampleSize = 600;\n } else {\n this.#maxSampleSize = options.sampleSize;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_GAUGE\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\",\n \"min\",\n \"max\",\n \"avg\",\n \"percentile\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n if (this.#timerInterval > 0) {\n Object.defineProperty(this, \"percentile\", {\n enumerable: true,\n get: () => this.#GetPercentileData()\n });\n this._StartTimer();\n }\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n if (result.percentile) {\n this.percentile = result.percentile;\n }\n if (result.min) {\n this.min = result.min;\n }\n if (result.max) {\n this.max = result.max;\n }\n if (result.avg) {\n this.avg = result.avg;\n }\n }\n }\n percentile;\n min;\n max;\n avg;\n val = 0;\n WithInitVal(initVal) {\n this.val = initVal;\n return this;\n }\n WithMin() {\n Object.defineProperty(this, \"min\", {\n enumerable: true,\n get: () => this.#GetMin()\n });\n return this;\n }\n WithMax() {\n Object.defineProperty(this, \"max\", {\n enumerable: true,\n get: () => this.#GetMax()\n });\n return this;\n }\n WithAverage() {\n Object.defineProperty(this, \"avg\", {\n enumerable: true,\n get: () => this.#GetAverage()\n });\n return this;\n }\n _StartTimer() {\n if (this.#timerInterval > 0) {\n this.#timeSeriesList = [];\n this.#observer = setInterval(() => {\n if (this.#timeSeriesList.length > this.#maxSampleSize) {\n this.#timeSeriesList.shift();\n }\n const maxval = this.#GetAndResetMaxVal();\n this.#timeSeriesList.push(maxval);\n }, this.#timerInterval);\n if (isNode) {\n this.#observer.unref();\n }\n } else {\n throw new Error(`Unable to StartTimer for this instrument. The interval is set to <= 0.`);\n }\n }\n StopTimer() {\n if (this.#observer) {\n clearTimeout(this.#observer);\n this.#observer = null;\n this.#timeSeriesList = [];\n }\n }\n /**\n * If the gauge is being monitored as part of a time series, get the most recent recorded value (max value) from within the time interval\n * otherwise, just return the current instant value.\n */\n #GetVal() {\n if (this.#timerInterval > 0 && this.#observer !== null) {\n if (this.#maxval === null) {\n return this.GetNumber(this.#lastObservedValue);\n } else {\n return this.GetNumber(this.#maxval);\n }\n }\n return this.GetNumber(this.#val);\n }\n #SetVal(updatedValue) {\n this.#val = updatedValue;\n this.#observations++;\n this.#total += updatedValue;\n if (this.#val > this.#max) {\n this.#max = this.#val;\n }\n if (this.#min !== null) {\n if (this.#val < this.#min) {\n this.#min = this.#val;\n }\n } else {\n this.#min = this.#val;\n }\n if (this.#timerInterval > 0) {\n this.#lastObservedValue = updatedValue;\n if (this.#maxval === null) {\n this.#maxval = this.#val;\n } else if (this.#val > this.#maxval) {\n this.#maxval = this.#val;\n }\n }\n }\n #GetMin() {\n if (this.#min !== null) {\n return this.#min;\n }\n return 0;\n }\n #GetMax() {\n return this.#max;\n }\n #GetAverage() {\n if (this.#observations > 0) {\n return this.#total / this.#observations;\n }\n return 0;\n }\n Reset() {\n this.StopTimer();\n this.#maxval = 0;\n this.#lastObservedValue = 0;\n this.#val = 0;\n this.#min = null;\n this.#max = 0;\n this.#observations = 0;\n this.#total = 0;\n if (this.#timerInterval > 0) {\n this._StartTimer();\n }\n }\n #GetAndResetMaxVal() {\n if (this.#maxval === null) {\n return this.#lastObservedValue;\n }\n const retVal = this.#maxval;\n this.#maxval = null;\n return retVal;\n }\n Inc(incVal = 1) {\n this.#SetVal(this.#val + incVal);\n }\n Dec(decVal = 1) {\n this.#SetVal(this.#val - decVal);\n }\n #NumberCompare(a, b) {\n return a - b;\n }\n #GetPercentileData() {\n const sortedList = this.#timeSeriesList.slice(0);\n timsortExports.sort(sortedList, this.#NumberCompare);\n return percentile([50, 80, 90, 95, 99, 99.95], sortedList);\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.Inc !== void 0) {\n this.Inc(telemetry.Inc);\n }\n if (telemetry.Dec !== void 0) {\n this.Dec(telemetry.Dec);\n }\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nclass InstrumentObjectOptions extends InstrumentBaseOptions {\n fromJSON;\n initValue;\n}\nclass InstrumentObjectTelemetry extends InstrumentBaseTelemetry {\n val;\n}\nclass InstrumentObject extends InstrumentBase {\n #val = {};\n #copy = false;\n constructor(options = {}) {\n super(options);\n if (typeof options.label === \"undefined\") {\n this.label = \"InstrumentObject\";\n } else {\n this.label = options.label;\n }\n if (typeof options.fromJSON === \"undefined\") {\n this.#copy = false;\n } else {\n this.#copy = true;\n }\n Object.defineProperty(this, GaugeTypes.GAUGE_TYPE, {\n enumerable: true,\n get: () => GaugeTypes.INSTRUMENT_OBJECT\n });\n if (this.#copy) {\n this.DefineCopyProperties([\n \"val\"\n ]);\n } else {\n Object.defineProperty(this, \"val\", {\n enumerable: true,\n get: () => this.#GetVal(),\n set: (value) => {\n this.#SetVal(value);\n }\n });\n }\n if (typeof options.initValue !== \"undefined\") {\n this.val = options.initValue;\n } else {\n this.val = {};\n }\n if (typeof options.fromJSON !== \"undefined\") {\n const result = _cloneDeep(options.fromJSON);\n this.val = result.val;\n }\n }\n val;\n WithInitVal(initVal) {\n this.val = initVal;\n return this;\n }\n #GetVal() {\n return this.#val;\n }\n #SetVal(updatedValue) {\n this.#val = updatedValue;\n }\n ProcessTelemetry(telemetry) {\n if (telemetry.val !== void 0) {\n this.val = telemetry.val;\n }\n }\n}\nfunction CreateInstrument(sourceInstrument) {\n switch (sourceInstrument[GaugeTypes.GAUGE_TYPE]) {\n case GaugeTypes.INSTRUMENT_GAUGE:\n return new InstrumentGauge({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_VELOCITY:\n return new InstrumentVelocity({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_HISTOGRAM:\n return new InstrumentHistogram({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_LOG:\n return new InstrumentLog({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_TIMER:\n return new InstrumentTimerGauge({ fromJSON: sourceInstrument });\n case GaugeTypes.INSTRUMENT_OBJECT:\n return new InstrumentObject({ fromJSON: sourceInstrument });\n }\n throw new Error(`Cannot create instrument from type: [${sourceInstrument[GaugeTypes.GAUGE_TYPE]}]`);\n}\nfunction GetInstrumentName(gauge) {\n switch (gauge) {\n case Gauge.ACTIVE_REQUEST_GAUGE:\n return \"Active Requests\";\n case Gauge.AUTHENTICATION_COUNT_GAUGE:\n return \"Authentication Count\";\n case Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE:\n return \"Authentication Error Count\";\n case Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE:\n return \"Authentication Retry Count\";\n case Gauge.CONNECTION_POOL_IDLE_GAUGE:\n return \"Connection Pool Idle\";\n case Gauge.CONNECTION_POOL_TOTAL_GAUGE:\n return \"Connection Pool Total\";\n case Gauge.CONNECTION_POOL_WAITING_GAUGE:\n return \"Connection Pool Waiting\";\n case Gauge.CPU_LOAD_GAUGE:\n return \"CPU Load\";\n case Gauge.CPU_SYSTEM_LOAD_GAUGE:\n return \"CPU SYstem Load\";\n case Gauge.DURATION_GAUGE:\n return \"Duration\";\n case Gauge.DURATION_HISTOGRAM_GAUGE:\n return \"Diration Histogram\";\n case Gauge.ERROR_COUNT_GAUGE:\n return \"Errors\";\n case Gauge.LATENCY_GAUGE:\n return \"Latency\";\n case Gauge.LATENCY_HISTOGRAM_GAUGE:\n return \"Latency Histogram\";\n case Gauge.LOGGER:\n return \"Logger\";\n case Gauge.LOGGER_COPY:\n return \"_Logger\";\n case Gauge.NETWORK_RX_GAUGE:\n return \"Network Receive\";\n case Gauge.NETWORK_TX_GAUGE:\n return \"Network Transmit\";\n case Gauge.REQUEST_COUNT_GAUGE:\n return \"Requests\";\n case Gauge.RETRY_COUNT_GAUGE:\n return \"Retries\";\n case Gauge.TIMER_GAUGE:\n return \"Timer\";\n case Gauge.VELOCITY_GAUGE:\n return \"Velocity\";\n case Gauge.CONNECTION_COUNT_GAUGE:\n return \"TCP Connection\";\n case Gauge.OBJECT_GAUGE:\n return \"Object\";\n case Gauge.CORE_COUNT_GAUGE:\n return \"Core Count\";\n default:\n return \"Unknown\";\n }\n}\nfunction StopInstruments(instruments) {\n if (instruments) {\n if (Array.isArray(instruments)) {\n instruments.forEach((instrument) => {\n if (instrument.StopTimer) {\n instrument.StopTimer();\n }\n });\n } else {\n for (const [, value] of Object.entries(instruments)) {\n if (value.StopTimer) {\n value.StopTimer();\n }\n }\n }\n }\n}\nexport {\n CreateInstrument,\n Gauge,\n GaugeTypes,\n GetInstrumentName,\n HistogramDataElementPos,\n InstrumentBase,\n InstrumentBaseOptions,\n InstrumentBaseTelemetry,\n InstrumentGauge,\n InstrumentGaugeOptions,\n InstrumentGaugeTelemetry,\n InstrumentHistogram,\n InstrumentHistogramOptions,\n InstrumentHistogramTelemetry,\n InstrumentLog,\n InstrumentLogOptions,\n InstrumentLogTelemetry,\n InstrumentObject,\n InstrumentObjectOptions,\n InstrumentObjectTelemetry,\n InstrumentTimerGauge,\n InstrumentTimerOptions,\n InstrumentTimerTelemetry,\n InstrumentVelocity,\n InstrumentVelocityOptions,\n InstrumentVelocityTelemetry,\n StopInstruments\n};\n//# sourceMappingURL=index.mjs.map\n","export function utf8Count(str) {\n const strLength = str.length;\n let byteLength = 0;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n byteLength++;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n byteLength += 2;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n byteLength += 3;\n }\n else {\n // 4-byte\n byteLength += 4;\n }\n }\n }\n return byteLength;\n}\nexport function utf8EncodeJs(str, output, outputOffset) {\n const strLength = str.length;\n let offset = outputOffset;\n let pos = 0;\n while (pos < strLength) {\n let value = str.charCodeAt(pos++);\n if ((value & 0xffffff80) === 0) {\n // 1-byte\n output[offset++] = value;\n continue;\n }\n else if ((value & 0xfffff800) === 0) {\n // 2-bytes\n output[offset++] = ((value >> 6) & 0x1f) | 0xc0;\n }\n else {\n // handle surrogate pair\n if (value >= 0xd800 && value <= 0xdbff) {\n // high surrogate\n if (pos < strLength) {\n const extra = str.charCodeAt(pos);\n if ((extra & 0xfc00) === 0xdc00) {\n ++pos;\n value = ((value & 0x3ff) << 10) + (extra & 0x3ff) + 0x10000;\n }\n }\n }\n if ((value & 0xffff0000) === 0) {\n // 3-byte\n output[offset++] = ((value >> 12) & 0x0f) | 0xe0;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n else {\n // 4-byte\n output[offset++] = ((value >> 18) & 0x07) | 0xf0;\n output[offset++] = ((value >> 12) & 0x3f) | 0x80;\n output[offset++] = ((value >> 6) & 0x3f) | 0x80;\n }\n }\n output[offset++] = (value & 0x3f) | 0x80;\n }\n}\n// TextEncoder and TextDecoder are standardized in whatwg encoding:\n// https://encoding.spec.whatwg.org/\n// and available in all the modern browsers:\n// https://caniuse.com/textencoder\n// They are available in Node.js since v12 LTS as well:\n// https://nodejs.org/api/globals.html#textencoder\nconst sharedTextEncoder = new TextEncoder();\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/encode-string.ts` for details.\nconst TEXT_ENCODER_THRESHOLD = 50;\nexport function utf8EncodeTE(str, output, outputOffset) {\n sharedTextEncoder.encodeInto(str, output.subarray(outputOffset));\n}\nexport function utf8Encode(str, output, outputOffset) {\n if (str.length > TEXT_ENCODER_THRESHOLD) {\n utf8EncodeTE(str, output, outputOffset);\n }\n else {\n utf8EncodeJs(str, output, outputOffset);\n }\n}\nconst CHUNK_SIZE = 4096;\nexport function utf8DecodeJs(bytes, inputOffset, byteLength) {\n let offset = inputOffset;\n const end = offset + byteLength;\n const units = [];\n let result = \"\";\n while (offset < end) {\n const byte1 = bytes[offset++];\n if ((byte1 & 0x80) === 0) {\n // 1 byte\n units.push(byte1);\n }\n else if ((byte1 & 0xe0) === 0xc0) {\n // 2 bytes\n const byte2 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 6) | byte2);\n }\n else if ((byte1 & 0xf0) === 0xe0) {\n // 3 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n units.push(((byte1 & 0x1f) << 12) | (byte2 << 6) | byte3);\n }\n else if ((byte1 & 0xf8) === 0xf0) {\n // 4 bytes\n const byte2 = bytes[offset++] & 0x3f;\n const byte3 = bytes[offset++] & 0x3f;\n const byte4 = bytes[offset++] & 0x3f;\n let unit = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0c) | (byte3 << 0x06) | byte4;\n if (unit > 0xffff) {\n unit -= 0x10000;\n units.push(((unit >>> 10) & 0x3ff) | 0xd800);\n unit = 0xdc00 | (unit & 0x3ff);\n }\n units.push(unit);\n }\n else {\n units.push(byte1);\n }\n if (units.length >= CHUNK_SIZE) {\n result += String.fromCharCode(...units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += String.fromCharCode(...units);\n }\n return result;\n}\nconst sharedTextDecoder = new TextDecoder();\n// This threshold should be determined by benchmarking, which might vary in engines and input data.\n// Run `npx ts-node benchmark/decode-string.ts` for details.\nconst TEXT_DECODER_THRESHOLD = 200;\nexport function utf8DecodeTD(bytes, inputOffset, byteLength) {\n const stringBytes = bytes.subarray(inputOffset, inputOffset + byteLength);\n return sharedTextDecoder.decode(stringBytes);\n}\nexport function utf8Decode(bytes, inputOffset, byteLength) {\n if (byteLength > TEXT_DECODER_THRESHOLD) {\n return utf8DecodeTD(bytes, inputOffset, byteLength);\n }\n else {\n return utf8DecodeJs(bytes, inputOffset, byteLength);\n }\n}\n//# sourceMappingURL=utf8.mjs.map","/**\n * ExtData is used to handle Extension Types that are not registered to ExtensionCodec.\n */\nexport class ExtData {\n type;\n data;\n constructor(type, data) {\n this.type = type;\n this.data = data;\n }\n}\n//# sourceMappingURL=ExtData.mjs.map","export class DecodeError extends Error {\n constructor(message) {\n super(message);\n // fix the prototype chain in a cross-platform way\n const proto = Object.create(DecodeError.prototype);\n Object.setPrototypeOf(this, proto);\n Object.defineProperty(this, \"name\", {\n configurable: true,\n enumerable: false,\n value: DecodeError.name,\n });\n }\n}\n//# sourceMappingURL=DecodeError.mjs.map","// Integer Utility\nexport const UINT32_MAX = 4294967295;\n// DataView extension to handle int64 / uint64,\n// where the actual range is 53-bits integer (a.k.a. safe integer)\nexport function setUint64(view, offset, value) {\n const high = value / 4294967296;\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function setInt64(view, offset, value) {\n const high = Math.floor(value / 4294967296);\n const low = value; // high bits are truncated by DataView\n view.setUint32(offset, high);\n view.setUint32(offset + 4, low);\n}\nexport function getInt64(view, offset) {\n const high = view.getInt32(offset);\n const low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\nexport function getUint64(view, offset) {\n const high = view.getUint32(offset);\n const low = view.getUint32(offset + 4);\n return high * 4294967296 + low;\n}\n//# sourceMappingURL=int.mjs.map","// https://github.com/msgpack/msgpack/blob/master/spec.md#timestamp-extension-type\nimport { DecodeError } from \"./DecodeError.mjs\";\nimport { getInt64, setInt64 } from \"./utils/int.mjs\";\nexport const EXT_TIMESTAMP = -1;\nconst TIMESTAMP32_MAX_SEC = 0x100000000 - 1; // 32-bit unsigned int\nconst TIMESTAMP64_MAX_SEC = 0x400000000 - 1; // 34-bit unsigned int\nexport function encodeTimeSpecToTimestamp({ sec, nsec }) {\n if (sec >= 0 && nsec >= 0 && sec <= TIMESTAMP64_MAX_SEC) {\n // Here sec >= 0 && nsec >= 0\n if (nsec === 0 && sec <= TIMESTAMP32_MAX_SEC) {\n // timestamp 32 = { sec32 (unsigned) }\n const rv = new Uint8Array(4);\n const view = new DataView(rv.buffer);\n view.setUint32(0, sec);\n return rv;\n }\n else {\n // timestamp 64 = { nsec30 (unsigned), sec34 (unsigned) }\n const secHigh = sec / 0x100000000;\n const secLow = sec & 0xffffffff;\n const rv = new Uint8Array(8);\n const view = new DataView(rv.buffer);\n // nsec30 | secHigh2\n view.setUint32(0, (nsec << 2) | (secHigh & 0x3));\n // secLow32\n view.setUint32(4, secLow);\n return rv;\n }\n }\n else {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const rv = new Uint8Array(12);\n const view = new DataView(rv.buffer);\n view.setUint32(0, nsec);\n setInt64(view, 4, sec);\n return rv;\n }\n}\nexport function encodeDateToTimeSpec(date) {\n const msec = date.getTime();\n const sec = Math.floor(msec / 1e3);\n const nsec = (msec - sec * 1e3) * 1e6;\n // Normalizes { sec, nsec } to ensure nsec is unsigned.\n const nsecInSec = Math.floor(nsec / 1e9);\n return {\n sec: sec + nsecInSec,\n nsec: nsec - nsecInSec * 1e9,\n };\n}\nexport function encodeTimestampExtension(object) {\n if (object instanceof Date) {\n const timeSpec = encodeDateToTimeSpec(object);\n return encodeTimeSpecToTimestamp(timeSpec);\n }\n else {\n return null;\n }\n}\nexport function decodeTimestampToTimeSpec(data) {\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n // data may be 32, 64, or 96 bits\n switch (data.byteLength) {\n case 4: {\n // timestamp 32 = { sec32 }\n const sec = view.getUint32(0);\n const nsec = 0;\n return { sec, nsec };\n }\n case 8: {\n // timestamp 64 = { nsec30, sec34 }\n const nsec30AndSecHigh2 = view.getUint32(0);\n const secLow32 = view.getUint32(4);\n const sec = (nsec30AndSecHigh2 & 0x3) * 0x100000000 + secLow32;\n const nsec = nsec30AndSecHigh2 >>> 2;\n return { sec, nsec };\n }\n case 12: {\n // timestamp 96 = { nsec32 (unsigned), sec64 (signed) }\n const sec = getInt64(view, 4);\n const nsec = view.getUint32(0);\n return { sec, nsec };\n }\n default:\n throw new DecodeError(`Unrecognized data size for timestamp (expected 4, 8, or 12): ${data.length}`);\n }\n}\nexport function decodeTimestampExtension(data) {\n const timeSpec = decodeTimestampToTimeSpec(data);\n return new Date(timeSpec.sec * 1e3 + timeSpec.nsec / 1e6);\n}\nexport const timestampExtension = {\n type: EXT_TIMESTAMP,\n encode: encodeTimestampExtension,\n decode: decodeTimestampExtension,\n};\n//# sourceMappingURL=timestamp.mjs.map","// ExtensionCodec to handle MessagePack extensions\nimport { ExtData } from \"./ExtData.mjs\";\nimport { timestampExtension } from \"./timestamp.mjs\";\nexport class ExtensionCodec {\n static defaultCodec = new ExtensionCodec();\n // ensures ExtensionCodecType<X> matches ExtensionCodec<X>\n // this will make type errors a lot more clear\n // eslint-disable-next-line @typescript-eslint/naming-convention\n __brand;\n // built-in extensions\n builtInEncoders = [];\n builtInDecoders = [];\n // custom extensions\n encoders = [];\n decoders = [];\n constructor() {\n this.register(timestampExtension);\n }\n register({ type, encode, decode, }) {\n if (type >= 0) {\n // custom extensions\n this.encoders[type] = encode;\n this.decoders[type] = decode;\n }\n else {\n // built-in extensions\n const index = -1 - type;\n this.builtInEncoders[index] = encode;\n this.builtInDecoders[index] = decode;\n }\n }\n tryToEncode(object, context) {\n // built-in extensions\n for (let i = 0; i < this.builtInEncoders.length; i++) {\n const encodeExt = this.builtInEncoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = -1 - i;\n return new ExtData(type, data);\n }\n }\n }\n // custom extensions\n for (let i = 0; i < this.encoders.length; i++) {\n const encodeExt = this.encoders[i];\n if (encodeExt != null) {\n const data = encodeExt(object, context);\n if (data != null) {\n const type = i;\n return new ExtData(type, data);\n }\n }\n }\n if (object instanceof ExtData) {\n // to keep ExtData as is\n return object;\n }\n return null;\n }\n decode(data, type, context) {\n const decodeExt = type < 0 ? this.builtInDecoders[-1 - type] : this.decoders[type];\n if (decodeExt) {\n return decodeExt(data, type, context);\n }\n else {\n // decode() does not fail, returns ExtData instead.\n return new ExtData(type, data);\n }\n }\n}\n//# sourceMappingURL=ExtensionCodec.mjs.map","function isArrayBufferLike(buffer) {\n return (buffer instanceof ArrayBuffer || (typeof SharedArrayBuffer !== \"undefined\" && buffer instanceof SharedArrayBuffer));\n}\nexport function ensureUint8Array(buffer) {\n if (buffer instanceof Uint8Array) {\n return buffer;\n }\n else if (ArrayBuffer.isView(buffer)) {\n return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);\n }\n else if (isArrayBufferLike(buffer)) {\n return new Uint8Array(buffer);\n }\n else {\n // ArrayLike<number>\n return Uint8Array.from(buffer);\n }\n}\n//# sourceMappingURL=typedArrays.mjs.map","import { utf8Count, utf8Encode } from \"./utils/utf8.mjs\";\nimport { ExtensionCodec } from \"./ExtensionCodec.mjs\";\nimport { setInt64, setUint64 } from \"./utils/int.mjs\";\nimport { ensureUint8Array } from \"./utils/typedArrays.mjs\";\nexport const DEFAULT_MAX_DEPTH = 100;\nexport const DEFAULT_INITIAL_BUFFER_SIZE = 2048;\nexport class Encoder {\n extensionCodec;\n context;\n useBigInt64;\n maxDepth;\n initialBufferSize;\n sortKeys;\n forceFloat32;\n ignoreUndefined;\n forceIntegerToFloat;\n pos;\n view;\n bytes;\n entered = false;\n constructor(options) {\n this.extensionCodec = options?.extensionCodec ?? ExtensionCodec.defaultCodec;\n this.context = options?.context; // needs a type assertion because EncoderOptions has no context property when ContextType is undefined\n this.useBigInt64 = options?.useBigInt64 ?? false;\n this.maxDepth = options?.maxDepth ?? DEFAULT_MAX_DEPTH;\n this.initialBufferSize = options?.initialBufferSize ?? DEFAULT_INITIAL_BUFFER_SIZE;\n this.sortKeys = options?.sortKeys ?? false;\n this.forceFloat32 = options?.forceFloat32 ?? false;\n this.ignoreUndefined = options?.ignoreUndefined ?? false;\n this.forceIntegerToFloat = options?.forceIntegerToFloat ?? false;\n this.pos = 0;\n this.view = new DataView(new ArrayBuffer(this.initialBufferSize));\n this.bytes = new Uint8Array(this.view.buffer);\n }\n clone() {\n // Because of slightly special argument `context`,\n // type assertion is needed.\n // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n return new Encoder({\n extensionCodec: this.extensionCodec,\n context: this.context,\n useBigInt64: this.useBigInt64,\n maxDepth: this.maxDepth,\n initialBufferSize: this.initialBufferSize,\n sortKeys: this.sortKeys,\n forceFloat32: this.forceFloat32,\n ignoreUndefined: this.ignoreUndefined,\n forceIntegerToFloat: this.forceIntegerToFloat,\n });\n }\n reinitializeState() {\n this.pos = 0;\n }\n /**\n * This is almost equivalent to {@link Encoder#encode}, but it returns an reference of the encoder's internal buffer and thus much faster than {@link Encoder#encode}.\n *\n * @returns Encodes the object and returns a shared reference the encoder's internal buffer.\n */\n encodeSharedRef(object) {\n if (this.entered) {\n const instance = this.clone();\n return instance.encodeSharedRef(object);\n }\n try {\n this.entered = true;\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.subarray(0, this.pos);\n }\n finally {\n this.entered = false;\n }\n }\n /**\n * @returns Encodes the object and returns a copy of the encoder's internal buffer.\n */\n encode(object) {\n if (this.entered) {\n const instance = this.clone();\n return instance.encode(object);\n }\n try {\n this.entered = true;\n this.reinitializeState();\n this.doEncode(object, 1);\n return this.bytes.slice(0, this.pos);\n }\n finally {\n this.entered = false;\n }\n }\n doEncode(object, depth) {\n if (depth > this.maxDepth) {\n throw new Error(`Too deep objects in depth ${depth}`);\n }\n if (object == null) {\n this.encodeNil();\n }\n else if (typeof object === \"boolean\") {\n this.encodeBoolean(object);\n }\n else if (typeof object === \"number\") {\n if (!this.forceIntegerToFloat) {\n this.encodeNumber(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n else if (typeof object === \"string\") {\n this.encodeString(object);\n }\n else if (this.useBigInt64 && typeof object === \"bigint\") {\n this.encodeBigInt64(object);\n }\n else {\n this.encodeObject(object, depth);\n }\n }\n ensureBufferSizeToWrite(sizeToWrite) {\n const requiredSize = this.pos + sizeToWrite;\n if (this.view.byteLength < requiredSize) {\n this.resizeBuffer(requiredSize * 2);\n }\n }\n resizeBuffer(newSize) {\n const newBuffer = new ArrayBuffer(newSize);\n const newBytes = new Uint8Array(newBuffer);\n const newView = new DataView(newBuffer);\n newBytes.set(this.bytes);\n this.view = newView;\n this.bytes = newBytes;\n }\n encodeNil() {\n this.writeU8(0xc0);\n }\n encodeBoolean(object) {\n if (object === false) {\n this.writeU8(0xc2);\n }\n else {\n this.writeU8(0xc3);\n }\n }\n encodeNumber(object) {\n if (!this.forceIntegerToFloat && Number.isSafeInteger(object)) {\n if (object >= 0) {\n if (object < 0x80) {\n // positive fixint\n this.writeU8(object);\n }\n else if (object < 0x100) {\n // uint 8\n this.writeU8(0xcc);\n this.writeU8(object);\n }\n else if (object < 0x10000) {\n // uint 16\n this.writeU8(0xcd);\n this.writeU16(object);\n }\n else if (object < 0x100000000) {\n // uint 32\n this.writeU8(0xce);\n this.writeU32(object);\n }\n else if (!this.useBigInt64) {\n // uint 64\n this.writeU8(0xcf);\n this.writeU64(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n else {\n if (object >= -0x20) {\n // negative fixint\n this.writeU8(0xe0 | (object + 0x20));\n }\n else if (object >= -0x80) {\n // int 8\n this.writeU8(0xd0);\n this.writeI8(object);\n }\n else if (object >= -0x8000) {\n // int 16\n this.writeU8(0xd1);\n this.writeI16(object);\n }\n else if (object >= -0x80000000) {\n // int 32\n this.writeU8(0xd2);\n this.writeI32(object);\n }\n else if (!this.useBigInt64) {\n // int 64\n this.writeU8(0xd3);\n this.writeI64(object);\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n }\n else {\n this.encodeNumberAsFloat(object);\n }\n }\n encodeNumberAsFloat(object) {\n if (this.forceFloat32) {\n // float 32\n this.writeU8(0xca);\n this.writeF32(object);\n }\n else {\n // float 64\n this.writeU8(0xcb);\n this.writeF64(object);\n }\n }\n encodeBigInt64(object) {\n if (object >= BigInt(0)) {\n // uint 64\n this.writeU8(0xcf);\n this.writeBigUint64(object);\n }\n else {\n // int 64\n this.writeU8(0xd3);\n this.writeBigInt64(object);\n }\n }\n writeStringHeader(byteLength) {\n if (byteLength < 32) {\n // fixstr\n this.writeU8(0xa0 + byteLength);\n }\n else if (byteLength < 0x100) {\n // str 8\n this.writeU8(0xd9);\n this.writeU8(byteLength);\n }\n else if (byteLength < 0x10000) {\n // str 16\n this.writeU8(0xda);\n this.writeU16(byteLength);\n }\n else if (byteLength < 0x100000000) {\n // str 32\n this.writeU8(0xdb);\n this.writeU32(byteLength);\n }\n else {\n throw new Error(`Too long string: ${byteLength} bytes in UTF-8`);\n }\n }\n encodeString(object) {\n const maxHeaderSize = 1 + 4;\n const byteLength = utf8Count(object);\n this.ensureBufferSizeToWrite(maxHeaderSize + byteLength);\n this.writeStringHeader(byteLength);\n utf8Encode(object, this.bytes, this.pos);\n this.pos += byteLength;\n }\n encodeObject(object, depth) {\n // try to encode objects with custom codec first of non-primitives\n const ext = this.extensionCodec.tryToEncode(object, this.context);\n if (ext != null) {\n this.encodeExtension(ext);\n }\n else if (Array.isArray(object)) {\n this.encodeArray(object, depth);\n }\n else if (ArrayBuffer.isView(object)) {\n this.encodeBinary(object);\n }\n else if (typeof object === \"object\") {\n this.encodeMap(object, depth);\n }\n else {\n // symbol, function and other special object come here unless extensionCodec handles them.\n throw new Error(`Unrecognized object: ${Object.prototype.toString.apply(object)}`);\n }\n }\n encodeBinary(object) {\n const size = object.byteLength;\n if (size < 0x100) {\n // bin 8\n this.writeU8(0xc4);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // bin 16\n this.writeU8(0xc5);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // bin 32\n this.writeU8(0xc6);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large binary: ${size}`);\n }\n const bytes = ensureUint8Array(object);\n this.writeU8a(bytes);\n }\n encodeArray(object, depth) {\n const size = object.length;\n if (size < 16) {\n // fixarray\n this.writeU8(0x90 + size);\n }\n else if (size < 0x10000) {\n // array 16\n this.writeU8(0xdc);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // array 32\n this.writeU8(0xdd);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large array: ${size}`);\n }\n for (const item of object) {\n this.doEncode(item, depth + 1);\n }\n }\n countWithoutUndefined(object, keys) {\n let count = 0;\n for (const key of keys) {\n if (object[key] !== undefined) {\n count++;\n }\n }\n return count;\n }\n encodeMap(object, depth) {\n const keys = Object.keys(object);\n if (this.sortKeys) {\n keys.sort();\n }\n const size = this.ignoreUndefined ? this.countWithoutUndefined(object, keys) : keys.length;\n if (size < 16) {\n // fixmap\n this.writeU8(0x80 + size);\n }\n else if (size < 0x10000) {\n // map 16\n this.writeU8(0xde);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // map 32\n this.writeU8(0xdf);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large map object: ${size}`);\n }\n for (const key of keys) {\n const value = object[key];\n if (!(this.ignoreUndefined && value === undefined)) {\n this.encodeString(key);\n this.doEncode(value, depth + 1);\n }\n }\n }\n encodeExtension(ext) {\n if (typeof ext.data === \"function\") {\n const data = ext.data(this.pos + 6);\n const size = data.length;\n if (size >= 0x100000000) {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeU8(0xc9);\n this.writeU32(size);\n this.writeI8(ext.type);\n this.writeU8a(data);\n return;\n }\n const size = ext.data.length;\n if (size === 1) {\n // fixext 1\n this.writeU8(0xd4);\n }\n else if (size === 2) {\n // fixext 2\n this.writeU8(0xd5);\n }\n else if (size === 4) {\n // fixext 4\n this.writeU8(0xd6);\n }\n else if (size === 8) {\n // fixext 8\n this.writeU8(0xd7);\n }\n else if (size === 16) {\n // fixext 16\n this.writeU8(0xd8);\n }\n else if (size < 0x100) {\n // ext 8\n this.writeU8(0xc7);\n this.writeU8(size);\n }\n else if (size < 0x10000) {\n // ext 16\n this.writeU8(0xc8);\n this.writeU16(size);\n }\n else if (size < 0x100000000) {\n // ext 32\n this.writeU8(0xc9);\n this.writeU32(size);\n }\n else {\n throw new Error(`Too large extension object: ${size}`);\n }\n this.writeI8(ext.type);\n this.writeU8a(ext.data);\n }\n writeU8(value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setUint8(this.pos, value);\n this.pos++;\n }\n writeU8a(values) {\n const size = values.length;\n this.ensureBufferSizeToWrite(size);\n this.bytes.set(values, this.pos);\n this.pos += size;\n }\n writeI8(value) {\n this.ensureBufferSizeToWrite(1);\n this.view.setInt8(this.pos, value);\n this.pos++;\n }\n writeU16(value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setUint16(this.pos, value);\n this.pos += 2;\n }\n writeI16(value) {\n this.ensureBufferSizeToWrite(2);\n this.view.setInt16(this.pos, value);\n this.pos += 2;\n }\n writeU32(value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setUint32(this.pos, value);\n this.pos += 4;\n }\n writeI32(value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setInt32(this.pos, value);\n this.pos += 4;\n }\n writeF32(value) {\n this.ensureBufferSizeToWrite(4);\n this.view.setFloat32(this.pos, value);\n this.pos += 4;\n }\n writeF64(value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setFloat64(this.pos, value);\n this.pos += 8;\n }\n writeU64(value) {\n this.ensureBufferSizeToWrite(8);\n setUint64(this.view, this.pos, value);\n this.pos += 8;\n }\n writeI64(value) {\n this.ensureBufferSizeToWrite(8);\n setInt64(this.view, this.pos, value);\n this.pos += 8;\n }\n writeBigUint64(value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setBigUint64(this.pos, value);\n this.pos += 8;\n }\n writeBigInt64(value) {\n this.ensureBufferSizeToWrite(8);\n this.view.setBigInt64(this.pos, value);\n this.pos += 8;\n }\n}\n//# sourceMappingURL=Encoder.mjs.map","import { Encoder } from \"./Encoder.mjs\";\n/**\n * It encodes `value` in the MessagePack format and\n * returns a byte buffer.\n *\n * The returned buffer is a slice of a larger `ArrayBuffer`, so you have to use its `#byteOffset` and `#byteLength` in order to convert it to another typed arrays including NodeJS `Buffer`.\n */\nexport function encode(value, options) {\n const encoder = new Encoder(options);\n return encoder.encodeSharedRef(value);\n}\n//# sourceMappingURL=encode.mjs.map","import chalk from 'chalk';\n\nimport isNode from 'detect-node';\n\nimport axios from 'axios'\n\nimport { IPublishTransportRESTServerOptions, IInstrumentPayload, IPublisherTransport } from './../../commonTypes'\n\nimport { STSOptionsBase, STSAxiosConfig } from '@nsshunt/stsutils'\n\nimport { encode } from \"@msgpack/msgpack\";\n\nexport class PublishTransportRESTServer extends STSOptionsBase implements IPublisherTransport\n{\n constructor(options: IPublishTransportRESTServerOptions) {\n super(options);\n }\n\n override get options(): IPublishTransportRESTServerOptions {\n return super.options as IPublishTransportRESTServerOptions;\n }\n\n // Returns true for success or false for failure.\n Publish = async (payload: IInstrumentPayload): Promise<boolean> => {\n try {\n if (this.options.showPublishPayload) {\n console.log(chalk.grey(`PublishTransportRESTServer::Publish() url: [${this.options.url}]`))\n console.log(payload)\n }\n const encodedData: Uint8Array = encode(payload, { ignoreUndefined: true});\n //const buffer: Buffer = Buffer.from(encodedData); // copies the data\n //const buffer2: Buffer = Buffer.from(encodedData.buffer, encodedData.byteOffset, encodedData.byteLength); // does not copy the data\n //const headers = { 'Content-Type': 'application/octet-stream', 'Content-Length': encodedData.length };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const headers: any = { 'Content-Type': 'application/octet-stream' };\n //const headers = { 'Content-Type': 'application/json' };\n let retVal = null;\n //const processStart = performance.now();\n if (this.options.socketPath) {\n retVal = await axios({\n method: 'post',\n data: Buffer.from(encodedData),\n headers: headers,\n socketPath: this.options.socketPath\n });\n } else {\n if (isNode) {\n if (this.options.agentManager) {\n retVal = await axios(new STSAxiosConfig(this.options.url as string, 'post', headers)\n .withData(Buffer.from(encodedData))\n .withAgentManager(this.options.agentManager).config);\n } else {\n retVal = await axios(new STSAxiosConfig(this.options.url as string, 'post', headers)\n .withData(Buffer.from(encodedData)).config);\n }\n } else {\n //@@\n //const blob = new Blob([encodedData], { type: 'application/octet-stream' });\n const blob = new Blob([new Uint8Array(encodedData)], { type: 'application/octet-stream' });\n retVal = await axios(new STSAxiosConfig(this.options.url as string, 'post', headers)\n .withData(blob).config);\n }\n }\n\n if (retVal.status !== 200) {\n\n if (this.options.showPublishPayload) {\n console.log(chalk.red(`PublishTransportRESTServer::Publish() Error (_PerformPublishRESTAPI:_PerformPublish:#publishmessage): Invalid response from server: [${retVal.status}]`))\n }\n \n this.options.logger.debug(chalk.red(`Error (_PerformPublishRESTAPI:_PerformPublish:#publishmessage): Invalid response from server: [${retVal.status}]`));\n return false;\n } else {\n\n if (this.options.showPublishPayload) {\n console.log(chalk.grey(`PublishTransportRESTServer::Publish() _PerformPublishRESTAPI:_PerformPublish:#publishmessage: [${this.options.url}] - Valid response from server: [${retVal.status}]`))\n }\n \n //@@this.options.logger.debug(chalk.green(`_PerformPublishRESTAPI:_PerformPublish:#publishmessage: [${this.options.url}] - Valid response from server: [${retVal.status}]`));\n }\n\n return true;\n \n } catch (error) {\n\n if (this.options.showPublishPayload) {\n console.log(chalk.red(`PublishTransportRESTServer::Publish() Error (PublishRESTServer:_PerformPublishRESTAPI:Error: [${error}]`))\n }\n\n //@@\n //this.options.logger.error(chalk.red(`Error (PublishRESTServer:_PerformPublishRESTAPI:Error: [${error}]`));\n return false;\n }\n }\n\n async Close(): Promise<boolean> {\n if (this.options.agentManager) {\n this.options.agentManager.Terminate();\n }\n return true;\n }\n}\n","import chalk from 'chalk';\n\nimport isNode from 'detect-node'\n\nimport { STSOptionsBase } from '@nsshunt/stsutils'\n\nimport { IPublishInstrumentsOptions, IInstrumentPayload, TransportType, IPublisherTransport } from './../commonTypes'\n\nimport { PublishTransportRESTServer } from './publishers/publishTransportRESTServer'\n\nexport enum ePublishState {\n init,\n started,\n stopping\n}\n/**\n * This class managers the creation of instruments and the publication of instrumentation telemetry to the instrument manager service.\n */\nexport class PublishInstruments extends STSOptionsBase {\n #inPublish = false;\n #observer: NodeJS.Timeout | null = null;\n #publishState: ePublishState = ePublishState.init;\n #publisherTransport: IPublisherTransport | null = null;\n\n constructor(options: IPublishInstrumentsOptions) {\n super(options);\n\n this.#publisherTransport = null;\n switch (options.publishTransportBaseOptions.transportType) {\n case TransportType.RESTAPI :\n this.#publisherTransport = new PublishTransportRESTServer(options.publishTransportBaseOptions);\n break;\n }\n\n this.#UpdateState(ePublishState.init, \"constructor()\");\n }\n\n override get options(): IPublishInstrumentsOptions {\n return super.options as IPublishInstrumentsOptions;\n }\n\t\n async Publish(): Promise<boolean> {\n if (this.#inPublish) {\n return false;\n }\n\n if (this.#publisherTransport) {\n try {\n this.#inPublish = true;\n\n //const instrumentPayload: IInstrumentPayload = this.#GetPayloadData();\n if (this.options.publishInstrumentController) {\n const instrumentPayload: IInstrumentPayload = this.options.publishInstrumentController.GetPayloadData();\n return await this.#publisherTransport.Publish(instrumentPayload);\n }\n\n return false;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return false;\n } finally {\n this.#inPublish = false;\n }\n } else {\n return false;\n }\n }\n\n #PublishTimeoutLoop(publishInterval: number) { \n this.#observer = setTimeout(async () => {\n const start = performance.now();\n const result = await this.Publish();\n const end = performance.now();\n const diff = end - start;\n\n if (this.#publishState === ePublishState.started) {\n if (result === true) {\n this.#PublishTimeoutLoop(this.options.publishInterval - (diff));\n } else {\n this.#PublishTimeoutLoop(this.options.publishPostFailInterval - (diff));\n }\n }\n }, publishInterval);\n if (isNode) this.#observer.unref();\n }\n\n async StartPublish(): Promise<boolean> {\n if (this.#publishState !== ePublishState.init) {\n this.options.logger.debug(chalk.yellow(`StartPublish:${this.options.processContext.nid}: StartPublish called when not currently in the init state. Current State: [${this.#publishState}]`));\n return false;\n }\n this.#UpdateState(ePublishState.started, \"StartPublish()\");\n this.#PublishTimeoutLoop(this.options.publishInterval);\n return true;\n }\n\n #UpdateState(newState: ePublishState, comment: string): void {\n const previousState = this.#publishState;\n this.#publishState = newState;\n this.options.logger.debug(chalk.yellow(`#UpdateState:${this.options.processContext.nid}: Previous State: [${previousState}]. Current State: [${this.#publishState}]. Comment: [${comment}]`));\n }\n\n async EndPublish(): Promise<boolean> {\n if (this.#publishState !== ePublishState.started) {\n this.options.logger.debug(chalk.yellow(`EndPublish:${this.options.processContext.nid}: EndPublish called when not within the started state. Current State: [${this.#publishState}]`));\n return false;\n }\n this.#UpdateState(ePublishState.stopping, \"EndPublish() (1)\");\n if (this.#observer !== null) {\n clearTimeout(this.#observer);\n this.#observer = null;\n // Perform a final publish/flush of any remaining instrument data (such as logs etc.)\n await this.Publish();\n }\n if (this.#publisherTransport) {\n await this.#publisherTransport.Close();\n }\n this.#UpdateState(ePublishState.init, \"EndPublish() (2)\");\n return true;\n }\n}\n","/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport chalk from 'chalk';\n\nimport { GaugeTypes, Gauge, InstrumentBaseOptions, InstrumentBase, InstrumentBaseTelemetry,\n InstrumentLog, InstrumentLogTelemetry, InstrumentGauge, InstrumentHistogram, \n InstrumentVelocity, InstrumentTimerGauge, InstrumentObject\n} from '@nsshunt/stsobservability'\n\nimport { STSOptionsBase } from '@nsshunt/stsutils'\n\nimport { IPublishInstrumentControllerOptions, InstrumentDefinitions, InstrumentDefinition,\n IContextBase, IInstrumentPayload, IPublishInstrumentController, IPublishInstrumentsOptions } from './../commonTypes'\n\nimport { PublishInstruments } from './publishInstruments'\nexport enum ePublishState {\n init,\n started,\n stopping\n}\n/**\n * This class managers the creation of instruments and the publication of instrumentation telemetry to the instrument manager service.\n */\nexport class PublishInstrumentController extends STSOptionsBase implements IPublishInstrumentController {\n #instruments: Record<string, InstrumentBase> = { };\n #publisher: PublishInstruments | null = null;\n\n constructor(options: IPublishInstrumentControllerOptions) {\n super(options);\n this.SetupInstrumentation();\n\n const publishInstrumentsOptions: IPublishInstrumentsOptions = {\n logger: options.logger,\n processContext: { ...options.processContext },\n publishInterval: options.publishInterval,\n publishPostFailInterval: options.publishPostFailInterval,\n publishInstrumentController: this,\n publishTransportBaseOptions: { ...options.publishTransportBaseOptions }\n }\n this.#publisher = new PublishInstruments(publishInstrumentsOptions);\n\n if (this.options.autoStart === true) {\n this.StartPublish();\n }\n }\n\n override get options(): IPublishInstrumentControllerOptions {\n return super.options as IPublishInstrumentControllerOptions;\n }\n\n async StartPublish(): Promise<boolean> {\n return (this.#publisher as PublishInstruments).StartPublish();\n }\n\n async EndPublish(): Promise<boolean> {\n return (this.#publisher as PublishInstruments).EndPublish();\n }\n\n async Publish(): Promise<boolean> {\n return (this.#publisher as PublishInstruments).Publish();\n }\n\n LogEx = (message: string) => {\n this.UpdateInstrument(Gauge.LOGGER, {\n LogMessage: message\n } as InstrumentLogTelemetry);\n }\n\n #GetInstrument(instrumentName: Gauge): InstrumentBase {\n // get the gauge from the internal gauge map - created using the factory function\n return this.#instruments[instrumentName];\n }\n\n #ProcessTelemetryCommand(instrumentName: Gauge, telemetry: InstrumentBaseTelemetry): void {\n const instrument: InstrumentBase = this.#GetInstrument(instrumentName);\n if (instrument) {\n instrument.ProcessTelemetry(telemetry);\n }\n }\n\n // Instrument factory\n #CreateInstrument(instrumentType: GaugeTypes, options: InstrumentBaseOptions): InstrumentBase {\n let instrument: InstrumentBase;\n\n switch (instrumentType) {\n case GaugeTypes.INSTRUMENT_GAUGE :\n instrument = new InstrumentGauge(options);\n break;\n case GaugeTypes.INSTRUMENT_HISTOGRAM :\n instrument = new InstrumentHistogram(options);\n break;\n case GaugeTypes.INSTRUMENT_LOG :\n instrument = new InstrumentLog(options);\n break;\n case GaugeTypes.INSTRUMENT_OBJECT :\n instrument = new InstrumentObject(options);\n break;\n case GaugeTypes.INSTRUMENT_TIMER :\n instrument = new InstrumentTimerGauge(options);\n break;\n case GaugeTypes.INSTRUMENT_VELOCITY :\n instrument = new InstrumentVelocity(options);\n break;\n default :\n throw new Error(`Gauge type: [${instrumentType} not known.]`);\n }\n return instrument;\n }\n\n #CreateInstruments(payload: InstrumentDefinitions): void {\n payload.forEach((instrumentDefinition: InstrumentDefinition) => {\n const g: Gauge = instrumentDefinition[0];\n const gt: GaugeTypes = instrumentDefinition[1];\n const instrumentBaseOptions: InstrumentBaseOptions | undefined = instrumentDefinition[2];\n const instrument: InstrumentBase = this.#CreateInstrument(gt, instrumentBaseOptions as InstrumentBaseOptions);\n // Add to instrument map\n this.#instruments[g] = instrument;\n })\n }\n\n GetPayloadData(): IInstrumentPayload {\n const context = this.options.processContext;\n const instruments = this.#instruments;\n const payloadInstruments: Record<string, InstrumentBase> = { };\n for (const [key, value] of Object.entries(instruments)) {\n if (value instanceof InstrumentLog) {\n payloadInstruments[key] = { ...value.WithUseLatestMessages(true) } as InstrumentLog;\n } else {\n payloadInstruments[key] = { ...value } as InstrumentBase;\n }\n }\n\n return {\n context,\n instruments: payloadInstruments\n } as IInstrumentPayload;\n }\n\n SetupInstrumentation() {\n if (!this.options.instrumentDefinitions) {\n this.options.logger.debug(chalk.yellow(`SetupInstrumentation:${this.options.processContext.nid}: No instrument(s) defined within supplied options.`));\n return;\n }\n if (!this.options.processContext) {\n this.options.logger.debug(chalk.yellow(`SetupInstrumentation: No context defined within supplied options.`));\n return;\n }\n this.#CreateInstruments(this.options.instrumentDefinitions);\n }\n\n /**\n * Check if an instrument exists within the managed instrument collection\n * @param instrumentName \n * @returns \n */\n InstrumentExists(instrumentName: Gauge): boolean {\n if (this.#instruments[instrumentName]) {\n return true;\n }\n return false;\n }\n\n /**\n * Update instrument telemetry.\n * @param instrumentName \n * @param telemetry \n */\n UpdateInstrument(instrumentName: Gauge, telemetry: InstrumentBaseTelemetry): void {\n if (this.#instruments[instrumentName]) {\n this.#ProcessTelemetryCommand(instrumentName, telemetry);\n } else {\n // Error state\n this.options.logger.debug(chalk.red(`UpdateInstrument:${this.options.processContext.nid}: Attempted to UpdateInstrument before initialised.`));\n }\n }\n\n /**\n\t * Add additional instrument publishers. Usually invoked when adding workers to the app and/or async runners within a worker.\n\t * @param processContext \n\t * @returns Returns the newly created PublishInstrumentController\n\t */\n AddPublishInstrumentController(processContext: IContextBase): PublishInstrumentController {\n const options: IPublishInstrumentControllerOptions = { ...this.options };\n options.processContext = processContext;\n return new PublishInstrumentController(options);\n }\n}\n","// Individual STS plugin keys for provide/inject logic\nexport const STSInstrumentControllerPluginKey = Symbol('instrumentController')\n","import chalk from 'chalk';\n\nimport { inject } from 'vue'\n\nimport { PublishInstrumentController } from './publishInstrumentController'\nimport { IPublishInstrumentControllerOptions } from './../commonTypes'\n\nimport { STSInstrumentControllerPluginKey } from './stsPluginKeys';\n\nexport const GetSTSInstrumentControllerPluginKey = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKey = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\n// Create our use composable. This pattern is also used by vue router library with the useRoute and useRouter composables.\n// https://skirtles-code.github.io/vue-examples/patterns/global-properties.html#application-level-provide-inject\nexport const useSTSInstrumentControllerPlugin = (): PublishInstrumentController => inject(STSInstrumentControllerPluginKey) as PublishInstrumentController\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const GetSTSInstrumentController = (app: any): PublishInstrumentController => {\n return app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n}\n\nexport const STSInstrumentControllerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any \n install: (app: any, options: IPublishInstrumentControllerOptions) => {\n options.logger.debug(chalk.yellow(`STSInstrumentControllerPlugin:install:Start`));\n const aic = new PublishInstrumentController(options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: [app.config.globalProperties.$sts] does not exist.`));\n app.config.globalProperties.$sts = { };\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: created empty [app.config.globalProperties.$sts].`));\n } else {\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: [app.config.globalProperties.$sts] already exists.`));\n }\n app.config.globalProperties.$sts.aic = aic; //@@ for legacy implementation in oauthplugin - remove once PublishInstrumentControllerOptions is a seperate plugin\n app.config.globalProperties.$sts[STSInstrumentControllerPluginKey] = aic;\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: AgentInstrumentController installed into [app.config.globalProperties.$sts] using: [${String(STSInstrumentControllerPluginKey)}].`));\n\n // Assign App level provide for this STS plugin using symbol keys\n // https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\n app.provide(STSInstrumentControllerPluginKey, aic);\n options.logger.debug(chalk.cyan(`STSInstrumentControllerPlugin:install: AgentInstrumentController installed into 'provide' using: [${String(STSInstrumentControllerPluginKey)}].`));\n\n options.logger.debug(chalk.green(`STSInstrumentControllerPlugin:install:End`));\n }\n}\n","import { Gauge, GaugeTypes, InstrumentBaseOptions, InstrumentGaugeOptions,\n InstrumentObjectOptions, InstrumentLogOptions\n} from '@nsshunt/stsobservability'\n\nimport { IContextBase, InstrumentDefinitions } from './commonTypes'\n\nimport { SubscriptionTopic } from './commonTypes'\n\nexport type IInstrumentHashMap = Record<string, string>;\n\nexport interface IHistoField {\n label: string\n bucketLimit: number\n}\n\nexport enum influxDBDataType {\n intField = 'intField',\n floatField = 'floatField',\n stringField = 'stringField'\n}\n\nexport interface IFieldRecord {\n fieldName: string\n gauge: Gauge\n instrumentProperty: string\n dataType: string\n influxdbDataType: influxDBDataType\n timeSeriesIndex?: boolean\n quantile?: boolean // Does this field require a quantile ?\n histo?: IHistoField[],\n histoGauge?: Gauge,\n gaugeType: GaugeTypes,\n instrumentOptions?: InstrumentBaseOptions\n}\n\n//@@ current not used - delete if required ...\nexport interface IRedisQueryFilters {\n level1ContextField: string\n level2ContextField: string\n level3ContextField: string\n}\n\nexport interface IRedisIndexPrefixDefinitions {\n timeSeriesIndex: string\n timeSeriesPrefix: string\n instantIndex: string\n instantPrefix: string\n}\n\nexport interface IsubscriptionTopic {\n subscriptionTopic: SubscriptionTopic\n route: string,\n}\n\nexport interface IServiceDefinition {\n influxDBContextTags: string[],\n redisIndexPrefixDefinitions: IRedisIndexPrefixDefinitions\n fieldList: IFieldRecord[] // Specific additional fields (beyond the core fields) that this service supports\n GetPathFromContext: (context: IContextBase) => string\n redisQueryFilters: IRedisQueryFilters\n subscriptionTopics: IsubscriptionTopic[]\n}\n\nexport interface IGlobalServiceDefinitions {\n coreFieldList: IFieldRecord[] // Set of instruments that are used by all service types\n logFieldList: IFieldRecord[] // Set of log instruments that are used by all service types\n services: Record<string, IServiceDefinition>;\n}\n\nconst instrumentationObservationInterval = 1000;\nconst instrumentationTimeWindow = 600;\nconst consoleLogging = false;\nconst instrumentLogging = true;\n\nexport const globalServiceDefinitions: IGlobalServiceDefinitions = {\n coreFieldList: [\n { fieldName: 'requestCount', gauge: Gauge.REQUEST_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'errorCount', gauge: Gauge.ERROR_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'retryCount', gauge: Gauge.RETRY_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'authenticationCount', gauge: Gauge.AUTHENTICATION_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'authenticationErrorCount', gauge: Gauge.AUTHENTICATION_ERROR_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'authenticationRetryCount', gauge: Gauge.AUTHENTICATION_RETRY_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'velocity', gauge: Gauge.VELOCITY_GAUGE, instrumentProperty: 'va', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_VELOCITY },\n { fieldName: 'activeRequestCount', gauge: Gauge.ACTIVE_REQUEST_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.intField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions\n },\n { fieldName: 'coreCount', gauge: Gauge.CORE_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'rx', gauge: Gauge.NETWORK_RX_GAUGE, instrumentProperty: 'va', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_VELOCITY },\n { fieldName: 'tx', gauge: Gauge.NETWORK_TX_GAUGE, instrumentProperty: 'va', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_VELOCITY },\n { fieldName: 'timer', gauge: Gauge.TIMER_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_TIMER },\n { fieldName: 'duration', gauge: Gauge.DURATION_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions,\n histo: [\n { label: 'B10', bucketLimit: 10 },\n { label: 'B20', bucketLimit: 20 },\n { label: 'B50', bucketLimit: 50 },\n { label: 'B100', bucketLimit: 100 },\n { label: 'B1000', bucketLimit: 1000 },\n { label: 'B50000', bucketLimit: 50000 },\n { label: 'BInfinity', bucketLimit: -1 }\n ],\n histoGauge: Gauge.DURATION_HISTOGRAM_GAUGE\n },\n { fieldName: 'latency', gauge: Gauge.LATENCY_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions,\n histo: [\n { label: 'B10', bucketLimit: 10 },\n { label: 'B20', bucketLimit: 20 },\n { label: 'B50', bucketLimit: 50 },\n { label: 'B100', bucketLimit: 100 },\n { label: 'B1000', bucketLimit: 1000 },\n { label: 'B50000', bucketLimit: 50000 },\n { label: 'BInfinity', bucketLimit: -1 }\n ],\n histoGauge: Gauge.LATENCY_HISTOGRAM_GAUGE\n }\n ],\n logFieldList: [\n { fieldName: 'log', gauge: Gauge.LOGGER, instrumentProperty: 'val', dataType: 'string', timeSeriesIndex: false, quantile: false, influxdbDataType: influxDBDataType.stringField,\n gaugeType: GaugeTypes.INSTRUMENT_LOG,\n instrumentOptions: {\n consoleLogging: consoleLogging, \n instrumentLogging: instrumentLogging \n } as InstrumentLogOptions\n }\n ],\n services: {\n ['service']: {\n influxDBContextTags: [\n 'serviceId',\n 'serviceName',\n 'serviceVersion',\n 'serviceInstanceId',\n 'serviceInstanceProcessId',\n 'hostName',\n 'pid',\n 'ppid'\n ],\n redisIndexPrefixDefinitions: {\n timeSeriesIndex: 'idx:serviceIndexTimeSeries',\n timeSeriesPrefix: '/serviceTimeSeries:',\n instantIndex: 'idx:serviceIndexInstant',\n instantPrefix: '/serviceInstant:'\n },\n fieldList: [\n { fieldName: 'cpu', gauge: Gauge.CPU_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE, \n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions\n },\n { fieldName: 'connectionCount', gauge: Gauge.CONNECTION_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.intField, \n gaugeType: GaugeTypes.INSTRUMENT_GAUGE,\n instrumentOptions: {\n interval: instrumentationObservationInterval, \n sampleSize: instrumentationTimeWindow \n } as InstrumentGaugeOptions,\n },\n { fieldName: 'connectionPoolCount', gauge: Gauge.CONNECTION_POOL_TOTAL_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionIdleCount', gauge: Gauge.CONNECTION_POOL_IDLE_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionWaitingCount', gauge: Gauge.CONNECTION_POOL_WAITING_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'systemcpu', gauge: Gauge.CPU_SYSTEM_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'memory', gauge: Gauge.OBJECT_GAUGE, instrumentProperty: 'val', dataType: 'JSON', influxdbDataType: influxDBDataType.stringField, \n gaugeType: GaugeTypes.INSTRUMENT_OBJECT,\n instrumentOptions: {\n label: 'InstrumentObjectMaster'\n } as InstrumentObjectOptions\n }\n ],\n GetPathFromContext(context: IContextBase): string {\n //const { serviceId, serviceInstanceId, hostName, serviceInstanceProcessId, \n //pid, ppid, serviceName, serviceVersion } = instrumentPayload.context;\n const { serviceId, serviceInstanceId, serviceInstanceProcessId } = context;\n return `/${serviceId}/${serviceInstanceId}/${serviceInstanceProcessId}`; //@@ these should line up with the query filer names\n },\n redisQueryFilters: {\n level1ContextField: 'serviceType',\n level2ContextField: 'appid',\n level3ContextField: 'appinstanceid'\n },\n subscriptionTopics: [\n {\n subscriptionTopic: SubscriptionTopic.AllServicesCombined,\n route: '/metrics'\n },\n {\n subscriptionTopic: SubscriptionTopic.Services,\n route: '/metrics/services'\n },\n {\n subscriptionTopic: SubscriptionTopic.ServiceInstances,\n route: '/metrics/services/:key'\n },\n {\n subscriptionTopic: SubscriptionTopic.ServiceInstance,\n route: '/metrics/services/:key/:subkey'\n }\n ]\n },\n ['agent']: {\n influxDBContextTags: [\n 'id',\n 'hostName',\n 'agentName',\n 'threadId',\n 'asyncRunnerId'\n ],\n redisIndexPrefixDefinitions: {\n timeSeriesIndex: 'idx:agentIndexTimeSeries',\n timeSeriesPrefix: '/agentTimeSeries:',\n instantIndex: 'idx:agentIndexInstant',\n instantPrefix: '/agentInstant:'\n },\n fieldList: [\n { fieldName: 'childCount', gauge: Gauge.CHILD_COUNT, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE }\n ],\n //@@ need type declare in appframework ?? agent does not use appframework ... perhaps stspublisher\n GetPathFromContext(context: IContextBase): string {\n //const { nid, id, hostName, agentName, threadId, asyncRunnerId } = context;\n const { agentName, threadId, asyncRunnerId } = context;\n return `/${agentName}/${threadId}/${asyncRunnerId}`; //@@ these should line up with the query filer names\n },\n redisQueryFilters: {\n level1ContextField: 'serviceType',\n level2ContextField: 'appid', //@@ this should be named something else\n level3ContextField: 'appinstanceid' //@@ this should be named something else\n },\n subscriptionTopics: [\n {\n subscriptionTopic: SubscriptionTopic.AllAgentsCombined,\n route: '/metrics'\n },\n {\n subscriptionTopic: SubscriptionTopic.Agents,\n route: '/metrics/agents'\n },\n {\n subscriptionTopic: SubscriptionTopic.AgentWorkers,\n route: '/metrics/agents/:key'\n },\n {\n subscriptionTopic: SubscriptionTopic.AgentWorker,\n route: '/metrics/agents/:key/:subkey'\n }\n ]\n },\n ['lambda']: {\n influxDBContextTags: [\n 'technology',\n 'subTechnology',\n 'lambdaFunctionName',\n 'lambdaInstance',\n 'hostName',\n 'processId',\n 'parentProcessId',\n 'useCase',\n 'pattern'\n ],\n redisIndexPrefixDefinitions: {\n timeSeriesIndex: 'idx:lambdaIndexTimeSeries',\n timeSeriesPrefix: '/lambdaTimeSeries:',\n instantIndex: 'idx:lambdaIndexInstant',\n instantPrefix: '/lambdaInstant:'\n },\n fieldList: [\n { fieldName: 'cpu', gauge: Gauge.CPU_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionCount', gauge: Gauge.CONNECTION_COUNT_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionPoolCount', gauge: Gauge.CONNECTION_POOL_TOTAL_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionIdleCount', gauge: Gauge.CONNECTION_POOL_IDLE_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'connectionWaitingCount', gauge: Gauge.CONNECTION_POOL_WAITING_GAUGE, instrumentProperty: 'val', dataType: 'number', influxdbDataType: influxDBDataType.intField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'systemcpu', gauge: Gauge.CPU_SYSTEM_LOAD_GAUGE, instrumentProperty: 'val', dataType: 'number', timeSeriesIndex: true, quantile: true, influxdbDataType: influxDBDataType.floatField, gaugeType: GaugeTypes.INSTRUMENT_GAUGE },\n { fieldName: 'memory', gauge: Gauge.OBJECT_GAUGE, instrumentProperty: 'val', dataType: 'JSON', influxdbDataType: influxDBDataType.stringField, gaugeType: GaugeTypes.INSTRUMENT_OBJECT }\n ],\n //@@ need type declare in appframework\n GetPathFromContext(context: IContextBase): string {\n //const { serviceId, serviceInstanceId, hostName, serviceInstanceProcessId, \n //pid, ppid, serviceName, serviceVersion } = instrumentPayload.context;\n const { technology, subTechnology, lambdaInstance } = context;\n return `/${technology}/${subTechnology}/${lambdaInstance}`;\n },\n redisQueryFilters: {\n level1ContextField: 'serviceType',\n level2ContextField: 'technology',\n level3ContextField: 'subTechnology'\n },\n subscriptionTopics: [\n {\n subscriptionTopic: SubscriptionTopic.AllLambdasCombined, // uicontrollerlanding\n route: '/metrics'\n },\n {\n subscriptionTopic: SubscriptionTopic.LambdaTechnologies, // uicontrollerlambda\n route: '/metrics/lambdas'\n },\n {\n subscriptionTopic: SubscriptionTopic.LambdaSubTechnologies, // uicontrollerlambdasubtechnologies\n route: '/metrics/lambdas/:key'\n },\n {\n subscriptionTopic: SubscriptionTopic.LambdaSubTechnologiesInstance, // uicontrollerlambdasubtechnologiesinstance\n route: '/metrics/lambdas/:key/:subkey'\n }\n ]\n }\n }\n}\n\nexport const GetInstruments = (service: string): InstrumentDefinitions => {\n const fieldList = [\n ...globalServiceDefinitions.coreFieldList,\n ...globalServiceDefinitions.logFieldList,\n ...globalServiceDefinitions.services[service].fieldList\n ]\n const retVal: InstrumentDefinitions = [ ];\n fieldList.forEach(v => {\n if (v.instrumentOptions) {\n retVal.push([v.gauge, v.gaugeType, v.instrumentOptions]);\n } else {\n retVal.push([v.gauge, v.gaugeType]);\n }\n if (v.histo) {\n retVal.push([v.histoGauge as Gauge, GaugeTypes.INSTRUMENT_HISTOGRAM]);\n }\n });\n return retVal;\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { HistogramDataElement, QuantileDataElement, Gauge, GaugeTypes } from '@nsshunt/stsobservability'\nimport { quantile, histo, IServiceInstanceTelemetry, IAgentInstanceTelemetry, ILambdaInstanceTelemetry } from './../commonTypes'\nimport { globalServiceDefinitions } from './../globalServiceDefinitions'\n\n//import _cloneDeep from 'lodash.clonedeep'\nimport { ISTSLogger, JSONObject } from '@nsshunt/stsutils'\n\nexport interface IModelNode {\n val: number\n vf: string\n value: string\n}\n\nexport interface IModelNodeRawStringArray {\n val: string[]\n}\n\nexport interface IModelNodeJSONFromObject {\n val: any\n}\n\nexport interface IModelNodeQuantile {\n val: number\n vf: string\n value: string\n percentile: QuantileDataElement[]\n percentileFormatted: string\n}\n\nexport interface IModelNodeHist {\n hist: HistogramDataElement[]\n}\n\nexport interface IModelNodes {\n id: string\n instruments: Record<string, IModelNode | IModelNodeRawStringArray | IModelNodeJSONFromObject | IModelNodeQuantile | IModelNodeHist>\n canNavigate?: boolean\n options?: JSONObject\n}\n\nexport class ObservabilityModelUtils {\n static GetModelNode(data: number): IModelNode {\n const fixedSize = 2;\n const padLength = 9;\n try {\n return {\n val: data,\n vf: parseFloat(data.toString()).toFixed(fixedSize).padStart(padLength, ' '),\n value: parseFloat(data.toString()).toFixed(fixedSize)\n }\n } catch (error) {\n return {\n val: 0,\n vf: \"\",\n value: \"\"\n }\n }\n }\n\n static GetModelNodeRawStringArray(data: string[]): IModelNodeRawStringArray {\n try {\n return {\n val: data\n }\n } catch (error) {\n return {\n val: []\n }\n }\n }\n\n static GetModelNodeObject(data: any): IModelNodeJSONFromObject {\n try {\n return {\n val: JSON.parse(data)\n }\n } catch (error) {\n return {\n val: null\n }\n }\n }\n\n static GetModelNodeWithQuantile(data: number, quantileData: quantile): IModelNodeQuantile {\n let quantile: string = '';\n const quantileDataElementArray: QuantileDataElement[] = [ ];\n for (const [key, val] of Object.entries(quantileData)) {\n quantile += parseFloat((val as number).toFixed(2)).toString().padStart(8, ' ');\n quantileDataElementArray.push([\n key,\n val\n ])\n }\n\n const fixedSize = 2;\n const padLength = 9;\n try {\n return {\n val: data,\n vf: parseFloat(data.toString()).toFixed(fixedSize).padStart(padLength, ' '),\n value: parseFloat(data.toString()).toFixed(fixedSize),\n percentile: quantileDataElementArray,\n percentileFormatted: quantile\n }\n } catch (error) {\n return {\n val: 0,\n vf: '',\n value: '',\n percentile: [],\n percentileFormatted: ''\n }\n }\n }\n\n static GetModelNodeHistFromInfluxData(data: histo): IModelNodeHist {\n try {\n const histVal: HistogramDataElement[] = [ ];\n if (data) {\n for (const [key, val] of Object.entries(data)) {\n const dataElement: HistogramDataElement = [\n val as number,\n key,\n parseInt(key)\n ]\n histVal.push(dataElement)\n }\n }\n try {\n return {\n hist: histVal,\n }\n } catch (error) {\n return {\n hist: []\n }\n }\n } catch (error) {\n //console.log(chalk.red(`GetModelNodeHistFromInfluxData: Error [${error}]`));\n return {\n hist: []\n }\n }\n }\n\n static ParseModelNode = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNode((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNode(): Field not present: [${fieldName}], default to [0]`)\n model.instruments[gaugeName] = this.GetModelNode(0);\n }\n }\n\n static ParseModelNodeWithQuantile = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string, quantileFieldName: string) => {\n if (fieldName in data && quantileFieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile((data as any)[fieldName], (data as any)[quantileFieldName]);\n } else if (fieldName in data) {\n const dataVal = (data as any)[fieldName];\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeWithQuantile(): QuantileFieldName not present: [${quantileFieldName}], default to [${dataVal},{}]`)\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile(dataVal, {});\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeWithQuantile(): Field not present: [${fieldName}], QuantileFieldName not present: [${quantileFieldName}], default to [0,{}]`)\n model.instruments[gaugeName] = this.GetModelNodeWithQuantile(0, {});\n }\n }\n\n static ParseModelNodeHisto = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeHistFromInfluxData((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeHisto(): Field not present: [${fieldName}], default to [{}]`)\n model.instruments[gaugeName] = this.GetModelNodeHistFromInfluxData({});\n }\n }\n\n static ParseModelNodeObject = (model: IModelNodes, data: IServiceInstanceTelemetry | IAgentInstanceTelemetry | ILambdaInstanceTelemetry, parseLog: string[], gaugeName: Gauge, fieldName: string) => {\n if (fieldName in data) {\n model.instruments[gaugeName] = this.GetModelNodeObject((data as any)[fieldName]);\n } else {\n parseLog.push(`ObservabilityModelUtils:ParseModelNodeObject(): Field not present: [${fieldName}], default to [{}]`)\n model.instruments[gaugeName] = this.GetModelNodeObject({});\n }\n }\n\n static GetModelData(serviceType: string, model: IModelNodes, data: IServiceInstanceTelemetry | ILambdaInstanceTelemetry | IAgentInstanceTelemetry, parseLog: string[]) {\n const fieldList = [\n ...globalServiceDefinitions.coreFieldList,\n ...globalServiceDefinitions.services[serviceType].fieldList\n ]\n fieldList.forEach(field => {\n if (field.quantile) {\n ObservabilityModelUtils.ParseModelNodeWithQuantile(model, data, parseLog, field.gauge, field.fieldName, `${field.fieldName}_quantile`);\n } else if (field.gaugeType.localeCompare(GaugeTypes.INSTRUMENT_OBJECT) === 0) {\n ObservabilityModelUtils.ParseModelNodeObject(model, data, parseLog, field.gauge, field.fieldName);\n } else {\n ObservabilityModelUtils.ParseModelNode(model, data, parseLog, field.gauge, field.fieldName);\n }\n\n if (field.histo) {\n ObservabilityModelUtils.ParseModelNodeHisto(model, data, parseLog, field.histoGauge as Gauge, `${field.fieldName}_histo`);\n }\n });\n }\n\n static GetModelForService(id: string, data: IServiceInstanceTelemetry, logger: ISTSLogger): IModelNodes | null {\n try {\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n this.GetModelData('service', model, data, parseLog);\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n return model;\n } catch (error) {\n return null;\n }\n }\n\n static GetModelForLambda(id: string, data: ILambdaInstanceTelemetry, logger: ISTSLogger): IModelNodes | null {\n try {\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n this.GetModelData('lambda', model, data, parseLog);\n\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n\n static GetModelForAgent(id: string, data: IAgentInstanceTelemetry, logger: ISTSLogger): IModelNodes | null {\n try {\n if (Object.keys(data).length === 0) {\n return null;\n }\n\n const parseLog: string[] = [ ];\n const model: IModelNodes = {\n id,\n instruments: {\n }\n }\n\n this.GetModelData('agent', model, data, parseLog);\n\n model.instruments[Gauge.LOGGER] = ObservabilityModelUtils.GetModelNodeRawStringArray((data as any)['logMessages']);\n\n if (parseLog.length > 0) {\n parseLog.forEach(logEntry => logger.debug(logEntry));\n }\n\n return model;\n } catch (error) {\n return null;\n }\n }\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport chalk from 'chalk';\n\nimport { JSONObject } from '@nsshunt/stsutils'\nimport { ISubscriptionPayload, IServiceInstanceTelemetry, \n IAgentInstanceTelemetry, SubscriptionTopic, IServiceInstances, IServiceInstancesThreads, \n IServices, IAgentWorkers, IAgentWorkerRunners, IAgents,\n ILambdaInstanceTelemetry, ILambdaTechnologies, ILambdaSubTechnologies,ILambdaSubTechnologiesInstance } from './../commonTypes'\n\nimport { ObservabilityModelUtils, IModelNodes, IModelNode } from './observabilitymodelutils'\n\nimport { Gauge } from '@nsshunt/stsobservability'\n\nimport { ISTSLogger } from '@nsshunt/stsutils'\n\nexport interface IObservabilityPayloadTransformerOptions {\n logger: ISTSLogger\n maxLogLength: number\n}\n\nexport enum runStates {\n idle = \"idle\",\n started = \"started\",\n stopped = \"stopped\"\n}\n\nexport class ObservabilityPayloadTransformer {\n #serviceModel: Record<string, IModelNodes | null> = { };\n #agentModel: Record<string, IModelNodes | null> = { };\n #lambdaModel: Record<string, IModelNodes | null> = { };\n #options: IObservabilityPayloadTransformerOptions\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n constructor(options: IObservabilityPayloadTransformerOptions) {\n this.#options = options;\n }\n\n get serviceModel(): JSONObject {\n return this.#serviceModel;\n }\n\n get agentModel(): JSONObject {\n return this.#agentModel;\n }\n\n get lambdaModel(): JSONObject {\n return this.#lambdaModel;\n }\n\n TransformSubscriptionPayloadCallback(subscriptionPayload: ISubscriptionPayload): void {\n switch (subscriptionPayload.subscriptionKey.topic) {\n // Services -----------------------------------------------------------------------------\n case SubscriptionTopic.AllServicesCombined : // /\n this.CreateModelAllServicesCombined(subscriptionPayload);\n break;\n case SubscriptionTopic.Services : // /serviceId\n this.CreateModelServices(subscriptionPayload);\n break;\n case SubscriptionTopic.ServiceInstances : // /serviceId/serviceInstanceId\n this.CreateModelServiceInstances(subscriptionPayload);\n break;\n case SubscriptionTopic.ServiceInstance : // /serviceId/serviceInstanceId/serviceInstanceProcessId\n this.CreateModelServiceInstance(subscriptionPayload);\n break;\n\n // Lambda -----------------------------------------------------------------------------\n case SubscriptionTopic.AllLambdasCombined : // /\n this.CreateModelAllLambdasCombined(subscriptionPayload);\n break;\n case SubscriptionTopic.LambdaTechnologies : // /technology\n this.CreateModelLambdaTechnologies(subscriptionPayload);\n break;\n case SubscriptionTopic.LambdaSubTechnologies : // /technology/subTechnology\n this.CreateModelLambdaSubTechnologies(subscriptionPayload);\n break;\n case SubscriptionTopic.LambdaSubTechnologiesInstance : // /technology/subTechnology/subTechnologyInstance\n this.CreateModelLambdaSubTechnologiesInstance(subscriptionPayload);\n break;\n\n // Agents -----------------------------------------------------------------------------\n case SubscriptionTopic.AllAgentsCombined : // /\n this.CreateModelAllAgentsCombined(subscriptionPayload);\n break;\n case SubscriptionTopic.Agents : // /agentId\n this.CreateModelAgents(subscriptionPayload);\n break;\n case SubscriptionTopic.AgentWorkers :// /agentId/agentWorkerId\n this.CreateModelAgentWorkers(subscriptionPayload);\n break;\n case SubscriptionTopic.AgentWorker :// /agentId/agentWorkerId/asyncRunnerId\n this.CreateModelAgentWorker(subscriptionPayload);\n break;\n }\n }\n\n // --- [ Services ] ------------------------------------------------------------------------------------------------------------------------------------------------\n\n // /\n CreateModelAllServicesCombined(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined.toString()) === 0) {\n this.#serviceModel['STS-Service'] = ObservabilityModelUtils.GetModelForService('STS-Service', subscriptionPayload.data as IServiceInstanceTelemetry, this.#options.logger);\n if (this.#serviceModel['STS-Service'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllServicesCombined():Error: GetModelForService() returned null`));\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /serviceId\n CreateModelServices(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, serviceTelemetry] of Object.entries(subscriptionPayload.data as IServices)) {\n this.#serviceModel[serviceId] = ObservabilityModelUtils.GetModelForService(serviceId, serviceTelemetry, this.#options.logger);\n if (this.#serviceModel[serviceId] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelServices():Error: GetModelForService() returned null`));\n }\n }\n } catch (error) {\n return\n }\n }\n \n // /serviceId/serviceInstanceId\n CreateModelServiceInstances(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, service] of Object.entries(subscriptionPayload.data as IServiceInstances)) {\n for (const [serviceInstanceId, serviceInstanceTelemetry] of Object.entries(service)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (serviceInstanceTelemetry.cpu && serviceInstanceTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#serviceModel[serviceInstanceId] = ObservabilityModelUtils.GetModelForService(serviceInstanceId, serviceInstanceTelemetry, this.#options.logger);\n if (this.#serviceModel[serviceInstanceId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#serviceModel[serviceInstanceId] as IModelNodes).options = { serviceId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelServiceInstances():Error: GetModelForService() returned null`));\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // serviceId/serviceInstanceId/serviceInstanceProcessId\n CreateModelServiceInstance(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#serviceModel = { };\n for (const [serviceId, service] of Object.entries(subscriptionPayload.data as IServiceInstancesThreads)) {\n for (const [serviceInstanceId, serviceInstance] of Object.entries(service)) {\n for (const [serviceInstanceProcessId, serviceInstanceProcessTelemetry] of Object.entries(serviceInstance)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (serviceInstanceProcessTelemetry.cpu && serviceInstanceProcessTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#serviceModel[serviceInstanceProcessId] = ObservabilityModelUtils.GetModelForService(serviceInstanceProcessId, serviceInstanceProcessTelemetry, this.#options.logger);\n if (this.#serviceModel[serviceInstanceProcessId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#serviceModel[serviceInstanceProcessId] as IModelNodes).options = { serviceId, serviceInstanceId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelServiceInstance():Error: GetModelForService() returned null`));\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // --- [ Agents ] ------------------------------------------------------------------------------------------------------------------------------------------------\n \n // /\n CreateModelAllAgentsCombined(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined.toString()) === 0) {\n if (Object.keys(subscriptionPayload.data as IAgentInstanceTelemetry).length !== 0) {\n this.#agentModel['STS-Agent'] = ObservabilityModelUtils.GetModelForAgent('STS-Agent', subscriptionPayload.data as IAgentInstanceTelemetry, this.#options.logger);\n if (this.#agentModel['STS-Agent'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllAgentsCombined():Error: GetModelForAgent() returned null`));\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /agentId\n CreateModelAgents(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentInstanceTelemetry] of Object.entries(subscriptionPayload.data as IAgents)) {\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n this.#agentModel[agentId] = ObservabilityModelUtils.GetModelForAgent(agentId, agentInstanceTelemetry, this.#options.logger);\n if (this.#agentModel[agentId] !== null) {\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgents():Error: GetModelForAgent() returned null`));\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgent:CreateModel(): Error: [${error}]`));\n }\n }\n\n // /agentId/agentWorkerId\n CreateModelAgentWorkers(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentWorker] of Object.entries(subscriptionPayload.data as IAgentWorkers)) {\n for (const [agentWorkerId, agentInstanceTelemetry] of Object.entries(agentWorker)) {\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n //const threadKey = `${agentName}_${threadId}`;\n const threadKey = `${agentWorkerId}`;\n this.#agentModel[threadKey] = ObservabilityModelUtils.GetModelForAgent(threadKey, agentInstanceTelemetry, this.#options.logger);\n if (this.#agentModel[threadKey] !== null) {\n const coreCount = (((this.#agentModel[threadKey] as IModelNodes).instruments[Gauge.CORE_COUNT_GAUGE]) as IModelNode).val;\n (this.#agentModel[threadKey] as IModelNodes).canNavigate = coreCount > 0;\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#agentModel[threadKey] as IModelNodes).options = { agentId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelAgentWorkers():Error: GetModelForAgent() returned null`));\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgentThreads:CreateModel(): Error: [${error}]`));\n }\n }\n\n // /agentId/agentWorkerId/asyncRunnerId\n CreateModelAgentWorker(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#agentModel = { };\n for (const [agentId, agentWorker] of Object.entries(subscriptionPayload.data as IAgentWorkerRunners)) {\n for (const [agentWorkerId, asyncRunnerData] of Object.entries(agentWorker)) {\n for (const [asyncRunnerId, agentInstanceTelemetry] of Object.entries(asyncRunnerData)) {\n // Now only show those entries with an active timer - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (agentInstanceTelemetry.timer) {\n this.#agentModel[asyncRunnerId] = ObservabilityModelUtils.GetModelForAgent(asyncRunnerId, agentInstanceTelemetry, this.#options.logger);\n }\n }\n }\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`UIControllerAgentThread:CreateModel(): Error: [${error}]`));\n }\n }\n // --- [ Lambdas ] ------------------------------------------------------------------------------------------------------------------------------------------------\n\n // /\n CreateModelAllLambdasCombined(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n if (subscriptionPayload.subscriptionKey.topic.localeCompare(SubscriptionTopic.AllLambdasCombined.toString()) === 0) {\n this.#lambdaModel['STS-Lambda'] = ObservabilityModelUtils.GetModelForLambda('STS-Lambda', subscriptionPayload.data as ILambdaInstanceTelemetry, this.#options.logger);\n if (this.#lambdaModel['STS-Lambda'] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelAllLambdasCombined():Error: GetModelForLambda() returned null`));\n }\n }\n } catch (error) {\n this.#LogErrorMessage(error);\n return\n }\n }\n\n // /technologyId\n CreateModelLambdaTechnologies(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaTechnologies)) {\n this.#lambdaModel[technologyId] = ObservabilityModelUtils.GetModelForLambda(technologyId, technologyTelemetry, this.#options.logger);\n if (this.#lambdaModel[technologyId] === null) {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaTechnologies():Error: GetModelForLambda() returned null`));\n }\n }\n } catch (error) {\n return\n }\n }\n\n // /technologyId/subTechnologyId\n CreateModelLambdaSubTechnologies(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n //console.log(chalk.red(`CreateModelLambdaSubTechnologies()-zz: [${JSON.stringify(subscriptionPayload.data)}]`));\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaSubTechnologies)) {\n for (const [subTechnologyId, subTechnologyTelemetry] of Object.entries(technologyTelemetry)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (subTechnologyTelemetry.cpu && subTechnologyTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#lambdaModel[subTechnologyId] = ObservabilityModelUtils.GetModelForLambda(subTechnologyId, subTechnologyTelemetry, this.#options.logger);\n if (this.#lambdaModel[subTechnologyId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#lambdaModel[subTechnologyId] as IModelNodes).options = { technologyId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaSubTechnologies():Error: GetModelForLambda() returned null`));\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n\n // /technologyId/subTechnologyId/subTechnologyInstanceId\n CreateModelLambdaSubTechnologiesInstance(subscriptionPayload: ISubscriptionPayload): void {\n try {\n this.#lambdaModel = { };\n //console.log(chalk.red(`CreateModelLambdaSubTechnologies()-zz: [${JSON.stringify(subscriptionPayload.data)}]`));\n for (const [technologyId, technologyTelemetry] of Object.entries(subscriptionPayload.data as ILambdaSubTechnologiesInstance)) {\n for (const [subTechnologyId, subTechnologyTelemetry] of Object.entries(technologyTelemetry)) {\n for (const [subTechnologyInstanceId, subTechnologyInstanceTelemetry] of Object.entries(subTechnologyTelemetry)) {\n // Now only show those entries with an active CPU - other dead instances will come back from the server\n // within the 10 minute time series. So these entries will exists for quantile and histo figures.\n if (subTechnologyInstanceTelemetry.cpu && subTechnologyInstanceTelemetry.cpu > 0.0) {\n // Update the model with processed data\n this.#lambdaModel[subTechnologyInstanceId] = ObservabilityModelUtils.GetModelForLambda(subTechnologyInstanceId, subTechnologyInstanceTelemetry, this.#options.logger);\n if (this.#lambdaModel[subTechnologyInstanceId] !== null) {\n // Add additional options for navigation (in addition to the 'id' property already sent automatically\n (this.#lambdaModel[subTechnologyInstanceId] as IModelNodes).options = { technologyId, subTechnologyId };\n } else {\n this.#LogDebugMessage(chalk.red(`CreateModelLambdaSubTechnologiesInstance():Error: GetModelForLambda() returned null`));\n }\n }\n }\n }\n }\n } catch (error) {\n return\n }\n }\n}\n","/* eslint @typescript-eslint/no-unused-vars: 0 */ // --> OFF\n/* eslint @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { ISubscription, ISubscriptions, ISubscriptionPayload, SubscriptionTopic, IObservabilitySocketIOSubscriberOptions } from './../commonTypes'\n\nimport chalk from 'chalk';\n\nimport axios from 'axios';\n\n//import isNode from 'detect-node'\n//import { AgentManager, STSAxiosConfig } from '@nsshunt/stsutils';\n\nimport { STSAxiosConfig } from '@nsshunt/stsutils';\n\ndeclare interface ISocketSubscribeKeepAlive {\n id: string\n timeout?: number\n}\n\nexport class RESTClientSubscriber {\n #socketSubscribeKeepAlive: Record<string, ISocketSubscribeKeepAlive> = { };\n #options: IObservabilitySocketIOSubscriberOptions\n // This is required becuase each call to .bind create a new replica bound function - so we need the same instance for on/off event bindings.\n KeepAliveAckBoundFunction: any;\n #currentSubscriptions: ISubscriptions = [ ];\n\n constructor(options: IObservabilitySocketIOSubscriberOptions) {\n this.#options = options;\n }\n\n #LogDebugMessage(message: any): void {\n this.#options.logger.debug(message);\n }\n\n #LogErrorMessage(message: any): void {\n this.#options.logger.error(message);\n }\n\n async Subscribe(subscriptions: ISubscriptions): Promise<void> {\n subscriptions.map(async (subId) => {\n // Subscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n try {\n this.#AddKeepAlive(subId);\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subId);\n }\n });\n }\n\n UnSubscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n // Unsubscribe to socket.io event from stsinstrumentmanager\n this.#RemoveKeepAlive(subId);\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n });\n }\n\n UpdateModelCursor = (subscriptions: ISubscriptions): void => {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:UnSubscribe(): UpdateModelCursor()`));\n this.UnSubscribe(this.#currentSubscriptions);\n this.#currentSubscriptions = subscriptions;\n this.Subscribe(this.#currentSubscriptions);\n }\n\n async #InvokeRESTAPI(subscription: ISubscription): Promise<any> {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n // Service subscriptions\n const { subscriptionKey } = subscription;\n let url: string = '';\n switch (subscriptionKey.topic) {\n // Services -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllServicesCombined : // /metrics = getMetrics\n url = `/metrics`;\n break;\n case SubscriptionTopic.Services : // /metrics/:apptype = getApps apptype = services\n url = `/metrics/services`;\n break;\n case SubscriptionTopic.ServiceInstances :\n if (subscriptionKey.key) { // key = service_id /metrics/:apptype/:appid = getApp\n url = `/metrics/services/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Services): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.ServiceInstance :\n url = `/metrics/services/${subscriptionKey.key}`;\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = service instance id /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n url = `/metrics/services/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Services): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n\n // Lambdas -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllLambdasCombined : // /metrics = getMetrics\n url = `/metrics`;\n break;\n case SubscriptionTopic.LambdaTechnologies : // /metrics/:apptype = getApps apptype = services\n url = `/metrics/lambdas`;\n break;\n case SubscriptionTopic.LambdaSubTechnologies :\n if (subscriptionKey.key) { // key = service_id /metrics/:apptype/:appid = getApp\n url = `/metrics/lambdas/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Lambdas): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.LambdaSubTechnologiesInstance :\n url = `/metrics/lambdas/${subscriptionKey.key}`;\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = service instance id /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n url = `/metrics/lambdas/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Lambdas): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n\n // User Agents -------------------------------------------------------------------------------------------\n case SubscriptionTopic.AllAgentsCombined : // /metrics = getMetrics (@@ called twice ??)\n url = `/metrics`;\n break;\n case SubscriptionTopic.Agents : // /metrics/:apptype = getApps apptype = agents\n url = `/metrics/agents`;\n break;\n case SubscriptionTopic.AgentWorkers :\n if (subscriptionKey.key) { // key = agent instance id /metrics/:apptype/:appid = getApp\n url = `/metrics/agents/${subscriptionKey.key}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Agents): key not provided for subscription: [${JSON.stringify(subscriptionKey)}]`);\n }\n case SubscriptionTopic.AgentWorker : // /metrics/:apptype/:appid/:appinstanceid = getAppInstance\n if (subscriptionKey.key && subscriptionKey.subkey) { // key = agent instance id, subkey = agent instance worker id\n url = `/metrics/agents/${subscriptionKey.key}/${subscriptionKey.subkey}`;\n break;\n } else {\n throw new Error(`#OutputSubscription(Agents): key and/or subkey not provided for subscription: [${JSON.stringify(subscriptionKey.topic)}]`);\n }\n }\n if (url.localeCompare('') !== 0) {\n const endPointUrl = `${this.#options.urlBase}${url}`;\n\n let retVal: any;\n\n const start = performance.now();\n try {\n /*\n if (isNode && this.#options.agentManager) {\n retVal = await axios(new STSAxiosConfig(endPointUrl, 'get')\n .withDefaultHeaders()\n .withAgentManager(this.#options.agentManager).config);\n } else {\n retVal = await axios(new STSAxiosConfig(endPointUrl, 'get')\n .withDefaultHeaders().config);\n }\n */\n\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): axios call: endPointUrl: [${endPointUrl}]`));\n retVal = await axios(new STSAxiosConfig(endPointUrl, 'get')\n .withDefaultHeaders().config);\n\n if (retVal) {\n if (retVal.data) {\n //@@ could use silly here\n //@@this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): retVal.data: [${JSON.stringify(retVal.data)}]`));\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): no retVal.data`)); \n }\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#InvokeRESTAPI(): no retVal`));\n }\n\n const end = performance.now();\n const diff = end - start;\n //console.log(`total time: [${diff}]`);\n\n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllServicesCombined) === 0) {\n return retVal.data['services'];\n }\n \n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllAgentsCombined) === 0) {\n return retVal.data['agents'];\n }\n\n if (subscriptionKey.topic.localeCompare(SubscriptionTopic.AllLambdasCombined) === 0) {\n return retVal.data['lambdas'];\n }\n return retVal.data;\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:#InvokeRESTAPI(): subscriptionKey: [${subscription.subscriptionKey.id}], Error: [${error}]`));\n //console.error(chalk.red(`RESTClientSubscriber:#InvokeRESTAPI(): Error: [${error}]`));\n return null;\n }\n } else {\n return null;\n }\n }\n\n #GetData = async (subscription: ISubscription) => {\n try {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#GetData(): subscriptionKey: [${JSON.stringify(subscription.subscriptionKey)}`));\n const retVal = await this.#InvokeRESTAPI(subscription);\n if (retVal) {\n const payload: ISubscriptionPayload = {\n subscriptionKey: subscription.subscriptionKey,\n data: retVal\n };\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#GetData(): data returned: subscriptionKey: [${JSON.stringify(subscription.subscriptionKey)}, retVal: [${JSON.stringify(retVal)}]`));\n subscription.cb(payload);\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#GetData(): No data returned: subscriptionKey: [${JSON.stringify(subscription.subscriptionKey)}`));\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subscription);\n }\n }\n\n #SetupTimeout(socketSubscribeKeepAlive: ISocketSubscribeKeepAlive, subscription: ISubscription, timeout: number): number {\n return setTimeout(async () => {\n try {\n const start = performance.now();\n await this.#GetData(subscription);\n if (socketSubscribeKeepAlive.timeout) {\n const end = performance.now();\n const diff = end - start;\n let timeoutDuration = (this.#options.keepAlive ?? 1000) - diff;\n if (timeoutDuration < 500) {\n timeoutDuration = 500;\n }\n //@@this.#LogDebugMessage(chalk.yellow(`Total duration for subscription: [${diff}], waiting: [${timeoutDuration}]`));\n socketSubscribeKeepAlive.timeout = this.#SetupTimeout(socketSubscribeKeepAlive, subscription, timeoutDuration)\n } else {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber: Subscription removed: [${socketSubscribeKeepAlive.id}]. Processing terminate.`));\n }\n } catch (error) {\n this.#LogErrorMessage(chalk.red(`RESTClientSubscriber:#AddKeepAlive(): Error response: [${JSON.stringify(error)}]`));\n this.#RemoveKeepAlive(subscription);\n }\n }, timeout) as any\n }\n\n\n #AddKeepAlive(subscription: ISubscription): void {\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#AddKeepAlive(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n this.#RemoveKeepAlive(subscription);\n const socketSubscribeKeepAlive:ISocketSubscribeKeepAlive = {\n id: subscription.subscriptionKey.id,\n }\n socketSubscribeKeepAlive.timeout = this.#SetupTimeout(socketSubscribeKeepAlive, subscription, (this.#options.keepAlive ?? 1000));\n this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id] = socketSubscribeKeepAlive;\n\n this.#LogDebugMessage(chalk.yellow(`RESTClientSubscriber:#AddKeepAlive(): Getting Data: subscriptionKey: [${subscription.subscriptionKey.id}]`));\n this.#GetData(subscription);\n }\n\n #RemoveKeepAlive(subscription: ISubscription): void {\n if (this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id]) {\n this.#LogDebugMessage(chalk.gray(`RESTClientSubscriber:#RemoveKeepAlive(): subscriptionKey: [${subscription.subscriptionKey.id}]`));\n clearTimeout(this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout);\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id].timeout;\n delete this.#socketSubscribeKeepAlive[subscription.subscriptionKey.id];\n }\n }\n}","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n return _v4(options, buf, offset);\n}\nexport default v4;\n","/* eslint @typescript-eslint/no-unused-vars: 0, @typescript-eslint/no-explicit-any: 0 */ // --> OFF\nimport { Socket } from 'socket.io-client'\n\nimport { type ISubscriptions, ClientToServerEvents, ISubscriptionPayload, ServerToClientEvents, ISubscription } from './../commonTypes'\n\nimport { defaultLogger } from '@nsshunt/stsutils'\n\nimport chalk from 'chalk';\n\nimport { SocketIoClient, STSDefaultClientToServerEvents, STSDefaultServerToClientEvents } from '@nsshunt/stssocketioutils'\n\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { IObservabilitySubscriberManagerOptions } from './../commonTypes'\n\nconst SOCKET_NAMESPACE = 'stsinstrumentmanager/stsmonitor'\n\nexport class SocketClientSubscriber extends SocketIoClient<ServerToClientEvents, ClientToServerEvents> {\n #options: IObservabilitySubscriberManagerOptions;\n #id: string;\n #currentSubscriptions: ISubscriptions = [ ];\n\n protected subscriptions: Record<string, ISubscription> = { };\n\n constructor(options: IObservabilitySubscriberManagerOptions) {\n super('STSVueTilsTester');\n this.#id = uuidv4();\n this.#options = options;\n\n this.LogDebugMessage(chalk.cyan(`${this.logPrefix}Start()`));\n const url = `${this.#options.instrumentManagerEndpoint}:${this.#options.instrumentManagerPort}/${SOCKET_NAMESPACE}/`;\n this.LogDebugMessage(chalk.cyan(`${this.logPrefix}SetupSocket() url: [${url}]`));\n this.WithAddress(url)\n .WithLogger(this.logger ?? defaultLogger)\n .SetupSocket();\n }\n \n get id() {\n return this.#id;\n }\n\n get logPrefix() {\n if (this.#options) {\n return `stsuxvue:ObservabilitySubscriberManager[${this.#options.consumeInstrumentationMode}]:`;\n } else {\n return `stsuxvue:ObservabilitySubscriberManager:`;\n }\n }\n\n UpdateModelCursor = (subscriptions: ISubscriptions): void => {\n this.UnSubscribe(this.#currentSubscriptions);\n this.#currentSubscriptions = subscriptions;\n this.Subscribe(this.#currentSubscriptions);\n }\n\n Subscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n // Subscribe to socket.io event from stsinstrumentmanager\n try {\n if (this.socket) {\n this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:Subscribe(): Sending subscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n this.socket.timeout(1000).emit('subscribe', subId.subscriptionKey, (error: Error, data: any) => {\n if (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: [${error}], data: [${data}]`));\n } else {\n this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:Subscribe(): Response: [${JSON.stringify(data)}]`));\n this.subscriptions[subId.subscriptionKey.id] = subId;\n }\n });\n }\n } catch (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:Subscribe(): Error: response: [${JSON.stringify(error)}]`));\n }\n });\n }\n\n UnSubscribe(subscriptions: ISubscriptions) {\n subscriptions.map(async (subId) => {\n try {\n if (this.socket) {\n this.LogDebugMessage(chalk.yellow(`ObservabilitySocketIOSubscriber:UnSubscribe(): Sending unsubscribe: subscriptionKey: [${subId.subscriptionKey.id}]`));\n this.socket.timeout(1000).emit('unsubscribe', subId.subscriptionKey, (error: Error, data: any) => {\n if (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error: [${error}], data: [${data}]`));\n } else {\n this.LogDebugMessage(chalk.green(`ObservabilitySocketIOSubscriber:UnSubscribe(): Response: [${JSON.stringify(data)}]`));\n delete this.subscriptions[subId.subscriptionKey.id];\n }\n });\n }\n } catch (error) {\n this.LogErrorMessage(chalk.red(`ObservabilitySocketIOSubscriber:UnSubscribe(): Error response: [${JSON.stringify(error)}]`));\n }\n });\n }\n\n protected SocketConnect(socket: Socket<STSDefaultServerToClientEvents, STSDefaultClientToServerEvents>): void {\n this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SocketConnect(): Socket ID: [${socket.id}]`));\n this.UpdateModelCursor(this.#currentSubscriptions);\n }\n\n protected SocketError(error: Error): void {\n this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketError(): Error: [${error}]`))\n }\n\n protected SetupSocketEvents(socket: Socket<STSDefaultServerToClientEvents, STSDefaultClientToServerEvents>): void {\n this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): Socket ID: [${socket.id}]`));\n if (this.socket) {\n this.socket.on('subscriptionData', (data: ISubscriptionPayload, cb) => {\n this.LogDebugMessage(chalk.magenta(`${this.logPrefix}SetupSocketEvents(): on subscriptionData(): Socket ID: [${socket.id}]`));\n const subId = data.subscriptionKey.id;\n const currentSubscriptions = Object.keys(this.subscriptions).toString();\n if (this.subscriptions[subId]) {\n this.subscriptions[subId].cb(data);\n cb(`stsuxvue:subscriptionData Response: [${JSON.stringify(data.subscriptionKey)}], Current Subscriptions: [${currentSubscriptions}]`);\n } else {\n cb(`stsuxvue:subscriptionData Response: No subscription found in subscriptions: [${JSON.stringify(data.subscriptionKey)}], Current Subscriptions: [${currentSubscriptions}]`);\n }\n });\n }\n }\n\n protected SocketConnectError(error: Error): void {\n this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketConnectError(): Error: [${error}]`))\n }\n\n protected SocketDisconnect(reason: string): void {\n this.LogErrorMessage(chalk.red(`${this.logPrefix}SocketDisconnect(): reason: [${reason}]`))\n }\n}\n"],"names":["SubscriptionTopic","TransportType","InstrumentPayloadType","RequestLoggerMiddlewareEventName","STSOptionsBase","TinyEmitter","require$$0","conversions","route","require$$1","colorConvert","module","chalk","styles","ansiStyles","require$$2","require$$3","consoleLogging","instrumentLogging","exports","encode","size","STSAxiosConfig","ePublishState","inject","influxDBDataType","quantile","runStates","SocketIoClient","uuidv4","defaultLogger"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33]}
|