@nsshunt/stsvueutils 1.0.46 → 1.0.48

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.
@@ -39,9 +39,8 @@ import { inject } from "vue";
39
39
  import debugModule from "debug";
40
40
  import { STSInstrumentControllerPluginKey, GetSTSInstrumentController, PublishMessageCommands, GetSTSInstrumentControllerPluginKey } from "@nsshunt/stspublisherserver";
41
41
  import { Gauge } from "@nsshunt/stsinstrumentation";
42
- import { ModelDelimeter } from "@nsshunt/stsmodels";
42
+ import { ModelDelimeter, Sleep } from "@nsshunt/stsutils";
43
43
  import { defineStore } from "pinia";
44
- import { Sleep } from "@nsshunt/stsutils";
45
44
  const STSStoragePluginKey = Symbol("storage");
46
45
  const STSEmitterPluginKey = Symbol("emitter");
47
46
  const STSWorkerManagerPluginKey = Symbol("workerManager");
@@ -575,6 +574,12 @@ class STSWorkerManager {
575
574
  });
576
575
  update = true;
577
576
  }
577
+ if (runner.instrumentData.childCount) {
578
+ runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CHILD_COUNT, {
579
+ val: runnerEx.instrumentData.childCount
580
+ });
581
+ update = true;
582
+ }
578
583
  if (update) {
579
584
  store.Update(workerEx, runnerEx);
580
585
  }
@@ -608,7 +613,8 @@ class STSWorkerManager {
608
613
  duration: 0,
609
614
  latency: 0,
610
615
  activeRequestCount: 0,
611
- message: []
616
+ message: [],
617
+ childCount: 0
612
618
  },
613
619
  Stop: async () => __privateGet(this, _StopRunner).call(this, workerEx, runnerEx)
614
620
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stsvueutils.mjs","sources":["../src/plugins/stsPluginKeys.ts","../node_modules/tiny-emitter/index.js","../src/plugins/emitter.ts","../node_modules/js-cookie/dist/js.cookie.mjs","../src/plugins/stsStorage.ts","../src/plugins/storage.ts","../src/stores/TelemetryStore.ts","../src/plugins/stsTestWorkerDefinitions.ts","../src/plugins/workerManager.ts","../src/plugins/requestResponseHelper.ts","../src/plugins/workerInstance.ts"],"sourcesContent":["// Individual STS plugin keys for provide/inject logic\nexport const STSStoragePluginKey = Symbol('storage')\nexport const STSEmitterPluginKey = Symbol('emitter')\nexport const STSWorkerManagerPluginKey = Symbol('workerManager')\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","import { inject } from 'vue'\n\nimport { STSEmitterPluginKey } from './stsPluginKeys';\n\nimport * as te from 'tiny-emitter';\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 useSTSEmitterPlugin = (): te.TinyEmitter => inject(STSEmitterPluginKey) as te.TinyEmitter\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSEmitterPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any) => {\n const tinyEmitter: te.TinyEmitter = new te.TinyEmitter();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSEmitterPluginKey] = tinyEmitter;\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(STSEmitterPluginKey, tinyEmitter);\n }\n}\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Debug from 'debug';\nconst debug = Debug(`proc:${process.pid}:storage.ts`);\n\nimport Cookies from 'js-cookie'\nimport type { JSONObject } from \"@nsshunt/stsutils\";\n\nlet PREFIX = '_ststra_';\n\nexport interface IStsStorage<T> {\n\tget(key: string): T | null\n\tset(key: string, value: T, options?: JSONObject): void\n\tremove(key: string): void\n}\n\nexport enum ClientStorageType {\n\tLOCAL_STORAGE = 'LocalStorage', //@@ todo\n\tSESSION_STORAGE = 'SessionStorage',\n\tCOOKIE_STORAGE = 'CookieStorage',\n\tMEMORY_STORAGE = 'MemoryStorage' //@@ todo\n}\n\nclass CookieStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const raw = Cookies.get(PREFIX + key);\n if (raw) {\n return JSON.parse(raw);\n } else {\n return null;\n }\n }\n\n set = (key: string, value: T, options: JSONObject = { }) => {\n let cookieAttributes: Cookies.CookieAttributes = { };\n if ('https:' === window.location.protocol) {\n cookieAttributes = {\n secure: true,\n sameSite: 'none'\n };\n }\n\t\n if (options && options.daysUntilExpire) {\n cookieAttributes.expires = options.daysUntilExpire;\n } else {\n cookieAttributes.expires = 1;\n }\n debug(`CookieStorage.set: key: ${key}, value: [${value}]`);\n Cookies.set(PREFIX + key, JSON.stringify(value), cookieAttributes);\n }\n\n remove = (key: string): void => {\n Cookies.remove(PREFIX + key);\n }\n}\n\nclass SessionStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = sessionStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`SessionStorage.set: key: ${key}, value: [${value}]`);\n sessionStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n sessionStorage.removeItem(PREFIX + key);\n }\n}\n\nclass LocalStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = localStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`LocalStorage.set: key: ${key}, value: [${value}]`);\n localStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n localStorage.removeItem(PREFIX + key);\n }\n}\n\nclass MemoryStorage<T> implements IStsStorage<T>\n{\n #store: Record<string, T> = { };\n\n get = (key: string): T | null => {\n const value: T = this.#store[PREFIX + key];\n if (value) {\n return value;\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`MemoryStorage.set: key: ${key}, value: [${value}]`);\n this.#store[PREFIX + key] = value;\n }\n \n remove = (key: string): void => {\n delete this.#store[PREFIX + key];\n }\n}\n\nexport interface IClientStorageOptions {\n\tclientStorageType: ClientStorageType\n\tusePrefix: boolean\n\tstorageOptions?: JSONObject\n}\n\nexport class ClientStorageFactory<T>\n{\n #storage: IStsStorage<T>;\n\n constructor(options: IClientStorageOptions) {\n if (options.usePrefix === false) {\n PREFIX = '';\n }\n switch (options.clientStorageType) {\n case ClientStorageType.SESSION_STORAGE :\n this.#storage = new SessionStorage<T>();\n break;\n case ClientStorageType.LOCAL_STORAGE :\n this.#storage = new LocalStorage<T>();\n break;\n case ClientStorageType.COOKIE_STORAGE :\n this.#storage = new CookieStorage<T>();\n break;\n case ClientStorageType.MEMORY_STORAGE :\n this.#storage = new MemoryStorage<T>();\n break;\n default:\n throw new Error(`Unknown [${options.clientStorageType}] storage type.`);\n }\n return;\n }\n\n GetStorage(): IStsStorage<T>\n {\n return this.#storage;\n }\n}\n","import { inject } from \"vue\";\n\n// Declare STS plugin keys (for provide)\n// https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\nimport { STSStoragePluginKey } from './stsPluginKeys';\n\nimport { ClientStorageType, ClientStorageFactory, type IStsStorage } from './stsStorage'\n\nexport interface ISTSStoragePluginOptions {\n\tclientStorageType: ClientStorageType\n}\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 useSTSStoragePlugin = <T>(): IStsStorage<T> => inject(STSStoragePluginKey) as IStsStorage<T>\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSStoragePlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: <T>(app: any, options: ISTSStoragePluginOptions) => {\n const cs = new ClientStorageFactory<T>({clientStorageType: options.clientStorageType, usePrefix: true});\n\n const pluginInstance = cs.GetStorage();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n // This allows access to the $sts property within templates.\n // Also, outside of script setup or setup(), this.$sts can be used.\n // If access is required within script setup, use the useSTSStoragePlugin composable function. Example;\n // import { useSTSStoragePlugin } from './storage';\n // const STSStorageString = useSTSStoragePlugin<string>();\n //\n // Note: An alternate to get access to this global is to use the hidden API call such as;\n // const app: ComponentInternalInstance | null = getCurrentInstance();\n // Assign the $sts plugin helper (legacy method - see below (injects) for updated usage)\n // let $sts: any\n // if (app) $sts = app.appContext.config.globalProperties.$sts;\n\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSStoragePluginKey] = pluginInstance;\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(STSStoragePluginKey, pluginInstance);\n }\n}\n","import { defineStore } from 'pinia'\n\nimport type { IWorker, IWorkerEx, IRunnerEx, IRunner, ITelemetryStore } from './../plugins/stsTestWorkerDefinitions'\n\n// https://pinia.vuejs.org/\n// https://seb-l.github.io/pinia-plugin-persist/\nexport const TelemetryStore = defineStore('__sts__TelemetryStore', {\n // State\n // https://pinia.vuejs.org/core-concepts/state.html\n state: (): ITelemetryStore => {\n return {\n workers: { }\n }\n },\n\n // Getters\n // https://pinia.vuejs.org/core-concepts/getters.html\n\n // Actions\n // https://pinia.vuejs.org/core-concepts/actions.html\n actions: {\n RemoveWorker(workerEx: IWorkerEx) {\n delete this.workers[workerEx.id];\n },\n\n RemoveRunner(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n const worker: IWorker = this.workers[workerEx.id];\n if (worker && worker.runners) {\n delete worker.runners[runnerEx.id];\n }\n },\n\n Update(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n if (!this.workers[workerEx.id]) {\n // Create a new telemetry record\n this.workers[workerEx.id] = {\n id: workerEx.id,\n state: workerEx.state,\n primaryThreadWorkerOptions: { ...workerEx.primaryThreadWorkerOptions },\n workerThreadWorkerOptions: { ...workerEx.workerThreadWorkerOptions },\n runners: { }\n } as IWorker\n }\n const worker: IWorker = this.workers[workerEx.id];\n // Now check for the async runner\n if (worker.runners) {\n if (!worker.runners[runnerEx.id]) {\n // Create a new asyncRunnerInstance telemetry record\n const runner: IRunner = {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData },\n }\n worker.runners[runner.id] = runner;\n } else {\n const runner: IRunner = worker.runners[runnerEx.id];\n runner.instrumentData = { ...runnerEx.instrumentData }\n }\n }\n }\n }\n});\n","import type { IPublishMessagePayloadContentBase, IAsyncRunnerContext, \n PublishInstrumentControllerV2, IPublishMessagePayload } from '@nsshunt/stspublisherserver'\n\nexport interface ISTSAgentWorkerMessagePort extends IPublishMessagePayloadContentBase {\n port: MessagePort\n options: IWorkerOptions\n}\n\nexport enum IRunnerState {\n\tcreated = 'created',\n\trunning = 'running',\n\tstopped = 'stopped',\n\tpaused = 'paused',\n\terror = 'error',\n}\n\nexport interface IRunnerTelemetry {\n\trequestCount: number // requestCount\n\terrorCount: number\n\tretryCount: number\n\tauthenticationCount: number\n\tvelocity: number\n\tcoreCount: number\n\ttimer: number\n\tduration: number\n\tlatency: number\n\tactiveRequestCount: number\n\tmessage: string[]\n}\n\nexport interface IRunner {\n\tid: number\n\tasyncRunnerContext: IAsyncRunnerContext\n\toptions: IRunnerOptions\n\tstate: IRunnerState\n\tinstrumentData: IRunnerTelemetry\n}\n\nexport interface IRunnerEx extends IRunner {\n publishInstrumentController: PublishInstrumentControllerV2\n Stop: () => Promise<boolean>\n}\n\nexport enum IWorkerState {\n\tstarting = 'starting',\n\tstarted = 'started',\n\tstopped = 'stopped'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerOptions {\n hostName: string\n agentId: string\n userAgent: string\n}\n\nexport type Runners = Record<string, IRunner>\n\nexport interface IWorker {\n\tid: number\n\tstate: IWorkerState\n primaryThreadWorkerOptions: IWorkerOptions\n\tworkerThreadWorkerOptions: IWorkerOptions\n\trunners?: Runners // Will be created by utility helper\n}\n\nexport type Workers = Record<string, IWorker>\n\nexport interface IPrimaryWorker {\n ProcessMessageFromWorker(workerPort: MessagePort, publishMessagePayload: IPublishMessagePayload): Promise<void>\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IRunnerOptions {\n\n}\n\nexport interface IWorkerEx extends IWorker {\n\tworker: Worker\n primaryWorker: IPrimaryWorker\n\trunnersEx: Record<string, IRunnerEx>\n\tAddRunner: (runnerOptions: IRunnerOptions) => IRunnerEx\n\tStopRunner: (runner: IRunnerEx) => Promise<boolean>\n\tStop: () => Promise<boolean>\n}\n\nexport interface ISTSTestWorkerOptions {\n messageMod: number\n iterations: number\n}\n\nexport interface ITelemetryStore {\n\tworkers: Workers\n}\n\nexport interface ITestRunnerTelemetryPayload extends IPublishMessagePayloadContentBase {\n\trunner: IRunner\n}\n\nexport interface IWorkerFactory {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createPrimaryThreadWorker: (app: any, options: IWorkerOptions) => IPrimaryWorker\n\tcreateWorkerThreadWorker: () => Worker // | wt.Worker\n get workerThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n get primaryThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n}\n\nexport interface IWorkerManagerOptions {\n workerFactory: IWorkerFactory\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerManager`);\n\n//import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers\nimport { type IAsyncRunnerContext, IPublishMessagePayload, IPublishMessagePayloadContentBase, \n type PublishMessageCommand, PublishMessageCommands, type AgentPublishInstrumentController } from '@nsshunt/stspublisherserver' \n \nimport { Gauge, InstrumentGaugeTelemetry } from '@nsshunt/stsinstrumentation'\n\nimport { ModelDelimeter } from '@nsshunt/stsmodels'\n\nimport { TelemetryStore } from './../stores/TelemetryStore'\n//import { ApplicationStore } from './../stores/applicationStore'\n\nimport type { ISTSAgentWorkerMessagePort, IWorkerEx, IRunner, IRunnerEx,\n ITestRunnerTelemetryPayload, IRunnerOptions, IRunnerTelemetry,\n IWorkerManagerOptions, IWorkerFactory } from './stsTestWorkerDefinitions'\n\nimport { IWorkerState, IRunnerState } from './stsTestWorkerDefinitions'\nimport { Sleep } from '@nsshunt/stsutils';\nimport { inject } from 'vue';\n\nimport { STSInstrumentControllerPluginKey, GetSTSInstrumentControllerPluginKey, GetSTSInstrumentController } from '@nsshunt/stspublisherserver'\nimport { STSWorkerManagerPluginKey } from './stsPluginKeys';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport colors from 'colors'\n\nexport class STSWorkerManager {\n //#agentSession: string = null;\n #workersEx: Record<string, IWorkerEx> = { };\n #runner = 0;\n #workerId = 0;\n #options: IWorkerManagerOptions;\n #STSInstrumentController: AgentPublishInstrumentController\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #app: any\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(app: any, options?: IWorkerManagerOptions) {\n this.#app = app;\n if (options) {\n this.#options = options;\n } else {\n this.#options = { } as IWorkerManagerOptions;\n }\n\n debug(`CompareSTSInstrumentControllerPluginKeyWMEx(): [${CompareSTSInstrumentControllerPluginKeyWMEx()}]`);\n\n debug(`Attempting to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n //this.#STSInstrumentController = app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n //this.#STSInstrumentController = app.config.globalProperties.$sts[GetSTSInstrumentControllerPluginKey()]\n this.#STSInstrumentController = GetSTSInstrumentController(app);\n //this.#STSInstrumentController = app.config.globalProperties.$sts.aic;\n\n debug(this.#STSInstrumentController);\n debug('keys within app.config.globalProperties.$sts');\n for (const [key, ] of Object.entries(app.config.globalProperties.$sts)) {\n debug(`${key}`);\n }\n\n if (!this.#STSInstrumentController) {\n debug(`Failed to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n }\n }\n \n get WorkersEx(): Record<string, IWorkerEx>\n {\n return this.#workersEx;\n }\n\n AddWorker = async (useWorkerFactory?: IWorkerFactory): Promise<IWorkerEx> => {\n let workerFactory: IWorkerFactory;\n if (useWorkerFactory) {\n // Use the supplied workFactory\n workerFactory = useWorkerFactory;\n } else {\n // Use the default workFactory\n workerFactory = this.#options.workerFactory\n }\n const stsWorkerEx: IWorkerEx = {\n id: this.#workerId++, // uuidv4()\n worker: workerFactory.createWorkerThreadWorker(),\n primaryWorker: workerFactory.createPrimaryThreadWorker(this.#app, workerFactory.primaryThreadWorkerOptions),\n state: IWorkerState.starting,\n workerThreadWorkerOptions: workerFactory.workerThreadWorkerOptions,\n primaryThreadWorkerOptions: workerFactory.primaryThreadWorkerOptions,\n runnersEx: { } as Record<string, IRunnerEx>,\n AddRunner: (runnerOptions: IRunnerOptions): IRunnerEx => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),\n StopRunner: (runner: IRunnerEx): Promise<boolean> => this.#StopRunner(stsWorkerEx, runner),\n Stop: async (): Promise<boolean> => this.#StopWorker(stsWorkerEx)\n }\n this.#STSInstrumentController.LogEx(`Creating new worker: [${stsWorkerEx.id}]`.yellow);\n console.log(`Adding worker: [${stsWorkerEx.id}]`);\n\n stsWorkerEx.worker.onmessage = function(data: MessageEvent) {\n console.log(data.data);\n }\n\n stsWorkerEx.worker.onerror = function(error) {\n console.log(error);\n };\n\n const { \n port1, // process message port\n port2 // collector message port\n } = new MessageChannel();\n\n const workerPort = port1;\n \n console.log(`STSWorkerManager::AddWorker::workerThreadWorkerOptions: [${JSON.stringify(stsWorkerEx.workerThreadWorkerOptions)}]`);\n\n this.#PostMessageToWorker(stsWorkerEx, PublishMessageCommands.MessagePort, {\n port: port2,\n //applicationStoreState: stateCopy,\n options: { ...stsWorkerEx.workerThreadWorkerOptions }\n } as ISTSAgentWorkerMessagePort, port2);\n \n // Process messages received back from the worker\n workerPort.onmessage = async (data: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (publishMessagePayload.command) {\n case PublishMessageCommands.MessagePortResponse : \n stsWorkerEx.state = IWorkerState.started;\n break;\n case PublishMessageCommands.InstrumentTelemetry :\n this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n stsWorkerEx.primaryWorker.ProcessMessageFromWorker(workerPort, publishMessagePayload);\n }\n }\n\n this.#workersEx[stsWorkerEx.id] = stsWorkerEx;\n\n console.log(`Added worker: [${stsWorkerEx.id}]`);\n\n return stsWorkerEx;\n }\n\n AddRunnerToWorker = (stsWorkerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n const runnerEx: IRunnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);\n stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;\n this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);\n runnerEx.publishInstrumentController.LogEx(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}]`.green)\n return runnerEx;\n }\n\n #CreateRunnerCopy(runnerEx: IRunnerEx): IRunner {\n return {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData }\n } as IRunner\n }\n\n #SetRunnerIntoWorker = (workerEx: IWorkerEx, runnerEx: IRunnerEx): void => {\n // Now that the worker is setup, send the options\n //@@ wait until worker in running state\n const payload: ITestRunnerTelemetryPayload = {\n runner: this.#CreateRunnerCopy(runnerEx)\n }\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Add, payload);\n }\n\n #ProcessTelemetry = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n const store = TelemetryStore();\n\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n let update = false;\n\n // Copy telemetry\n runnerEx.instrumentData = { ...runner.instrumentData };\n\n if (runner.instrumentData.message) {\n runnerEx.instrumentData.message = [...runner.instrumentData.message];\n } else {\n runnerEx.instrumentData.message = [ ];\n }\n\n if (runner.instrumentData.message) {\n runner.instrumentData.message.forEach((message) => {\n runnerEx.publishInstrumentController.LogEx(message);\n });\n update = true;\n }\n\n if (runner.instrumentData.requestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.REQUEST_COUNT_GAUGE, {\n val: runnerEx.instrumentData.requestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.errorCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ERROR_COUNT_GAUGE, {\n val: runnerEx.instrumentData.errorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.retryCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.RETRY_COUNT_GAUGE, {\n val: runnerEx.instrumentData.retryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.authenticationCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_COUNT_GAUGE, {\n val: runnerEx.instrumentData.authenticationCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.coreCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CORE_COUNT_GAUGE, {\n val: runnerEx.instrumentData.coreCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.timer) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.TIMER_GAUGE, {\n val: runnerEx.instrumentData.timer\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.activeRequestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ACTIVE_REQUEST_GAUGE, {\n val: runnerEx.instrumentData.activeRequestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.velocity) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.VELOCITY_GAUGE, {\n Inc: runnerEx.instrumentData.velocity\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.duration) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.latency) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (update) {\n store.Update(workerEx, runnerEx);\n }\n }\n }\n\n #CreateAsyncRunner = (workerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n //const applicationStore = ApplicationStore();\n this.#runner++; // The runner number always increases\n this.#STSInstrumentController.LogEx(`Creating new async runner: [${this.#runner}]`.yellow);\n const asyncRunnerContext: IAsyncRunnerContext = {\n nid: `\\\n${workerEx.workerThreadWorkerOptions.hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}\\\n${ModelDelimeter.NID_SEPERATOR}\\\nworker${workerEx.id}\\\n${ModelDelimeter.SEPERATOR}\\\n${this.#runner}`,\n id: this.#runner.toString(),\n hostName: (workerEx.workerThreadWorkerOptions.hostName ? workerEx.workerThreadWorkerOptions.hostName : 'host'),\n agentName: `${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}`,\n threadId: `worker${workerEx.id}`,\n asyncRunnerId: this.#runner\n }\n const runnerEx: IRunnerEx = {\n id: this.#runner,\n publishInstrumentController: this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext),\n asyncRunnerContext: asyncRunnerContext,\n state: IRunnerState.created,\n options: runnerOptions,\n instrumentData: {\n requestCount: 0,\n errorCount: 0,\n retryCount: 0,\n authenticationCount: 0,\n velocity: 0,\n coreCount: 0,\n timer: 0,\n duration: 0,\n latency: 0,\n activeRequestCount: 0,\n message: [ ]\n } as IRunnerTelemetry,\n Stop: async (): Promise<boolean> => this.#StopRunner(workerEx, runnerEx)\n }\n return runnerEx;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #PostMessageToWorker = (workerEx: IWorkerEx, command: PublishMessageCommand, payload: IPublishMessagePayloadContentBase | null, transferObject?: any) => {\n if (transferObject) {\n console.log(`#PostMessageToWorker with transfer object`);\n workerEx.worker.postMessage({ command, payload }, [transferObject]);\n console.log(`#PostMessageToWorker with transfer object - done...`);\n } else {\n console.log(`#PostMessageToWorker`);\n workerEx.worker.postMessage({ command, payload });\n }\n }\n\n #TerminateWorker = (workerEx: IWorkerEx) => {\n if (workerEx.worker) {\n const store = TelemetryStore();\n\n workerEx.worker.terminate();\n //@@workerEx.worker = null;\n console.log(`Terminated worker: [${workerEx.id}]`);\n store.RemoveWorker(workerEx);\n delete this.#workersEx[workerEx.id];\n } else {\n // Some other runner has already removed the parent worker, do nothing\n // console.log(`WORKER ALREADY NULL`);\n }\n }\n\n #StopRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx | null = null): Promise<boolean> => {\n // If runnerEx not provided, Remove the first runner in the collection\n if (runnerEx === null) {\n const ids: string[] = Object.keys(workerEx.runnersEx);\n if (ids.length > 0) {\n const id = ids[0];\n runnerEx = workerEx.runnersEx[id];\n }\n }\n if (runnerEx !== null) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, {\n runner: this.#CreateRunnerCopy(runnerEx)\n } as ITestRunnerTelemetryPayload);\n\n runnerEx.publishInstrumentController.LogEx(`Terminating runner: [${runnerEx.id}]`);\n \n const promArray: Promise<boolean>[] = [ ];\n\n promArray.push((async (): Promise<boolean> => {\n await Sleep(100);\n return runnerEx.publishInstrumentController.InstrumentTerminate() as Promise<boolean>\n })());\n\n const store = TelemetryStore();\n store.RemoveRunner(workerEx, runnerEx);\n\n delete workerEx.runnersEx[runnerEx.id];\n\n const retVal = await Promise.all(promArray);\n console.log(`Removed instrument workers: [${retVal}]`);\n\n /*\n // If the removed runner was the last runner, remove the worker\n if (Object.keys(workerEx.runnersEx).length === 0) {\n this.#TerminateWorker(workerEx);\n }\n */\n }\n return true;\n }\n\n #StopWorker = async (workerEx: IWorkerEx): Promise<boolean> => {\n try {\n if (workerEx.state !== IWorkerState.stopped) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, null);\n \n //@@ Now wait until we get an ack back from the worker\n // This is because we may be trying to stop BEFORE the worker has had a chance to startup ...\n \n console.log(`Terminating worker: [${workerEx.id}]`);\n const promArray: Promise<boolean>[] = [ ];\n \n // Terminate only those that are currently running...\n const ids: string[] = Object.keys(workerEx.runnersEx);\n\n ids.forEach((id) => {\n const runnerEx: IRunnerEx = workerEx.runnersEx[id];\n promArray.push(this.#StopRunner(workerEx, runnerEx));\n });\n await Promise.all(promArray);\n\n this.#TerminateWorker(workerEx);\n }\n return true;\n } catch (error) {\n console.log(`Error in STSTestWorker:StopWorker: [${error}]`);\n return false;\n }\n }\n\n GetNextAvailableWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let leastRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (leastRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {\n leastRunnerWorker = stsWorker;\n }\n } else {\n leastRunnerWorker = stsWorker;\n }\n }\n return leastRunnerWorker;\n }\n\n GetBusyWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let busyWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (busyWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {\n busyWorker = stsWorker;\n }\n } else {\n busyWorker = stsWorker;\n }\n }\n return busyWorker;\n }\n\n get Options(): IWorkerManagerOptions {\n return this.#options;\n }\n\n set Options(options: IWorkerManagerOptions) {\n this.#options = options;\n }\n\n /*\n StopRunner = async () => {\n // Calculate the worker with the most runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.StopRunner();\n }\n */\n\n /*\n StopWorker = async () => {\n // Calculate the worker with the least runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.Stop();\n }\n */\n\n StopAllWorkers = async () => {\n const promArray = [ ];\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n promArray.push(stsWorker.Stop());\n }\n\n await Promise.all(promArray);\n }\n}\n\nexport const GetSTSInstrumentControllerPluginKeyWM = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWM = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWMEx = (): boolean => STSInstrumentControllerPluginKey === GetSTSInstrumentControllerPluginKey()\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 useSTSWorkerManager = (): STSWorkerManager => inject(STSWorkerManagerPluginKey) as STSWorkerManager\n\nexport const STSWorkerManagerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any, options?: IWorkerManagerOptions) => {\n const wm = new STSWorkerManager(app, options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSWorkerManagerPluginKey] = wm;\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(STSWorkerManagerPluginKey, wm);\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}`);\n\nimport type { IPublishMessagePayload } from '@nsshunt/stspublisherserver';\n\ndeclare interface RequestResponseMessage {\n\tpublishMessagePayload: IPublishMessagePayload\n\tpublishMessagePayloadResponse?: IPublishMessagePayload\n\tcb: () => void,\n\ttimeout: NodeJS.Timeout\n}\n\ndeclare type RequestResponseMessages = Record<string, RequestResponseMessage>;\n\nexport class RequestResponseHelper\n{\n #requestResponseMessages: RequestResponseMessages = { }\n #requestResponseMessageTimeout = 10000; //@@ config\n #port: MessagePort\n\n constructor(port: MessagePort) {\n this.#port = port\n this.#SetupListener();\n }\n\n PostMessage = (message: IPublishMessagePayload): Promise<IPublishMessagePayload> => {\n return new Promise((resolve, reject) => {\n const { messageId } = message.payload;\n if (messageId) {\n if (this.#requestResponseMessages[messageId]) {\n reject(`RequestResponseHelper: Message with id: [${messageId}] already exists within the Request/Response record structure`);\n } else {\n this.#requestResponseMessages[messageId] = {\n publishMessagePayload: { ...message },\n cb: () => {\n const detail = this.#requestResponseMessages[messageId].publishMessagePayloadResponse;\n clearTimeout(this.#requestResponseMessages[messageId].timeout);\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n if (detail) {\n debug(`RequestResponseHelper: Resolving response message with id: [${messageId}] from target worker port. Details: [${JSON.stringify(detail)}]`);\n resolve(detail);\n } else {\n const msg = `Could not get detail from this.#requestResponseMessages[messageId].publishMessagePayloadResponse`;\n debug(msg);\n reject(msg);\n }\n },\n timeout: setTimeout(() => {\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n debug(`RequestResponseHelper: Timeout has occurred after: [${this.#requestResponseMessageTimeout}]ms with message id: [${messageId}]. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n reject('RequestResponseHelper: Did not receive response form parent process.');\n }, this.#requestResponseMessageTimeout) // max message timeout allowed\n }\n debug(`RequestResponseHelper: Sending message with id: [${messageId}] to target worker port. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n this.#port.postMessage(message);\n }\n } else {\n const msg = `RequestResponseHelper: Response did not include a message id`;\n debug(msg);\n reject(msg);\n }\n });\n }\n\n #SetupListener = () => {\n this.#port.onmessage = async (msg: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = msg.data as IPublishMessagePayload;\n if (publishMessagePayload.payload.messageId) {\n const messageId = publishMessagePayload.payload.messageId;\n if (messageId && messageId !== '') {\n if (this.#requestResponseMessages[messageId]) {\n const requestResponseMessage: RequestResponseMessage = this.#requestResponseMessages[messageId];\n requestResponseMessage.publishMessagePayloadResponse = { ...publishMessagePayload };\n requestResponseMessage.cb();\n } else {\n throw new Error(`RequestResponseHelper: Could not find Request/Response message with id: [${messageId}]`);\n }\n }\n }\n }\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerInstance`);\n\nimport { IPublishMessagePayload, PublishMessageCommands, IPublishMessagePayloadContentBase } from '@nsshunt/stspublisherserver' // '@nsshunt/stspublisherserver' //'./plugins/publishers/publisherAgent'\n\nimport type { ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload } from './stsTestWorkerDefinitions'\nimport { IRunnerState } from './stsTestWorkerDefinitions'\n\nimport { RequestResponseHelper } from './requestResponseHelper'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerInstanceOptions {\n\n}\n\nexport abstract class WorkerInstance {\n #collectorCollectorPort: MessagePort | null = null;\n #requestResponseHelper: RequestResponseHelper | null = null;\n #runners: Record<string, IRunner> = { };\n #options: IWorkerInstanceOptions | null = null;\n\n constructor() {\n debug(`WorkerInstance::constructor`)\n }\n\n GetRandomInt = (max: number) => {\n debug(`WorkerInstance::GetRandomInt`)\n return Math.floor(Math.random() * Math.floor(max));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n StartWork = async (runner: IRunner): Promise<void> => {\n debug(`WorkerInstance::StartWork`)\n return;\n }\n\n PostTelemetry = (runner: IRunner) => {\n //debug(`WorkerInstance::PostTelemetry`)\n if (this.#collectorCollectorPort) {\n const message: IPublishMessagePayload = {\n command: PublishMessageCommands.InstrumentTelemetry,\n payload: {\n runner\n } as ITestRunnerTelemetryPayload\n }\n this.#collectorCollectorPort.postMessage(message);\n }\n }\n\n get RequestResponseHelper(): RequestResponseHelper | null {\n return this.#requestResponseHelper;\n }\n\n get CollectorCollectorPort(): MessagePort | null {\n return this.#collectorCollectorPort;\n }\n\n get Options(): IWorkerInstanceOptions | null {\n return this.#options;\n }\n\n #SetMessagePort = (workerMessagePort: ISTSAgentWorkerMessagePort) => {\n debug(`WorkerInstance::SetMessagePort`)\n this.#collectorCollectorPort = workerMessagePort.port as MessagePort;\n this.#collectorCollectorPort.onmessage = function(data: MessageEvent) {\n console.log(`collectorCollectorPort onmessage: ${data.data}`);\n }\n\n this.#requestResponseHelper = new RequestResponseHelper(this.#collectorCollectorPort);\n\n const response: IPublishMessagePayload = {\n command: PublishMessageCommands.MessagePortResponse,\n payload: { } as IPublishMessagePayloadContentBase\n }\n\n this.#collectorCollectorPort.postMessage(response);\n }\n\n StartRunner = async (runner: IRunner) => {\n debug(`WorkerInstance::StartRunner`)\n console.log(`StartTests: [${JSON.stringify(runner)}]`);\n runner.state = IRunnerState.running;\n this.StartWork(runner);\n }\n\n #AddAsyncRunner = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::AddAsyncRunner`)\n const { runner } = testRunnerTelemetryPayload;\n this.#runners[runner.id] = runner;\n this.StartRunner(runner);\n }\n\n #StopRunners = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::StopRunners`)\n if (testRunnerTelemetryPayload === null) {\n for (const [, testRunner] of Object.entries(this.#runners)) {\n testRunner.state = IRunnerState.stopped;\n }\n } else {\n const runner: IRunner = this.#runners[testRunnerTelemetryPayload.runner.id];\n if (runner) {\n runner.state = IRunnerState.stopped;\n }\n }\n }\n\n ProcessMessage = async(data: MessageEvent) => {\n debug(`WorkerInstance::ProcessMessage`)\n try {\n const payloadMessage: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (payloadMessage.command) {\n case PublishMessageCommands.MessagePort :\n this.#SetMessagePort(payloadMessage.payload as ISTSAgentWorkerMessagePort);\n this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;\n debug(`WorkerInstance::ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)\n break;\n case PublishMessageCommands.Add :\n this.#AddAsyncRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case PublishMessageCommands.Stop :\n this.#StopRunners(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n debug(`Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);\n }\n } catch (error) {\n console.log(error);\n }\n }\n}"],"names":["tinyEmitterModule","tinyEmitter","te.TinyEmitter","converter","debug","Debug","ClientStorageType","Cookies","IRunnerState","IWorkerState","_options"],"mappings":"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","x_google_ignoreList":[1,3]}
1
+ {"version":3,"file":"stsvueutils.mjs","sources":["../src/plugins/stsPluginKeys.ts","../node_modules/tiny-emitter/index.js","../src/plugins/emitter.ts","../node_modules/js-cookie/dist/js.cookie.mjs","../src/plugins/stsStorage.ts","../src/plugins/storage.ts","../src/stores/TelemetryStore.ts","../src/plugins/stsTestWorkerDefinitions.ts","../src/plugins/workerManager.ts","../src/plugins/requestResponseHelper.ts","../src/plugins/workerInstance.ts"],"sourcesContent":["// Individual STS plugin keys for provide/inject logic\nexport const STSStoragePluginKey = Symbol('storage')\nexport const STSEmitterPluginKey = Symbol('emitter')\nexport const STSWorkerManagerPluginKey = Symbol('workerManager')\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","import { inject } from 'vue'\n\nimport { STSEmitterPluginKey } from './stsPluginKeys';\n\nimport * as te from 'tiny-emitter';\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 useSTSEmitterPlugin = (): te.TinyEmitter => inject(STSEmitterPluginKey) as te.TinyEmitter\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSEmitterPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any) => {\n const tinyEmitter: te.TinyEmitter = new te.TinyEmitter();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSEmitterPluginKey] = tinyEmitter;\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(STSEmitterPluginKey, tinyEmitter);\n }\n}\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Debug from 'debug';\nconst debug = Debug(`proc:${process.pid}:storage.ts`);\n\nimport Cookies from 'js-cookie'\nimport type { JSONObject } from \"@nsshunt/stsutils\";\n\nlet PREFIX = '_ststra_';\n\nexport interface IStsStorage<T> {\n\tget(key: string): T | null\n\tset(key: string, value: T, options?: JSONObject): void\n\tremove(key: string): void\n}\n\nexport enum ClientStorageType {\n\tLOCAL_STORAGE = 'LocalStorage', //@@ todo\n\tSESSION_STORAGE = 'SessionStorage',\n\tCOOKIE_STORAGE = 'CookieStorage',\n\tMEMORY_STORAGE = 'MemoryStorage' //@@ todo\n}\n\nclass CookieStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const raw = Cookies.get(PREFIX + key);\n if (raw) {\n return JSON.parse(raw);\n } else {\n return null;\n }\n }\n\n set = (key: string, value: T, options: JSONObject = { }) => {\n let cookieAttributes: Cookies.CookieAttributes = { };\n if ('https:' === window.location.protocol) {\n cookieAttributes = {\n secure: true,\n sameSite: 'none'\n };\n }\n\t\n if (options && options.daysUntilExpire) {\n cookieAttributes.expires = options.daysUntilExpire;\n } else {\n cookieAttributes.expires = 1;\n }\n debug(`CookieStorage.set: key: ${key}, value: [${value}]`);\n Cookies.set(PREFIX + key, JSON.stringify(value), cookieAttributes);\n }\n\n remove = (key: string): void => {\n Cookies.remove(PREFIX + key);\n }\n}\n\nclass SessionStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = sessionStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`SessionStorage.set: key: ${key}, value: [${value}]`);\n sessionStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n sessionStorage.removeItem(PREFIX + key);\n }\n}\n\nclass LocalStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = localStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`LocalStorage.set: key: ${key}, value: [${value}]`);\n localStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n localStorage.removeItem(PREFIX + key);\n }\n}\n\nclass MemoryStorage<T> implements IStsStorage<T>\n{\n #store: Record<string, T> = { };\n\n get = (key: string): T | null => {\n const value: T = this.#store[PREFIX + key];\n if (value) {\n return value;\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`MemoryStorage.set: key: ${key}, value: [${value}]`);\n this.#store[PREFIX + key] = value;\n }\n \n remove = (key: string): void => {\n delete this.#store[PREFIX + key];\n }\n}\n\nexport interface IClientStorageOptions {\n\tclientStorageType: ClientStorageType\n\tusePrefix: boolean\n\tstorageOptions?: JSONObject\n}\n\nexport class ClientStorageFactory<T>\n{\n #storage: IStsStorage<T>;\n\n constructor(options: IClientStorageOptions) {\n if (options.usePrefix === false) {\n PREFIX = '';\n }\n switch (options.clientStorageType) {\n case ClientStorageType.SESSION_STORAGE :\n this.#storage = new SessionStorage<T>();\n break;\n case ClientStorageType.LOCAL_STORAGE :\n this.#storage = new LocalStorage<T>();\n break;\n case ClientStorageType.COOKIE_STORAGE :\n this.#storage = new CookieStorage<T>();\n break;\n case ClientStorageType.MEMORY_STORAGE :\n this.#storage = new MemoryStorage<T>();\n break;\n default:\n throw new Error(`Unknown [${options.clientStorageType}] storage type.`);\n }\n return;\n }\n\n GetStorage(): IStsStorage<T>\n {\n return this.#storage;\n }\n}\n","import { inject } from \"vue\";\n\n// Declare STS plugin keys (for provide)\n// https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\nimport { STSStoragePluginKey } from './stsPluginKeys';\n\nimport { ClientStorageType, ClientStorageFactory, type IStsStorage } from './stsStorage'\n\nexport interface ISTSStoragePluginOptions {\n\tclientStorageType: ClientStorageType\n}\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 useSTSStoragePlugin = <T>(): IStsStorage<T> => inject(STSStoragePluginKey) as IStsStorage<T>\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSStoragePlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: <T>(app: any, options: ISTSStoragePluginOptions) => {\n const cs = new ClientStorageFactory<T>({clientStorageType: options.clientStorageType, usePrefix: true});\n\n const pluginInstance = cs.GetStorage();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n // This allows access to the $sts property within templates.\n // Also, outside of script setup or setup(), this.$sts can be used.\n // If access is required within script setup, use the useSTSStoragePlugin composable function. Example;\n // import { useSTSStoragePlugin } from './storage';\n // const STSStorageString = useSTSStoragePlugin<string>();\n //\n // Note: An alternate to get access to this global is to use the hidden API call such as;\n // const app: ComponentInternalInstance | null = getCurrentInstance();\n // Assign the $sts plugin helper (legacy method - see below (injects) for updated usage)\n // let $sts: any\n // if (app) $sts = app.appContext.config.globalProperties.$sts;\n\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSStoragePluginKey] = pluginInstance;\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(STSStoragePluginKey, pluginInstance);\n }\n}\n","import { defineStore } from 'pinia'\n\nimport type { IWorker, IWorkerEx, IRunnerEx, IRunner, ITelemetryStore } from './../plugins/stsTestWorkerDefinitions'\n\n// https://pinia.vuejs.org/\n// https://seb-l.github.io/pinia-plugin-persist/\nexport const TelemetryStore = defineStore('__sts__TelemetryStore', {\n // State\n // https://pinia.vuejs.org/core-concepts/state.html\n state: (): ITelemetryStore => {\n return {\n workers: { }\n }\n },\n\n // Getters\n // https://pinia.vuejs.org/core-concepts/getters.html\n\n // Actions\n // https://pinia.vuejs.org/core-concepts/actions.html\n actions: {\n RemoveWorker(workerEx: IWorkerEx) {\n delete this.workers[workerEx.id];\n },\n\n RemoveRunner(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n const worker: IWorker = this.workers[workerEx.id];\n if (worker && worker.runners) {\n delete worker.runners[runnerEx.id];\n }\n },\n\n Update(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n if (!this.workers[workerEx.id]) {\n // Create a new telemetry record\n this.workers[workerEx.id] = {\n id: workerEx.id,\n state: workerEx.state,\n primaryThreadWorkerOptions: { ...workerEx.primaryThreadWorkerOptions },\n workerThreadWorkerOptions: { ...workerEx.workerThreadWorkerOptions },\n runners: { }\n } as IWorker\n }\n const worker: IWorker = this.workers[workerEx.id];\n // Now check for the async runner\n if (worker.runners) {\n if (!worker.runners[runnerEx.id]) {\n // Create a new asyncRunnerInstance telemetry record\n const runner: IRunner = {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData },\n }\n worker.runners[runner.id] = runner;\n } else {\n const runner: IRunner = worker.runners[runnerEx.id];\n runner.instrumentData = { ...runnerEx.instrumentData }\n }\n }\n }\n }\n});\n","import type { IPublishMessagePayloadContentBase, IAsyncRunnerContext, \n PublishInstrumentControllerV2, IPublishMessagePayload } from '@nsshunt/stspublisherserver'\n\nexport interface ISTSAgentWorkerMessagePort extends IPublishMessagePayloadContentBase {\n port: MessagePort\n options: IWorkerOptions\n}\n\nexport enum IRunnerState {\n\tcreated = 'created',\n\trunning = 'running',\n\tstopped = 'stopped',\n\tpaused = 'paused',\n\terror = 'error',\n}\n\nexport interface IRunnerTelemetry {\n\trequestCount: number // requestCount\n\terrorCount: number\n\tretryCount: number\n\tauthenticationCount: number\n\tvelocity: number\n\tcoreCount: number\n\ttimer: number\n\tduration: number\n\tlatency: number\n\tactiveRequestCount: number\n\tmessage: string[]\n\tchildCount: number\n}\n\nexport interface IRunner {\n\tid: number\n\tasyncRunnerContext: IAsyncRunnerContext\n\toptions: IRunnerOptions\n\tstate: IRunnerState\n\tinstrumentData: IRunnerTelemetry\n}\n\nexport interface IRunnerEx extends IRunner {\n publishInstrumentController: PublishInstrumentControllerV2\n Stop: () => Promise<boolean>\n}\n\nexport enum IWorkerState {\n\tstarting = 'starting',\n\tstarted = 'started',\n\tstopped = 'stopped'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerOptions {\n hostName: string\n agentId: string\n userAgent: string\n}\n\nexport type Runners = Record<string, IRunner>\n\nexport interface IWorker {\n\tid: number\n\tstate: IWorkerState\n primaryThreadWorkerOptions: IWorkerOptions\n\tworkerThreadWorkerOptions: IWorkerOptions\n\trunners?: Runners // Will be created by utility helper\n}\n\nexport type Workers = Record<string, IWorker>\n\nexport interface IPrimaryWorker {\n ProcessMessageFromWorker(workerPort: MessagePort, publishMessagePayload: IPublishMessagePayload): Promise<void>\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IRunnerOptions {\n\n}\n\nexport interface IWorkerEx extends IWorker {\n\tworker: Worker\n primaryWorker: IPrimaryWorker\n\trunnersEx: Record<string, IRunnerEx>\n\tAddRunner: (runnerOptions: IRunnerOptions) => IRunnerEx\n\tStopRunner: (runner: IRunnerEx) => Promise<boolean>\n\tStop: () => Promise<boolean>\n}\n\nexport interface ISTSTestWorkerOptions {\n messageMod: number\n iterations: number\n}\n\nexport interface ITelemetryStore {\n\tworkers: Workers\n}\n\nexport interface ITestRunnerTelemetryPayload extends IPublishMessagePayloadContentBase {\n\trunner: IRunner\n}\n\nexport interface IWorkerFactory {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createPrimaryThreadWorker: (app: any, options: IWorkerOptions) => IPrimaryWorker\n\tcreateWorkerThreadWorker: () => Worker // | wt.Worker\n get workerThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n get primaryThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n}\n\nexport interface IWorkerManagerOptions {\n workerFactory: IWorkerFactory\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerManager`);\n\n//import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers\nimport { type IAsyncRunnerContext, IPublishMessagePayload, IPublishMessagePayloadContentBase, \n type PublishMessageCommand, PublishMessageCommands, type AgentPublishInstrumentController } from '@nsshunt/stspublisherserver' \n \nimport { Gauge, InstrumentGaugeTelemetry } from '@nsshunt/stsinstrumentation'\n\nimport { ModelDelimeter } from '@nsshunt/stsutils'\n\nimport { TelemetryStore } from './../stores/TelemetryStore'\n//import { ApplicationStore } from './../stores/applicationStore'\n\nimport type { ISTSAgentWorkerMessagePort, IWorkerEx, IRunner, IRunnerEx,\n ITestRunnerTelemetryPayload, IRunnerOptions, IRunnerTelemetry,\n IWorkerManagerOptions, IWorkerFactory } from './stsTestWorkerDefinitions'\n\nimport { IWorkerState, IRunnerState } from './stsTestWorkerDefinitions'\nimport { Sleep } from '@nsshunt/stsutils';\nimport { inject } from 'vue';\n\nimport { STSInstrumentControllerPluginKey, GetSTSInstrumentControllerPluginKey, GetSTSInstrumentController } from '@nsshunt/stspublisherserver'\nimport { STSWorkerManagerPluginKey } from './stsPluginKeys';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport colors from 'colors'\n\nexport class STSWorkerManager {\n //#agentSession: string = null;\n #workersEx: Record<string, IWorkerEx> = { };\n #runner = 0;\n #workerId = 0;\n #options: IWorkerManagerOptions;\n #STSInstrumentController: AgentPublishInstrumentController\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #app: any\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(app: any, options?: IWorkerManagerOptions) {\n this.#app = app;\n if (options) {\n this.#options = options;\n } else {\n this.#options = { } as IWorkerManagerOptions;\n }\n\n debug(`CompareSTSInstrumentControllerPluginKeyWMEx(): [${CompareSTSInstrumentControllerPluginKeyWMEx()}]`);\n\n debug(`Attempting to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n //this.#STSInstrumentController = app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n //this.#STSInstrumentController = app.config.globalProperties.$sts[GetSTSInstrumentControllerPluginKey()]\n this.#STSInstrumentController = GetSTSInstrumentController(app);\n //this.#STSInstrumentController = app.config.globalProperties.$sts.aic;\n\n debug(this.#STSInstrumentController);\n debug('keys within app.config.globalProperties.$sts');\n for (const [key, ] of Object.entries(app.config.globalProperties.$sts)) {\n debug(`${key}`);\n }\n\n if (!this.#STSInstrumentController) {\n debug(`Failed to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n }\n }\n \n get WorkersEx(): Record<string, IWorkerEx>\n {\n return this.#workersEx;\n }\n\n AddWorker = async (useWorkerFactory?: IWorkerFactory): Promise<IWorkerEx> => {\n let workerFactory: IWorkerFactory;\n if (useWorkerFactory) {\n // Use the supplied workFactory\n workerFactory = useWorkerFactory;\n } else {\n // Use the default workFactory\n workerFactory = this.#options.workerFactory\n }\n const stsWorkerEx: IWorkerEx = {\n id: this.#workerId++, // uuidv4()\n worker: workerFactory.createWorkerThreadWorker(),\n primaryWorker: workerFactory.createPrimaryThreadWorker(this.#app, workerFactory.primaryThreadWorkerOptions),\n state: IWorkerState.starting,\n workerThreadWorkerOptions: workerFactory.workerThreadWorkerOptions,\n primaryThreadWorkerOptions: workerFactory.primaryThreadWorkerOptions,\n runnersEx: { } as Record<string, IRunnerEx>,\n AddRunner: (runnerOptions: IRunnerOptions): IRunnerEx => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),\n StopRunner: (runner: IRunnerEx): Promise<boolean> => this.#StopRunner(stsWorkerEx, runner),\n Stop: async (): Promise<boolean> => this.#StopWorker(stsWorkerEx)\n }\n this.#STSInstrumentController.LogEx(`Creating new worker: [${stsWorkerEx.id}]`.yellow);\n console.log(`Adding worker: [${stsWorkerEx.id}]`);\n\n stsWorkerEx.worker.onmessage = function(data: MessageEvent) {\n console.log(data.data);\n }\n\n stsWorkerEx.worker.onerror = function(error) {\n console.log(error);\n };\n\n const { \n port1, // process message port\n port2 // collector message port\n } = new MessageChannel();\n\n const workerPort = port1;\n \n console.log(`STSWorkerManager::AddWorker::workerThreadWorkerOptions: [${JSON.stringify(stsWorkerEx.workerThreadWorkerOptions)}]`);\n\n this.#PostMessageToWorker(stsWorkerEx, PublishMessageCommands.MessagePort, {\n port: port2,\n //applicationStoreState: stateCopy,\n options: { ...stsWorkerEx.workerThreadWorkerOptions }\n } as ISTSAgentWorkerMessagePort, port2);\n \n // Process messages received back from the worker\n workerPort.onmessage = async (data: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (publishMessagePayload.command) {\n case PublishMessageCommands.MessagePortResponse : \n stsWorkerEx.state = IWorkerState.started;\n break;\n case PublishMessageCommands.InstrumentTelemetry :\n this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n stsWorkerEx.primaryWorker.ProcessMessageFromWorker(workerPort, publishMessagePayload);\n }\n }\n\n this.#workersEx[stsWorkerEx.id] = stsWorkerEx;\n\n console.log(`Added worker: [${stsWorkerEx.id}]`);\n\n return stsWorkerEx;\n }\n\n AddRunnerToWorker = (stsWorkerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n const runnerEx: IRunnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);\n stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;\n this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);\n runnerEx.publishInstrumentController.LogEx(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}]`.green)\n return runnerEx;\n }\n\n #CreateRunnerCopy(runnerEx: IRunnerEx): IRunner {\n return {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData }\n } as IRunner\n }\n\n #SetRunnerIntoWorker = (workerEx: IWorkerEx, runnerEx: IRunnerEx): void => {\n // Now that the worker is setup, send the options\n //@@ wait until worker in running state\n const payload: ITestRunnerTelemetryPayload = {\n runner: this.#CreateRunnerCopy(runnerEx)\n }\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Add, payload);\n }\n\n #ProcessTelemetry = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n const store = TelemetryStore();\n\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n let update = false;\n\n // Copy telemetry\n runnerEx.instrumentData = { ...runner.instrumentData };\n\n if (runner.instrumentData.message) {\n runnerEx.instrumentData.message = [...runner.instrumentData.message];\n } else {\n runnerEx.instrumentData.message = [ ];\n }\n\n if (runner.instrumentData.message) {\n runner.instrumentData.message.forEach((message) => {\n runnerEx.publishInstrumentController.LogEx(message);\n });\n update = true;\n }\n\n if (runner.instrumentData.requestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.REQUEST_COUNT_GAUGE, {\n val: runnerEx.instrumentData.requestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.errorCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ERROR_COUNT_GAUGE, {\n val: runnerEx.instrumentData.errorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.retryCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.RETRY_COUNT_GAUGE, {\n val: runnerEx.instrumentData.retryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.authenticationCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_COUNT_GAUGE, {\n val: runnerEx.instrumentData.authenticationCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.coreCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CORE_COUNT_GAUGE, {\n val: runnerEx.instrumentData.coreCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.timer) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.TIMER_GAUGE, {\n val: runnerEx.instrumentData.timer\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.activeRequestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ACTIVE_REQUEST_GAUGE, {\n val: runnerEx.instrumentData.activeRequestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.velocity) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.VELOCITY_GAUGE, {\n Inc: runnerEx.instrumentData.velocity\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.duration) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.latency) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.childCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CHILD_COUNT, {\n val: runnerEx.instrumentData.childCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (update) {\n store.Update(workerEx, runnerEx);\n }\n }\n }\n\n #CreateAsyncRunner = (workerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n //const applicationStore = ApplicationStore();\n this.#runner++; // The runner number always increases\n this.#STSInstrumentController.LogEx(`Creating new async runner: [${this.#runner}]`.yellow);\n const asyncRunnerContext: IAsyncRunnerContext = {\n nid: `\\\n${workerEx.workerThreadWorkerOptions.hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}\\\n${ModelDelimeter.NID_SEPERATOR}\\\nworker${workerEx.id}\\\n${ModelDelimeter.SEPERATOR}\\\n${this.#runner}`,\n id: this.#runner.toString(),\n hostName: (workerEx.workerThreadWorkerOptions.hostName ? workerEx.workerThreadWorkerOptions.hostName : 'host'),\n agentName: `${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}`,\n threadId: `worker${workerEx.id}`,\n asyncRunnerId: this.#runner\n }\n const runnerEx: IRunnerEx = {\n id: this.#runner,\n publishInstrumentController: this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext),\n asyncRunnerContext: asyncRunnerContext,\n state: IRunnerState.created,\n options: runnerOptions,\n instrumentData: {\n requestCount: 0,\n errorCount: 0,\n retryCount: 0,\n authenticationCount: 0,\n velocity: 0,\n coreCount: 0,\n timer: 0,\n duration: 0,\n latency: 0,\n activeRequestCount: 0,\n message: [ ],\n childCount: 0\n } as IRunnerTelemetry,\n Stop: async (): Promise<boolean> => this.#StopRunner(workerEx, runnerEx)\n }\n return runnerEx;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #PostMessageToWorker = (workerEx: IWorkerEx, command: PublishMessageCommand, payload: IPublishMessagePayloadContentBase | null, transferObject?: any) => {\n if (transferObject) {\n console.log(`#PostMessageToWorker with transfer object`);\n workerEx.worker.postMessage({ command, payload }, [transferObject]);\n console.log(`#PostMessageToWorker with transfer object - done...`);\n } else {\n console.log(`#PostMessageToWorker`);\n workerEx.worker.postMessage({ command, payload });\n }\n }\n\n #TerminateWorker = (workerEx: IWorkerEx) => {\n if (workerEx.worker) {\n const store = TelemetryStore();\n\n workerEx.worker.terminate();\n //@@workerEx.worker = null;\n console.log(`Terminated worker: [${workerEx.id}]`);\n store.RemoveWorker(workerEx);\n delete this.#workersEx[workerEx.id];\n } else {\n // Some other runner has already removed the parent worker, do nothing\n // console.log(`WORKER ALREADY NULL`);\n }\n }\n\n #StopRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx | null = null): Promise<boolean> => {\n // If runnerEx not provided, Remove the first runner in the collection\n if (runnerEx === null) {\n const ids: string[] = Object.keys(workerEx.runnersEx);\n if (ids.length > 0) {\n const id = ids[0];\n runnerEx = workerEx.runnersEx[id];\n }\n }\n if (runnerEx !== null) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, {\n runner: this.#CreateRunnerCopy(runnerEx)\n } as ITestRunnerTelemetryPayload);\n\n runnerEx.publishInstrumentController.LogEx(`Terminating runner: [${runnerEx.id}]`);\n \n const promArray: Promise<boolean>[] = [ ];\n\n promArray.push((async (): Promise<boolean> => {\n await Sleep(100);\n return runnerEx.publishInstrumentController.InstrumentTerminate() as Promise<boolean>\n })());\n\n const store = TelemetryStore();\n store.RemoveRunner(workerEx, runnerEx);\n\n delete workerEx.runnersEx[runnerEx.id];\n\n const retVal = await Promise.all(promArray);\n console.log(`Removed instrument workers: [${retVal}]`);\n\n /*\n // If the removed runner was the last runner, remove the worker\n if (Object.keys(workerEx.runnersEx).length === 0) {\n this.#TerminateWorker(workerEx);\n }\n */\n }\n return true;\n }\n\n #StopWorker = async (workerEx: IWorkerEx): Promise<boolean> => {\n try {\n if (workerEx.state !== IWorkerState.stopped) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, null);\n \n //@@ Now wait until we get an ack back from the worker\n // This is because we may be trying to stop BEFORE the worker has had a chance to startup ...\n \n console.log(`Terminating worker: [${workerEx.id}]`);\n const promArray: Promise<boolean>[] = [ ];\n \n // Terminate only those that are currently running...\n const ids: string[] = Object.keys(workerEx.runnersEx);\n\n ids.forEach((id) => {\n const runnerEx: IRunnerEx = workerEx.runnersEx[id];\n promArray.push(this.#StopRunner(workerEx, runnerEx));\n });\n await Promise.all(promArray);\n\n this.#TerminateWorker(workerEx);\n }\n return true;\n } catch (error) {\n console.log(`Error in STSTestWorker:StopWorker: [${error}]`);\n return false;\n }\n }\n\n GetNextAvailableWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let leastRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (leastRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {\n leastRunnerWorker = stsWorker;\n }\n } else {\n leastRunnerWorker = stsWorker;\n }\n }\n return leastRunnerWorker;\n }\n\n GetBusyWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let busyWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (busyWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {\n busyWorker = stsWorker;\n }\n } else {\n busyWorker = stsWorker;\n }\n }\n return busyWorker;\n }\n\n get Options(): IWorkerManagerOptions {\n return this.#options;\n }\n\n set Options(options: IWorkerManagerOptions) {\n this.#options = options;\n }\n\n /*\n StopRunner = async () => {\n // Calculate the worker with the most runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.StopRunner();\n }\n */\n\n /*\n StopWorker = async () => {\n // Calculate the worker with the least runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.Stop();\n }\n */\n\n StopAllWorkers = async () => {\n const promArray = [ ];\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n promArray.push(stsWorker.Stop());\n }\n\n await Promise.all(promArray);\n }\n}\n\nexport const GetSTSInstrumentControllerPluginKeyWM = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWM = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWMEx = (): boolean => STSInstrumentControllerPluginKey === GetSTSInstrumentControllerPluginKey()\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 useSTSWorkerManager = (): STSWorkerManager => inject(STSWorkerManagerPluginKey) as STSWorkerManager\n\nexport const STSWorkerManagerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any, options?: IWorkerManagerOptions) => {\n const wm = new STSWorkerManager(app, options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSWorkerManagerPluginKey] = wm;\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(STSWorkerManagerPluginKey, wm);\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}`);\n\nimport type { IPublishMessagePayload } from '@nsshunt/stspublisherserver';\n\ndeclare interface RequestResponseMessage {\n\tpublishMessagePayload: IPublishMessagePayload\n\tpublishMessagePayloadResponse?: IPublishMessagePayload\n\tcb: () => void,\n\ttimeout: NodeJS.Timeout\n}\n\ndeclare type RequestResponseMessages = Record<string, RequestResponseMessage>;\n\nexport class RequestResponseHelper\n{\n #requestResponseMessages: RequestResponseMessages = { }\n #requestResponseMessageTimeout = 10000; //@@ config\n #port: MessagePort\n\n constructor(port: MessagePort) {\n this.#port = port\n this.#SetupListener();\n }\n\n PostMessage = (message: IPublishMessagePayload): Promise<IPublishMessagePayload> => {\n return new Promise((resolve, reject) => {\n const { messageId } = message.payload;\n if (messageId) {\n if (this.#requestResponseMessages[messageId]) {\n reject(`RequestResponseHelper: Message with id: [${messageId}] already exists within the Request/Response record structure`);\n } else {\n this.#requestResponseMessages[messageId] = {\n publishMessagePayload: { ...message },\n cb: () => {\n const detail = this.#requestResponseMessages[messageId].publishMessagePayloadResponse;\n clearTimeout(this.#requestResponseMessages[messageId].timeout);\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n if (detail) {\n debug(`RequestResponseHelper: Resolving response message with id: [${messageId}] from target worker port. Details: [${JSON.stringify(detail)}]`);\n resolve(detail);\n } else {\n const msg = `Could not get detail from this.#requestResponseMessages[messageId].publishMessagePayloadResponse`;\n debug(msg);\n reject(msg);\n }\n },\n timeout: setTimeout(() => {\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n debug(`RequestResponseHelper: Timeout has occurred after: [${this.#requestResponseMessageTimeout}]ms with message id: [${messageId}]. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n reject('RequestResponseHelper: Did not receive response form parent process.');\n }, this.#requestResponseMessageTimeout) // max message timeout allowed\n }\n debug(`RequestResponseHelper: Sending message with id: [${messageId}] to target worker port. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n this.#port.postMessage(message);\n }\n } else {\n const msg = `RequestResponseHelper: Response did not include a message id`;\n debug(msg);\n reject(msg);\n }\n });\n }\n\n #SetupListener = () => {\n this.#port.onmessage = async (msg: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = msg.data as IPublishMessagePayload;\n if (publishMessagePayload.payload.messageId) {\n const messageId = publishMessagePayload.payload.messageId;\n if (messageId && messageId !== '') {\n if (this.#requestResponseMessages[messageId]) {\n const requestResponseMessage: RequestResponseMessage = this.#requestResponseMessages[messageId];\n requestResponseMessage.publishMessagePayloadResponse = { ...publishMessagePayload };\n requestResponseMessage.cb();\n } else {\n throw new Error(`RequestResponseHelper: Could not find Request/Response message with id: [${messageId}]`);\n }\n }\n }\n }\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerInstance`);\n\nimport { IPublishMessagePayload, PublishMessageCommands, IPublishMessagePayloadContentBase } from '@nsshunt/stspublisherserver' // '@nsshunt/stspublisherserver' //'./plugins/publishers/publisherAgent'\n\nimport type { ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload } from './stsTestWorkerDefinitions'\nimport { IRunnerState } from './stsTestWorkerDefinitions'\n\nimport { RequestResponseHelper } from './requestResponseHelper'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerInstanceOptions {\n\n}\n\nexport abstract class WorkerInstance {\n #collectorCollectorPort: MessagePort | null = null;\n #requestResponseHelper: RequestResponseHelper | null = null;\n #runners: Record<string, IRunner> = { };\n #options: IWorkerInstanceOptions | null = null;\n\n constructor() {\n debug(`WorkerInstance::constructor`)\n }\n\n GetRandomInt = (max: number) => {\n debug(`WorkerInstance::GetRandomInt`)\n return Math.floor(Math.random() * Math.floor(max));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n StartWork = async (runner: IRunner): Promise<void> => {\n debug(`WorkerInstance::StartWork`)\n return;\n }\n\n PostTelemetry = (runner: IRunner) => {\n //debug(`WorkerInstance::PostTelemetry`)\n if (this.#collectorCollectorPort) {\n const message: IPublishMessagePayload = {\n command: PublishMessageCommands.InstrumentTelemetry,\n payload: {\n runner\n } as ITestRunnerTelemetryPayload\n }\n this.#collectorCollectorPort.postMessage(message);\n }\n }\n\n get RequestResponseHelper(): RequestResponseHelper | null {\n return this.#requestResponseHelper;\n }\n\n get CollectorCollectorPort(): MessagePort | null {\n return this.#collectorCollectorPort;\n }\n\n get Options(): IWorkerInstanceOptions | null {\n return this.#options;\n }\n\n #SetMessagePort = (workerMessagePort: ISTSAgentWorkerMessagePort) => {\n debug(`WorkerInstance::SetMessagePort`)\n this.#collectorCollectorPort = workerMessagePort.port as MessagePort;\n this.#collectorCollectorPort.onmessage = function(data: MessageEvent) {\n console.log(`collectorCollectorPort onmessage: ${data.data}`);\n }\n\n this.#requestResponseHelper = new RequestResponseHelper(this.#collectorCollectorPort);\n\n const response: IPublishMessagePayload = {\n command: PublishMessageCommands.MessagePortResponse,\n payload: { } as IPublishMessagePayloadContentBase\n }\n\n this.#collectorCollectorPort.postMessage(response);\n }\n\n StartRunner = async (runner: IRunner) => {\n debug(`WorkerInstance::StartRunner`)\n console.log(`StartTests: [${JSON.stringify(runner)}]`);\n runner.state = IRunnerState.running;\n this.StartWork(runner);\n }\n\n #AddAsyncRunner = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::AddAsyncRunner`)\n const { runner } = testRunnerTelemetryPayload;\n this.#runners[runner.id] = runner;\n this.StartRunner(runner);\n }\n\n #StopRunners = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::StopRunners`)\n if (testRunnerTelemetryPayload === null) {\n for (const [, testRunner] of Object.entries(this.#runners)) {\n testRunner.state = IRunnerState.stopped;\n }\n } else {\n const runner: IRunner = this.#runners[testRunnerTelemetryPayload.runner.id];\n if (runner) {\n runner.state = IRunnerState.stopped;\n }\n }\n }\n\n ProcessMessage = async(data: MessageEvent) => {\n debug(`WorkerInstance::ProcessMessage`)\n try {\n const payloadMessage: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (payloadMessage.command) {\n case PublishMessageCommands.MessagePort :\n this.#SetMessagePort(payloadMessage.payload as ISTSAgentWorkerMessagePort);\n this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;\n debug(`WorkerInstance::ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)\n break;\n case PublishMessageCommands.Add :\n this.#AddAsyncRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case PublishMessageCommands.Stop :\n this.#StopRunners(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n debug(`Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);\n }\n } catch (error) {\n console.log(error);\n }\n }\n}"],"names":["tinyEmitterModule","tinyEmitter","te.TinyEmitter","converter","debug","Debug","ClientStorageType","Cookies","IRunnerState","IWorkerState","_options"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACa,MAAA,sBAAsB,OAAO,SAAS;AACtC,MAAA,sBAAsB,OAAO,SAAS;AACtC,MAAA,4BAA4B,OAAO,eAAe;;ACH/D,SAAS,IAAK;AAGd;AAEA,EAAE,YAAY;AAAA,EACZ,IAAI,SAAU,MAAM,UAAU,KAAK;AACjC,QAAI,IAAI,KAAK,MAAM,KAAK,IAAI,CAAA;AAE5B,KAAC,EAAE,IAAI,MAAM,EAAE,IAAI,IAAI,CAAA,IAAK,KAAK;AAAA,MAC/B,IAAI;AAAA,MACJ;AAAA,IACN,CAAK;AAED,WAAO;AAAA,EACR;AAAA,EAED,MAAM,SAAU,MAAM,UAAU,KAAK;AACnC,QAAI,OAAO;AACX,aAAS,WAAY;AACnB,WAAK,IAAI,MAAM,QAAQ;AACvB,eAAS,MAAM,KAAK,SAAS;AAAA,IAEnC;AACI,aAAS,IAAI;AACb,WAAO,KAAK,GAAG,MAAM,UAAU,GAAG;AAAA,EACnC;AAAA,EAED,MAAM,SAAU,MAAM;AACpB,QAAI,OAAO,CAAA,EAAG,MAAM,KAAK,WAAW,CAAC;AACrC,QAAI,WAAW,KAAK,MAAM,KAAK,IAAI,CAAA,IAAK,IAAI,KAAK,CAAE,GAAE,MAAK;AAC1D,QAAI,IAAI;AACR,QAAI,MAAM,OAAO;AAEjB,SAAK,GAAG,IAAI,KAAK,KAAK;AACpB,aAAO,CAAC,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,KAAK,IAAI;AAAA,IACvC;AAED,WAAO;AAAA,EACR;AAAA,EAED,KAAK,SAAU,MAAM,UAAU;AAC7B,QAAI,IAAI,KAAK,MAAM,KAAK,IAAI,CAAA;AAC5B,QAAI,OAAO,EAAE,IAAI;AACjB,QAAI,aAAa,CAAA;AAEjB,QAAI,QAAQ,UAAU;AACpB,eAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAI,KAAK,CAAC,EAAE,OAAO,YAAY,KAAK,CAAC,EAAE,GAAG,MAAM;AAC9C,qBAAW,KAAK,KAAK,CAAC,CAAC;AAAA,MAC1B;AAAA,IACF;AAMD,IAAC,WAAW,SACR,EAAE,IAAI,IAAI,aACV,OAAO,EAAE,IAAI;AAEjB,WAAO;AAAA,EACR;AACH;AAEAA,YAAc,UAAG;AACjB,IAAA,cAAAA,YAAA,QAAA,cAA6B;AC1DhB,MAAA,sBAAsB,MAAsB,OAAO,mBAAmB;AAG5E,MAAM,mBAAmB;AAAA;AAAA,EAE5B,SAAS,CAAC,QAAa;AACb,UAAAC,eAA8B,IAAIC;AAGxC,QAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM;AAC/B,UAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,IACvC;AACA,QAAI,OAAO,iBAAiB,KAAK,mBAAmB,IAAID;AAIpD,QAAA,QAAQ,qBAAqBA,YAAW;AAAA,EAChD;AACJ;AC1BA;AAEA,SAAS,OAAQ,QAAQ;AACvB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,QAAI,SAAS,UAAU,CAAC;AACxB,aAAS,OAAO,QAAQ;AACtB,aAAO,GAAG,IAAI,OAAO,GAAG;AAAA,IACzB;AAAA,EACF;AACD,SAAO;AACT;AAIA,IAAI,mBAAmB;AAAA,EACrB,MAAM,SAAU,OAAO;AACrB,QAAI,MAAM,CAAC,MAAM,KAAK;AACpB,cAAQ,MAAM,MAAM,GAAG,EAAE;AAAA,IAC1B;AACD,WAAO,MAAM,QAAQ,oBAAoB,kBAAkB;AAAA,EAC5D;AAAA,EACD,OAAO,SAAU,OAAO;AACtB,WAAO,mBAAmB,KAAK,EAAE;AAAA,MAC/B;AAAA,MACA;AAAA,IACD;AAAA,EACF;AACH;AAKA,SAAS,KAAM,WAAW,mBAAmB;AAC3C,WAAS,IAAK,MAAM,OAAO,YAAY;AACrC,QAAI,OAAO,aAAa,aAAa;AACnC;AAAA,IACD;AAED,iBAAa,OAAO,CAAA,GAAI,mBAAmB,UAAU;AAErD,QAAI,OAAO,WAAW,YAAY,UAAU;AAC1C,iBAAW,UAAU,IAAI,KAAK,KAAK,IAAG,IAAK,WAAW,UAAU,KAAK;AAAA,IACtE;AACD,QAAI,WAAW,SAAS;AACtB,iBAAW,UAAU,WAAW,QAAQ,YAAW;AAAA,IACpD;AAED,WAAO,mBAAmB,IAAI,EAC3B,QAAQ,wBAAwB,kBAAkB,EAClD,QAAQ,SAAS,MAAM;AAE1B,QAAI,wBAAwB;AAC5B,aAAS,iBAAiB,YAAY;AACpC,UAAI,CAAC,WAAW,aAAa,GAAG;AAC9B;AAAA,MACD;AAED,+BAAyB,OAAO;AAEhC,UAAI,WAAW,aAAa,MAAM,MAAM;AACtC;AAAA,MACD;AASD,+BAAyB,MAAM,WAAW,aAAa,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,IACtE;AAED,WAAQ,SAAS,SACf,OAAO,MAAM,UAAU,MAAM,OAAO,IAAI,IAAI;AAAA,EAC/C;AAED,WAAS,IAAK,MAAM;AAClB,QAAI,OAAO,aAAa,eAAgB,UAAU,UAAU,CAAC,MAAO;AAClE;AAAA,IACD;AAID,QAAI,UAAU,SAAS,SAAS,SAAS,OAAO,MAAM,IAAI,IAAI;AAC9D,QAAI,MAAM,CAAA;AACV,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,UAAI,QAAQ,QAAQ,CAAC,EAAE,MAAM,GAAG;AAChC,UAAI,QAAQ,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAEnC,UAAI;AACF,YAAI,QAAQ,mBAAmB,MAAM,CAAC,CAAC;AACvC,YAAI,KAAK,IAAI,UAAU,KAAK,OAAO,KAAK;AAExC,YAAI,SAAS,OAAO;AAClB;AAAA,QACD;AAAA,MACT,SAAe,GAAG;AAAA,MAAE;AAAA,IACf;AAED,WAAO,OAAO,IAAI,IAAI,IAAI;AAAA,EAC3B;AAED,SAAO,OAAO;AAAA,IACZ;AAAA,MACE;AAAA,MACA;AAAA,MACA,QAAQ,SAAU,MAAM,YAAY;AAClC;AAAA,UACE;AAAA,UACA;AAAA,UACA,OAAO,CAAE,GAAE,YAAY;AAAA,YACrB,SAAS;AAAA,UACrB,CAAW;AAAA,QACX;AAAA,MACO;AAAA,MACD,gBAAgB,SAAU,YAAY;AACpC,eAAO,KAAK,KAAK,WAAW,OAAO,CAAA,GAAI,KAAK,YAAY,UAAU,CAAC;AAAA,MACpE;AAAA,MACD,eAAe,SAAUE,YAAW;AAClC,eAAO,KAAK,OAAO,IAAI,KAAK,WAAWA,UAAS,GAAG,KAAK,UAAU;AAAA,MACnE;AAAA,IACF;AAAA,IACD;AAAA,MACE,YAAY,EAAE,OAAO,OAAO,OAAO,iBAAiB,EAAG;AAAA,MACvD,WAAW,EAAE,OAAO,OAAO,OAAO,SAAS,EAAG;AAAA,IAC/C;AAAA,EACF;AACH;AAEA,IAAI,MAAM,KAAK,kBAAkB,EAAE,MAAM,IAAG,CAAE;ACjI9C,MAAMC,UAAQC,YAAM,QAAQ,QAAQ,GAAG,aAAa;AAKpD,IAAI,SAAS;AAQD,IAAA,sCAAAC,uBAAL;AACNA,qBAAA,eAAgB,IAAA;AAChBA,qBAAA,iBAAkB,IAAA;AAClBA,qBAAA,gBAAiB,IAAA;AACjBA,qBAAA,gBAAiB,IAAA;AAJNA,SAAAA;AAAA,GAAA,qBAAA,CAAA,CAAA;AAOZ,MAAM,cACN;AAAA,EADA;AAEI,+BAAM,CAAC,QAA0B;AAC7B,YAAM,MAAMC,IAAQ,IAAI,SAAS,GAAG;AACpC,UAAI,KAAK;AACE,eAAA,KAAK,MAAM,GAAG;AAAA,MAAA,OAClB;AACI,eAAA;AAAA,MACX;AAAA,IAAA;AAGJ,+BAAM,CAAC,KAAa,OAAU,UAAsB,CAAA,MAAQ;AACxD,UAAI,mBAA6C,CAAA;AAC7C,UAAA,aAAa,OAAO,SAAS,UAAU;AACpB,2BAAA;AAAA,UACf,QAAQ;AAAA,UACR,UAAU;AAAA,QAAA;AAAA,MAElB;AAEI,UAAA,WAAW,QAAQ,iBAAiB;AACpC,yBAAiB,UAAU,QAAQ;AAAA,MAAA,OAChC;AACH,yBAAiB,UAAU;AAAA,MAC/B;AACAH,cAAM,2BAA2B,GAAG,aAAa,KAAK,GAAG;AACzDG,UAAQ,IAAI,SAAS,KAAK,KAAK,UAAU,KAAK,GAAG,gBAAgB;AAAA,IAAA;AAGrE,kCAAS,CAAC,QAAsB;AACpBA,UAAA,OAAO,SAAS,GAAG;AAAA,IAAA;AAAA;AAEnC;AAEA,MAAM,eACN;AAAA,EADA;AAEI,+BAAM,CAAC,QAA0B;AAC7B,YAAM,QAAuB,eAAe,QAAQ,SAAS,GAAG;AAChE,UAAI,OAAO;AACA,eAAA,KAAK,MAAM,KAAK;AAAA,MAAA,OACpB;AACI,eAAA;AAAA,MACX;AAAA,IAAA;AAGJ,+BAAM,CAAC,KAAa,UAAmB;AACnCH,cAAM,4BAA4B,GAAG,aAAa,KAAK,GAAG;AAC1D,qBAAe,QAAQ,SAAS,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAAA;AAG9D,kCAAS,CAAC,QAAsB;AACb,qBAAA,WAAW,SAAS,GAAG;AAAA,IAAA;AAAA;AAE9C;AAEA,MAAM,aACN;AAAA,EADA;AAEI,+BAAM,CAAC,QAA0B;AAC7B,YAAM,QAAuB,aAAa,QAAQ,SAAS,GAAG;AAC9D,UAAI,OAAO;AACA,eAAA,KAAK,MAAM,KAAK;AAAA,MAAA,OACpB;AACI,eAAA;AAAA,MACX;AAAA,IAAA;AAGJ,+BAAM,CAAC,KAAa,UAAmB;AACnCA,cAAM,0BAA0B,GAAG,aAAa,KAAK,GAAG;AACxD,mBAAa,QAAQ,SAAS,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,IAAA;AAG5D,kCAAS,CAAC,QAAsB;AACf,mBAAA,WAAW,SAAS,GAAG;AAAA,IAAA;AAAA;AAE5C;AAEA,MAAM,cACN;AAAA,EADA;AAEI,+BAA4B,CAAA;AAE5B,+BAAM,CAAC,QAA0B;AAC7B,YAAM,QAAW,mBAAK,QAAO,SAAS,GAAG;AACzC,UAAI,OAAO;AACA,eAAA;AAAA,MAAA,OACJ;AACI,eAAA;AAAA,MACX;AAAA,IAAA;AAGJ,+BAAM,CAAC,KAAa,UAAmB;AACnCA,cAAM,2BAA2B,GAAG,aAAa,KAAK,GAAG;AACpD,yBAAA,QAAO,SAAS,GAAG,IAAI;AAAA,IAAA;AAGhC,kCAAS,CAAC,QAAsB;AACrB,aAAA,mBAAK,QAAO,SAAS,GAAG;AAAA,IAAA;AAAA;AAEvC;AAnBI;AA2BG,MAAM,qBACb;AAAA,EAGI,YAAY,SAAgC;AAF5C;AAGQ,QAAA,QAAQ,cAAc,OAAO;AACpB,eAAA;AAAA,IACb;AACA,YAAQ,QAAQ,mBAAmB;AAAA,MACnC,KAAK;AACI,2BAAA,UAAW,IAAI;AACpB;AAAA,MACJ,KAAK;AACI,2BAAA,UAAW,IAAI;AACpB;AAAA,MACJ,KAAK;AACI,2BAAA,UAAW,IAAI;AACpB;AAAA,MACJ,KAAK;AACI,2BAAA,UAAW,IAAI;AACpB;AAAA,MACJ;AACI,cAAM,IAAI,MAAM,YAAY,QAAQ,iBAAiB,iBAAiB;AAAA,IAC1E;AACA;AAAA,EACJ;AAAA,EAEA,aACA;AACI,WAAO,mBAAK;AAAA,EAChB;AACJ;AA7BI;AClHS,MAAA,sBAAsB,MAAyB,OAAO,mBAAmB;AAG/E,MAAM,mBAAmB;AAAA;AAAA,EAE5B,SAAS,CAAI,KAAU,YAAsC;AACnD,UAAA,KAAK,IAAI,qBAAwB,EAAC,mBAAmB,QAAQ,mBAAmB,WAAW,KAAA,CAAK;AAEhG,UAAA,iBAAiB,GAAG;AAe1B,QAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM;AAC/B,UAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,IACvC;AACA,QAAI,OAAO,iBAAiB,KAAK,mBAAmB,IAAI;AAIpD,QAAA,QAAQ,qBAAqB,cAAc;AAAA,EACnD;AACJ;ACxCa,MAAA,iBAAiB,YAAY,yBAAyB;AAAA;AAAA;AAAA,EAG/D,OAAO,MAAuB;AACnB,WAAA;AAAA,MACH,SAAS,CAAE;AAAA,IAAA;AAAA,EAEnB;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS;AAAA,IACL,aAAa,UAAqB;AACvB,aAAA,KAAK,QAAQ,SAAS,EAAE;AAAA,IACnC;AAAA,IAEA,aAAa,UAAqB,UAAqB;AACnD,YAAM,SAAkB,KAAK,QAAQ,SAAS,EAAE;AAC5C,UAAA,UAAU,OAAO,SAAS;AACnB,eAAA,OAAO,QAAQ,SAAS,EAAE;AAAA,MACrC;AAAA,IACJ;AAAA,IAEA,OAAO,UAAqB,UAAqB;AAC7C,UAAI,CAAC,KAAK,QAAQ,SAAS,EAAE,GAAG;AAEvB,aAAA,QAAQ,SAAS,EAAE,IAAI;AAAA,UACxB,IAAI,SAAS;AAAA,UACb,OAAO,SAAS;AAAA,UAChB,4BAA4B,EAAE,GAAG,SAAS,2BAA4B;AAAA,UACtE,2BAA2B,EAAE,GAAG,SAAS,0BAA2B;AAAA,UACpE,SAAS,CAAE;AAAA,QAAA;AAAA,MAEnB;AACA,YAAM,SAAkB,KAAK,QAAQ,SAAS,EAAE;AAEhD,UAAI,OAAO,SAAS;AAChB,YAAI,CAAC,OAAO,QAAQ,SAAS,EAAE,GAAG;AAE9B,gBAAM,SAAkB;AAAA,YACpB,IAAI,SAAS;AAAA,YACb,oBAAoB,EAAE,GAAG,SAAS,mBAAmB;AAAA,YACrD,SAAS,EAAE,GAAG,SAAS,QAAQ;AAAA,YAC/B,OAAO,SAAS;AAAA,YAChB,gBAAgB,EAAE,GAAG,SAAS,eAAe;AAAA,UAAA;AAE1C,iBAAA,QAAQ,OAAO,EAAE,IAAI;AAAA,QAAA,OACzB;AACH,gBAAM,SAAkB,OAAO,QAAQ,SAAS,EAAE;AAClD,iBAAO,iBAAiB,EAAE,GAAG,SAAS,eAAe;AAAA,QACzD;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ,CAAC;ACvDW,IAAA,iCAAAI,kBAAL;AACNA,gBAAA,SAAU,IAAA;AACVA,gBAAA,SAAU,IAAA;AACVA,gBAAA,SAAU,IAAA;AACVA,gBAAA,QAAS,IAAA;AACTA,gBAAA,OAAQ,IAAA;AALGA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;AAoCA,IAAA,iCAAAC,kBAAL;AACNA,gBAAA,UAAW,IAAA;AACXA,gBAAA,SAAU,IAAA;AACVA,gBAAA,SAAU,IAAA;AAHCA,SAAAA;AAAA,GAAA,gBAAA,CAAA,CAAA;AC3CZ,MAAML,UAAQ,YAAY,QAAQ,QAAQ,GAAG,gBAAgB;AA2BtD,MAAM,iBAAiB;AAAA;AAAA,EAW1B,YAAY,KAAU,SAAiC;AA6GvD;AAtHA;AAAA,mCAAwC,CAAA;AACxC,gCAAU;AACV,kCAAY;AACZ;AACA;AAEA;AAAA;AAmCA,qCAAY,OAAO,qBAA0D;AACrE,UAAA;AACJ,UAAI,kBAAkB;AAEF,wBAAA;AAAA,MAAA,OACb;AAEH,wBAAgB,mBAAK,UAAS;AAAA,MAClC;AACA,YAAM,cAAyB;AAAA,QAC3B,IAAI,uBAAK,WAAL;AAAA;AAAA,QACJ,QAAQ,cAAc,yBAAyB;AAAA,QAC/C,eAAe,cAAc,0BAA0B,mBAAK,OAAM,cAAc,0BAA0B;AAAA,QAC1G,OAAO,aAAa;AAAA,QACpB,2BAA2B,cAAc;AAAA,QACzC,4BAA4B,cAAc;AAAA,QAC1C,WAAW,CAAE;AAAA,QACb,WAAW,CAAC,kBAA6C,KAAK,kBAAkB,aAAa,aAAa;AAAA,QAC1G,YAAY,CAAC,WAAwC,mBAAK,aAAL,WAAiB,aAAa;AAAA,QACnF,MAAM,YAA8B,mBAAK,aAAL,WAAiB;AAAA,MAAW;AAEpE,yBAAK,0BAAyB,MAAM,yBAAyB,YAAY,EAAE,IAAI,MAAM;AACrF,cAAQ,IAAI,mBAAmB,YAAY,EAAE,GAAG;AAEpC,kBAAA,OAAO,YAAY,SAAS,MAAoB;AAChD,gBAAA,IAAI,KAAK,IAAI;AAAA,MAAA;AAGb,kBAAA,OAAO,UAAU,SAAS,OAAO;AACzC,gBAAQ,IAAI,KAAK;AAAA,MAAA;AAGf,YAAA;AAAA,QACF;AAAA;AAAA,QACA;AAAA;AAAA,MAAA,IACA,IAAI,eAAe;AAEvB,YAAM,aAAa;AAEnB,cAAQ,IAAI,4DAA4D,KAAK,UAAU,YAAY,yBAAyB,CAAC,GAAG;AAE3H,yBAAA,sBAAA,WAAqB,aAAa,uBAAuB,aAAa;AAAA,QACvE,MAAM;AAAA;AAAA,QAEN,SAAS,EAAE,GAAG,YAAY,0BAA0B;AAAA,SACvB;AAGtB,iBAAA,YAAY,OAAO,SAAuB;AACjD,cAAM,wBAAgD,KAAK;AAC3D,gBAAQ,sBAAsB,SAAS;AAAA,UACvC,KAAK,uBAAuB;AACxB,wBAAY,QAAQ,aAAa;AACjC;AAAA,UACJ,KAAK,uBAAuB;AACnB,+BAAA,mBAAA,WAAkB,aAAa,sBAAsB;AAC1D;AAAA,UACJ;AACgB,wBAAA,cAAc,yBAAyB,YAAY,qBAAqB;AAAA,QACxF;AAAA,MAAA;AAGC,yBAAA,YAAW,YAAY,EAAE,IAAI;AAElC,cAAQ,IAAI,kBAAkB,YAAY,EAAE,GAAG;AAExC,aAAA;AAAA,IAAA;AAGX,6CAAoB,CAAC,aAAwB,kBAA6C;AACtF,YAAM,WAAsB,mBAAK,oBAAL,WAAwB,aAAa;AACrD,kBAAA,UAAU,SAAS,EAAE,IAAI;AAChC,yBAAA,sBAAA,WAAqB,aAAa;AAC9B,eAAA,4BAA4B,MAAM,kBAAkB,SAAS,EAAE,mBAAmB,YAAY,EAAE,IAAI,KAAK;AAC3G,aAAA;AAAA,IAAA;AAaX,6CAAuB,CAAC,UAAqB,aAA8B;AAGvE,YAAM,UAAuC;AAAA,QACzC,QAAQ,sBAAK,wCAAL,WAAuB;AAAA,MAAQ;AAE3C,yBAAK,sBAAL,WAA0B,UAAU,uBAAuB,KAAK;AAAA,IAAO;AAG3E,0CAAoB,CAAC,UAAqB,oBAAuD;AAC7F,YAAM,QAAQ;AAER,YAAA,EAAE,OAAW,IAAA;AAEnB,UAAI,SAAS,UAAU,OAAO,EAAE,GAAG;AAC/B,cAAM,WAAsB,SAAS,UAAU,OAAO,EAAE;AACxD,YAAI,SAAS;AAGb,iBAAS,iBAAiB,EAAE,GAAG,OAAO,eAAe;AAEjD,YAAA,OAAO,eAAe,SAAS;AAC/B,mBAAS,eAAe,UAAU,CAAC,GAAG,OAAO,eAAe,OAAO;AAAA,QAAA,OAChE;AACM,mBAAA,eAAe,UAAU;QACtC;AAEI,YAAA,OAAO,eAAe,SAAS;AAC/B,iBAAO,eAAe,QAAQ,QAAQ,CAAC,YAAY;AACtC,qBAAA,4BAA4B,MAAM,OAAO;AAAA,UAAA,CACrD;AACQ,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,cAAc;AAC3B,mBAAA,4BAA4B,iBAAiB,MAAM,qBAAqB;AAAA,YAC7E,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,YAAY;AACzB,mBAAA,4BAA4B,iBAAiB,MAAM,mBAAmB;AAAA,YAC3E,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,YAAY;AACzB,mBAAA,4BAA4B,iBAAiB,MAAM,mBAAmB;AAAA,YAC3E,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,qBAAqB;AAClC,mBAAA,4BAA4B,iBAAiB,MAAM,4BAA4B;AAAA,YACpF,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,WAAW;AACxB,mBAAA,4BAA4B,iBAAiB,MAAM,kBAAkB;AAAA,YAC1E,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,OAAO;AACpB,mBAAA,4BAA4B,iBAAiB,MAAM,aAAa;AAAA,YACrE,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,oBAAoB;AACjC,mBAAA,4BAA4B,iBAAiB,MAAM,sBAAsB;AAAA,YAC9E,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,UAAU;AACvB,mBAAA,4BAA4B,iBAAiB,MAAM,gBAAgB;AAAA,YACxE,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,UAAU;AACvB,mBAAA,4BAA4B,iBAAiB,MAAM,gBAAgB;AAAA,YACxE,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA,4BAA4B,iBAAiB,MAAM,0BAA0B;AAAA,YAClF,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,SAAS;AACtB,mBAAA,4BAA4B,iBAAiB,MAAM,eAAe;AAAA,YACvE,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA,4BAA4B,iBAAiB,MAAM,yBAAyB;AAAA,YACjF,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEI,YAAA,OAAO,eAAe,YAAY;AACzB,mBAAA,4BAA4B,iBAAiB,MAAM,aAAa;AAAA,YACrE,KAAK,SAAS,eAAe;AAAA,UAAA,CACJ;AACpB,mBAAA;AAAA,QACb;AAEA,YAAI,QAAQ;AACF,gBAAA,OAAO,UAAU,QAAQ;AAAA,QACnC;AAAA,MACJ;AAAA,IAAA;AAGJ,2CAAqB,CAAC,UAAqB,kBAA6C;AAE/E,6BAAA,SAAA;AACL,yBAAK,0BAAyB,MAAM,+BAA+B,mBAAK,QAAO,IAAI,MAAM;AACzF,YAAM,qBAA0C;AAAA,QAC5C,KAAK,GACf,SAAS,0BAA0B,QAAQ,GAAG,eAAe,mBAAmB,GAAG,SAAS,0BAA0B,OAAO,IAAI,SAAS,0BAA0B,SAAS,GAC7K,eAAe,aAAa,SACtB,SAAS,EAAE,GACjB,eAAe,SAAS,GACxB,mBAAK,QAAO;AAAA,QACF,IAAI,mBAAK,SAAQ,SAAS;AAAA,QAC1B,UAAW,SAAS,0BAA0B,WAAW,SAAS,0BAA0B,WAAW;AAAA,QACvG,WAAW,GAAG,SAAS,0BAA0B,OAAO,IAAI,SAAS,0BAA0B,SAAS;AAAA,QACxG,UAAU,SAAS,SAAS,EAAE;AAAA,QAC9B,eAAe,mBAAK;AAAA,MAAA;AAExB,YAAM,WAAsB;AAAA,QACxB,IAAI,mBAAK;AAAA,QACT,6BAA6B,mBAAK,0BAAyB,+BAA+B,kBAAkB;AAAA,QAC5G;AAAA,QACA,OAAO,aAAa;AAAA,QACpB,SAAS;AAAA,QACT,gBAAgB;AAAA,UACZ,cAAc;AAAA,UACd,YAAY;AAAA,UACZ,YAAY;AAAA,UACZ,qBAAqB;AAAA,UACrB,UAAU;AAAA,UACV,WAAW;AAAA,UACX,OAAO;AAAA,UACP,UAAU;AAAA,UACV,SAAS;AAAA,UACT,oBAAoB;AAAA,UACpB,SAAS,CAAE;AAAA,UACX,YAAY;AAAA,QAChB;AAAA,QACA,MAAM,YAA8B,mBAAK,aAAL,WAAiB,UAAU;AAAA,MAAQ;AAEpE,aAAA;AAAA,IAAA;AAIX;AAAA,6CAAuB,CAAC,UAAqB,SAAgC,SAAmD,mBAAyB;AACrJ,UAAI,gBAAgB;AAChB,gBAAQ,IAAI,2CAA2C;AAC9C,iBAAA,OAAO,YAAY,EAAE,SAAS,WAAW,CAAC,cAAc,CAAC;AAClE,gBAAQ,IAAI,qDAAqD;AAAA,MAAA,OAC9D;AACH,gBAAQ,IAAI,sBAAsB;AAClC,iBAAS,OAAO,YAAY,EAAE,SAAS,QAAS,CAAA;AAAA,MACpD;AAAA,IAAA;AAGJ,yCAAmB,CAAC,aAAwB;AACxC,UAAI,SAAS,QAAQ;AACjB,cAAM,QAAQ;AAEd,iBAAS,OAAO;AAEhB,gBAAQ,IAAI,uBAAuB,SAAS,EAAE,GAAG;AACjD,cAAM,aAAa,QAAQ;AACpB,eAAA,mBAAK,YAAW,SAAS,EAAE;AAAA,MAItC;AAAA,IAAA;AAGJ,oCAAc,OAAO,UAAqB,WAA6B,SAA2B;AAE9F,UAAI,aAAa,MAAM;AACnB,cAAM,MAAgB,OAAO,KAAK,SAAS,SAAS;AAChD,YAAA,IAAI,SAAS,GAAG;AACV,gBAAA,KAAK,IAAI,CAAC;AACL,qBAAA,SAAS,UAAU,EAAE;AAAA,QACpC;AAAA,MACJ;AACA,UAAI,aAAa,MAAM;AACd,2BAAA,sBAAA,WAAqB,UAAU,uBAAuB,MAAM;AAAA,UAC7D,QAAQ,sBAAK,wCAAL,WAAuB;AAAA,QAAQ;AAG3C,iBAAS,4BAA4B,MAAM,wBAAwB,SAAS,EAAE,GAAG;AAEjF,cAAM,YAAgC,CAAA;AAEtC,kBAAU,MAAM,YAA8B;AAC1C,gBAAM,MAAM,GAAG;AACR,iBAAA,SAAS,4BAA4B;YAC5C;AAEJ,cAAM,QAAQ;AACR,cAAA,aAAa,UAAU,QAAQ;AAE9B,eAAA,SAAS,UAAU,SAAS,EAAE;AAErC,cAAM,SAAS,MAAM,QAAQ,IAAI,SAAS;AAClC,gBAAA,IAAI,gCAAgC,MAAM,GAAG;AAAA,MAQzD;AACO,aAAA;AAAA,IAAA;AAGX,oCAAc,OAAO,aAA0C;AACvD,UAAA;AACI,YAAA,SAAS,UAAU,aAAa,SAAS;AACzC,6BAAK,sBAAL,WAA0B,UAAU,uBAAuB,MAAM;AAKjE,kBAAQ,IAAI,wBAAwB,SAAS,EAAE,GAAG;AAClD,gBAAM,YAAgC,CAAA;AAGtC,gBAAM,MAAgB,OAAO,KAAK,SAAS,SAAS;AAEhD,cAAA,QAAQ,CAAC,OAAO;AACV,kBAAA,WAAsB,SAAS,UAAU,EAAE;AACjD,sBAAU,KAAK,mBAAK,aAAL,WAAiB,UAAU,SAAS;AAAA,UAAA,CACtD;AACK,gBAAA,QAAQ,IAAI,SAAS;AAE3B,6BAAK,kBAAL,WAAsB;AAAA,QAC1B;AACO,eAAA;AAAA,eACF,OAAO;AACJ,gBAAA,IAAI,uCAAuC,KAAK,GAAG;AACpD,eAAA;AAAA,MACX;AAAA,IAAA;AAGJ,kDAAyB,MAAwB;AAE7C,UAAI,oBAAsC;AAC/B,iBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACxD,YAAI,mBAAmB;AACf,cAAA,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,kBAAkB,SAAS,EAAE,QAAQ;AACvE,gCAAA;AAAA,UACxB;AAAA,QAAA,OACG;AACiB,8BAAA;AAAA,QACxB;AAAA,MACJ;AACO,aAAA;AAAA,IAAA;AAGX,yCAAgB,MAAwB;AAEpC,UAAI,aAA+B;AACxB,iBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AACxD,YAAI,YAAY;AACR,cAAA,OAAO,KAAK,UAAU,SAAS,EAAE,SAAS,OAAO,KAAK,WAAW,SAAS,EAAE,QAAQ;AACvE,yBAAA;AAAA,UACjB;AAAA,QAAA,OACG;AACU,uBAAA;AAAA,QACjB;AAAA,MACJ;AACO,aAAA;AAAA,IAAA;AA6CX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAAiB,YAAY;AACzB,YAAM,YAAY,CAAA;AACP,iBAAA,CAAG,EAAA,SAAS,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AAC9C,kBAAA,KAAK,UAAU,KAAM,CAAA;AAAA,MACnC;AAEM,YAAA,QAAQ,IAAI,SAAS;AAAA,IAAA;AA1c3B,uBAAK,MAAO;AACZ,QAAI,SAAS;AACT,yBAAK,UAAW;AAAA,IAAA,OACb;AACH,yBAAK,UAAW;IACpB;AAEMA,YAAA,mDAAmD,4CAA4C,CAAC,GAAG;AAEzGA,YAAM,kEAAkE,OAAO,gCAAgC,CAAC,GAAG;AAG9G,uBAAA,0BAA2B,2BAA2B,GAAG;AAG9DA,YAAM,mBAAK,yBAAwB;AACnCA,YAAM,8CAA8C;AACzC,eAAA,CAAC,GAAK,KAAK,OAAO,QAAQ,IAAI,OAAO,iBAAiB,IAAI,GAAG;AAC9DA,cAAA,GAAG,GAAG,EAAE;AAAA,IAClB;AAEI,QAAA,CAAC,mBAAK,2BAA0B;AAChCA,cAAM,8DAA8D,OAAO,gCAAgC,CAAC,GAAG;AAAA,IACnH;AAAA,EACJ;AAAA,EAEA,IAAI,YACJ;AACI,WAAO,mBAAK;AAAA,EAChB;AAAA,EA6XA,IAAI,UAAiC;AACjC,WAAO,mBAAK;AAAA,EAChB;AAAA,EAEA,IAAI,QAAQ,SAAgC;AACxC,uBAAK,UAAW;AAAA,EACpB;AA4CJ;AAtdI;AACA;AACA;AACA;AACA;AAEA;AAgHA;AAAA,+BAAkB,UAA8B;AACrC,SAAA;AAAA,IACH,IAAI,SAAS;AAAA,IACb,oBAAoB,EAAE,GAAG,SAAS,mBAAmB;AAAA,IACrD,SAAS,EAAE,GAAG,SAAS,QAAQ;AAAA,IAC/B,OAAO,SAAS;AAAA,IAChB,gBAAgB,EAAE,GAAG,SAAS,eAAe;AAAA,EAAA;AAErD;AAEA;AASA;AAkHA;AA2CA;AAWA;AAeA;AAyCA;AA+GG,MAAM,wCAAwC,MAAc;AAEtD,MAAA,4CAA4C,CAAC,QAAyB,QAAQ;AAE9E,MAAA,8CAA8C,MAAe,qCAAqC,oCAAoC;AAItI,MAAA,sBAAsB,MAAwB,OAAO,yBAAyB;AAEpF,MAAM,yBAAyB;AAAA;AAAA,EAElC,SAAS,CAAC,KAAU,YAAoC;AACpD,UAAM,KAAK,IAAI,iBAAiB,KAAK,OAAO;AAG5C,QAAI,CAAC,IAAI,OAAO,iBAAiB,MAAM;AAC/B,UAAA,OAAO,iBAAiB,OAAO,CAAA;AAAA,IACvC;AACA,QAAI,OAAO,iBAAiB,KAAK,yBAAyB,IAAI;AAI1D,QAAA,QAAQ,2BAA2B,EAAE;AAAA,EAC7C;AACJ;AC9gBA,MAAMA,UAAQ,YAAY,QAAQ,QAAQ,GAAG,EAAE;AAaxC,MAAM,sBACb;AAAA,EAKI,YAAY,MAAmB;AAJ/B,iDAAoD,CAAA;AACpD,uDAAiC;AACjC;AAAA;AAOA,uCAAc,CAAC,YAAqE;AAChF,aAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9B,cAAA,EAAE,UAAU,IAAI,QAAQ;AAC9B,YAAI,WAAW;AACP,cAAA,mBAAK,0BAAyB,SAAS,GAAG;AACnC,mBAAA,4CAA4C,SAAS,+DAA+D;AAAA,UAAA,OACxH;AACE,+BAAA,0BAAyB,SAAS,IAAI;AAAA,cACvC,uBAAuB,EAAE,GAAG,QAAQ;AAAA,cACpC,IAAI,MAAM;AACN,sBAAM,SAAS,mBAAK,0BAAyB,SAAS,EAAE;AACxD,6BAAa,mBAAK,0BAAyB,SAAS,EAAE,OAAO;AAC7D,2BAAW,MAAM;AACN,yBAAA,mBAAK,0BAAyB,SAAS;AAAA,mBAC/C,CAAC;AACJ,oBAAI,QAAQ;AACRA,0BAAM,+DAA+D,SAAS,wCAAwC,KAAK,UAAU,MAAM,CAAC,GAAG;AAC/I,0BAAQ,MAAM;AAAA,gBAAA,OACX;AACH,wBAAM,MAAM;AACZA,0BAAM,GAAG;AACT,yBAAO,GAAG;AAAA,gBACd;AAAA,cACJ;AAAA,cACA,SAAS,WAAW,MAAM;AACtB,2BAAW,MAAM;AACN,yBAAA,mBAAK,0BAAyB,SAAS;AAAA,mBAC/C,CAAC;AACJA,wBAAM,uDAAuD,mBAAK,+BAA8B,yBAAyB,SAAS,gBAAgB,KAAK,UAAU,mBAAK,0BAAyB,SAAS,EAAE,qBAAqB,CAAC,GAAG;AACnO,uBAAO,sEAAsE;AAAA,cAAA,GAC9E,mBAAK,+BAA8B;AAAA;AAAA,YAAA;AAEpCA,oBAAA,oDAAoD,SAAS,sCAAsC,KAAK,UAAU,mBAAK,0BAAyB,SAAS,EAAE,qBAAqB,CAAC,GAAG;AACrL,+BAAA,OAAM,YAAY,OAAO;AAAA,UAClC;AAAA,QAAA,OACG;AACH,gBAAM,MAAM;AACZA,kBAAM,GAAG;AACT,iBAAO,GAAG;AAAA,QACd;AAAA,MAAA,CACH;AAAA,IAAA;AAGL,uCAAiB,MAAM;AACd,yBAAA,OAAM,YAAY,OAAO,QAAsB;AAChD,cAAM,wBAAgD,IAAI;AACtD,YAAA,sBAAsB,QAAQ,WAAW;AACnC,gBAAA,YAAY,sBAAsB,QAAQ;AAC5C,cAAA,aAAa,cAAc,IAAI;AAC3B,gBAAA,mBAAK,0BAAyB,SAAS,GAAG;AACpC,oBAAA,yBAAiD,mBAAK,0BAAyB,SAAS;AACvE,qCAAA,gCAAgC,EAAE,GAAG;AAC5D,qCAAuB,GAAG;AAAA,YAAA,OACvB;AACH,oBAAM,IAAI,MAAM,4EAA4E,SAAS,GAAG;AAAA,YAC5G;AAAA,UACJ;AAAA,QACJ;AAAA,MAAA;AAAA,IACJ;AA9DA,uBAAK,OAAQ;AACb,uBAAK,gBAAL;AAAA,EACJ;AA8DJ;AArEI;AACA;AACA;AAkDA;ACnEJ,MAAM,QAAQ,YAAY,QAAQ,QAAQ,GAAG,iBAAiB;AAcvD,MAAe,eAAe;AAAA,EAMjC,cAAc;AALd,gDAA8C;AAC9C,+CAAuD;AACvD,iCAAoC,CAAA;AACpC,uBAAAM,WAA0C;AAM1C,wCAAe,CAAC,QAAgB;AAC5B,YAAM,8BAA8B;AAC7B,aAAA,KAAK,MAAM,KAAK,WAAW,KAAK,MAAM,GAAG,CAAC;AAAA,IAAA;AAIrD;AAAA,qCAAY,OAAO,WAAmC;AAClD,YAAM,2BAA2B;AACjC;AAAA,IAAA;AAGJ,yCAAgB,CAAC,WAAoB;AAEjC,UAAI,mBAAK,0BAAyB;AAC9B,cAAM,UAAkC;AAAA,UACpC,SAAS,uBAAuB;AAAA,UAChC,SAAS;AAAA,YACL;AAAA,UACJ;AAAA,QAAA;AAEC,2BAAA,yBAAwB,YAAY,OAAO;AAAA,MACpD;AAAA,IAAA;AAeJ,wCAAkB,CAAC,sBAAkD;AACjE,YAAM,gCAAgC;AACtC,yBAAK,yBAA0B,kBAAkB;AAC5C,yBAAA,yBAAwB,YAAY,SAAS,MAAoB;AAClE,gBAAQ,IAAI,qCAAqC,KAAK,IAAI,EAAE;AAAA,MAAA;AAGhE,yBAAK,wBAAyB,IAAI,sBAAsB,mBAAK,wBAAuB;AAEpF,YAAM,WAAmC;AAAA,QACrC,SAAS,uBAAuB;AAAA,QAChC,SAAS,CAAE;AAAA,MAAA;AAGV,yBAAA,yBAAwB,YAAY,QAAQ;AAAA,IAAA;AAGrD,uCAAc,OAAO,WAAoB;AACrC,YAAM,6BAA6B;AACnC,cAAQ,IAAI,gBAAgB,KAAK,UAAU,MAAM,CAAC,GAAG;AACrD,aAAO,QAAQ,aAAa;AAC5B,WAAK,UAAU,MAAM;AAAA,IAAA;AAGzB,wCAAkB,CAAC,+BAA4D;AAC3E,YAAM,gCAAgC;AAChC,YAAA,EAAE,OAAW,IAAA;AACd,yBAAA,UAAS,OAAO,EAAE,IAAI;AAC3B,WAAK,YAAY,MAAM;AAAA,IAAA;AAG3B,qCAAe,CAAC,+BAA4D;AACxE,YAAM,6BAA6B;AACnC,UAAI,+BAA+B,MAAM;AAC1B,mBAAA,CAAG,EAAA,UAAU,KAAK,OAAO,QAAQ,mBAAK,SAAQ,GAAG;AACxD,qBAAW,QAAQ,aAAa;AAAA,QACpC;AAAA,MAAA,OACG;AACH,cAAM,SAAkB,mBAAK,UAAS,2BAA2B,OAAO,EAAE;AAC1E,YAAI,QAAQ;AACR,iBAAO,QAAQ,aAAa;AAAA,QAChC;AAAA,MACJ;AAAA,IAAA;AAGJ,0CAAiB,OAAM,SAAuB;AAC1C,YAAM,gCAAgC;AAClC,UAAA;AACA,cAAM,iBAAyC,KAAK;AACpD,gBAAQ,eAAe,SAAS;AAAA,UAChC,KAAK,uBAAuB;AACnB,+BAAA,iBAAA,WAAgB,eAAe;AAC/B,+BAAAA,WAAY,eAAe,QAAuC;AACvE,kBAAM,8CAA8C,KAAK,UAAU,mBAAKA,UAAQ,CAAC,GAAG;AACpF;AAAA,UACJ,KAAK,uBAAuB;AACnB,+BAAA,iBAAA,WAAgB,eAAe;AACpC;AAAA,UACJ,KAAK,uBAAuB;AACnB,+BAAA,cAAA,WAAa,eAAe;AACjC;AAAA,UACJ;AACU,kBAAA,oCAAoC,eAAe,OAAO,cAAc;AAAA,QAClF;AAAA,eACK,OAAO;AACZ,gBAAQ,IAAI,KAAK;AAAA,MACrB;AAAA,IAAA;AAzGA,UAAM,6BAA6B;AAAA,EACvC;AAAA,EA0BA,IAAI,wBAAsD;AACtD,WAAO,mBAAK;AAAA,EAChB;AAAA,EAEA,IAAI,yBAA6C;AAC7C,WAAO,mBAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAyC;AACzC,WAAO,mBAAKA;AAAA,EAChB;AAsEJ;AAjHI;AACA;AACA;AACAA,YAAA;AA0CA;AAwBA;AAOA;","x_google_ignoreList":[1,3]}
@@ -35,8 +35,8 @@ var __privateMethod = (obj, member, method) => {
35
35
  return method;
36
36
  };
37
37
  (function(global, factory) {
38
- typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("vue"), require("debug"), require("@nsshunt/stspublisherserver"), require("@nsshunt/stsinstrumentation"), require("@nsshunt/stsmodels"), require("pinia"), require("@nsshunt/stsutils")) : typeof define === "function" && define.amd ? define(["exports", "vue", "debug", "@nsshunt/stspublisherserver", "@nsshunt/stsinstrumentation", "@nsshunt/stsmodels", "pinia", "@nsshunt/stsutils"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["@nsshunt/stsvueutils"] = {}, global.vue, global.debug, global.stspublisherserver, global.stsinstrumentation, global.stsmodels, global.pinia, global.stsutils));
39
- })(this, function(exports2, vue, debugModule, stspublisherserver, stsinstrumentation, stsmodels, pinia, stsutils) {
38
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("vue"), require("debug"), require("@nsshunt/stspublisherserver"), require("@nsshunt/stsinstrumentation"), require("@nsshunt/stsutils"), require("pinia")) : typeof define === "function" && define.amd ? define(["exports", "vue", "debug", "@nsshunt/stspublisherserver", "@nsshunt/stsinstrumentation", "@nsshunt/stsutils", "pinia"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global["@nsshunt/stsvueutils"] = {}, global.vue, global.debug, global.stspublisherserver, global.stsinstrumentation, global.stsutils, global.pinia));
39
+ })(this, function(exports2, vue, debugModule, stspublisherserver, stsinstrumentation, stsutils, pinia) {
40
40
  var _store, _storage, _workersEx, _runner, _workerId, _options, _STSInstrumentController, _app, _CreateRunnerCopy, CreateRunnerCopy_fn, _SetRunnerIntoWorker, _ProcessTelemetry, _CreateAsyncRunner, _PostMessageToWorker, _TerminateWorker, _StopRunner, _StopWorker, _requestResponseMessages, _requestResponseMessageTimeout, _port, _SetupListener, _collectorCollectorPort, _requestResponseHelper, _runners, _options2, _SetMessagePort, _AddAsyncRunner, _StopRunners;
41
41
  "use strict";
42
42
  const STSStoragePluginKey = Symbol("storage");
@@ -572,6 +572,12 @@ var __privateMethod = (obj, member, method) => {
572
572
  });
573
573
  update = true;
574
574
  }
575
+ if (runner.instrumentData.childCount) {
576
+ runnerEx.publishInstrumentController.UpdateInstrument(stsinstrumentation.Gauge.CHILD_COUNT, {
577
+ val: runnerEx.instrumentData.childCount
578
+ });
579
+ update = true;
580
+ }
575
581
  if (update) {
576
582
  store.Update(workerEx, runnerEx);
577
583
  }
@@ -581,7 +587,7 @@ var __privateMethod = (obj, member, method) => {
581
587
  __privateWrapper(this, _runner)._++;
582
588
  __privateGet(this, _STSInstrumentController).LogEx(`Creating new async runner: [${__privateGet(this, _runner)}]`.yellow);
583
589
  const asyncRunnerContext = {
584
- nid: `${workerEx.workerThreadWorkerOptions.hostName}${stsmodels.ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}${stsmodels.ModelDelimeter.NID_SEPERATOR}worker${workerEx.id}${stsmodels.ModelDelimeter.SEPERATOR}${__privateGet(this, _runner)}`,
590
+ nid: `${workerEx.workerThreadWorkerOptions.hostName}${stsutils.ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}${stsutils.ModelDelimeter.NID_SEPERATOR}worker${workerEx.id}${stsutils.ModelDelimeter.SEPERATOR}${__privateGet(this, _runner)}`,
585
591
  id: __privateGet(this, _runner).toString(),
586
592
  hostName: workerEx.workerThreadWorkerOptions.hostName ? workerEx.workerThreadWorkerOptions.hostName : "host",
587
593
  agentName: `${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}`,
@@ -605,7 +611,8 @@ var __privateMethod = (obj, member, method) => {
605
611
  duration: 0,
606
612
  latency: 0,
607
613
  activeRequestCount: 0,
608
- message: []
614
+ message: [],
615
+ childCount: 0
609
616
  },
610
617
  Stop: async () => __privateGet(this, _StopRunner).call(this, workerEx, runnerEx)
611
618
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stsvueutils.umd.js","sources":["../src/plugins/stsPluginKeys.ts","../node_modules/tiny-emitter/index.js","../src/plugins/emitter.ts","../node_modules/js-cookie/dist/js.cookie.mjs","../src/plugins/stsStorage.ts","../src/plugins/storage.ts","../src/stores/TelemetryStore.ts","../src/plugins/stsTestWorkerDefinitions.ts","../src/plugins/workerManager.ts","../src/plugins/requestResponseHelper.ts","../src/plugins/workerInstance.ts"],"sourcesContent":["// Individual STS plugin keys for provide/inject logic\nexport const STSStoragePluginKey = Symbol('storage')\nexport const STSEmitterPluginKey = Symbol('emitter')\nexport const STSWorkerManagerPluginKey = Symbol('workerManager')\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","import { inject } from 'vue'\n\nimport { STSEmitterPluginKey } from './stsPluginKeys';\n\nimport * as te from 'tiny-emitter';\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 useSTSEmitterPlugin = (): te.TinyEmitter => inject(STSEmitterPluginKey) as te.TinyEmitter\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSEmitterPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any) => {\n const tinyEmitter: te.TinyEmitter = new te.TinyEmitter();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSEmitterPluginKey] = tinyEmitter;\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(STSEmitterPluginKey, tinyEmitter);\n }\n}\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Debug from 'debug';\nconst debug = Debug(`proc:${process.pid}:storage.ts`);\n\nimport Cookies from 'js-cookie'\nimport type { JSONObject } from \"@nsshunt/stsutils\";\n\nlet PREFIX = '_ststra_';\n\nexport interface IStsStorage<T> {\n\tget(key: string): T | null\n\tset(key: string, value: T, options?: JSONObject): void\n\tremove(key: string): void\n}\n\nexport enum ClientStorageType {\n\tLOCAL_STORAGE = 'LocalStorage', //@@ todo\n\tSESSION_STORAGE = 'SessionStorage',\n\tCOOKIE_STORAGE = 'CookieStorage',\n\tMEMORY_STORAGE = 'MemoryStorage' //@@ todo\n}\n\nclass CookieStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const raw = Cookies.get(PREFIX + key);\n if (raw) {\n return JSON.parse(raw);\n } else {\n return null;\n }\n }\n\n set = (key: string, value: T, options: JSONObject = { }) => {\n let cookieAttributes: Cookies.CookieAttributes = { };\n if ('https:' === window.location.protocol) {\n cookieAttributes = {\n secure: true,\n sameSite: 'none'\n };\n }\n\t\n if (options && options.daysUntilExpire) {\n cookieAttributes.expires = options.daysUntilExpire;\n } else {\n cookieAttributes.expires = 1;\n }\n debug(`CookieStorage.set: key: ${key}, value: [${value}]`);\n Cookies.set(PREFIX + key, JSON.stringify(value), cookieAttributes);\n }\n\n remove = (key: string): void => {\n Cookies.remove(PREFIX + key);\n }\n}\n\nclass SessionStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = sessionStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`SessionStorage.set: key: ${key}, value: [${value}]`);\n sessionStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n sessionStorage.removeItem(PREFIX + key);\n }\n}\n\nclass LocalStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = localStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`LocalStorage.set: key: ${key}, value: [${value}]`);\n localStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n localStorage.removeItem(PREFIX + key);\n }\n}\n\nclass MemoryStorage<T> implements IStsStorage<T>\n{\n #store: Record<string, T> = { };\n\n get = (key: string): T | null => {\n const value: T = this.#store[PREFIX + key];\n if (value) {\n return value;\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`MemoryStorage.set: key: ${key}, value: [${value}]`);\n this.#store[PREFIX + key] = value;\n }\n \n remove = (key: string): void => {\n delete this.#store[PREFIX + key];\n }\n}\n\nexport interface IClientStorageOptions {\n\tclientStorageType: ClientStorageType\n\tusePrefix: boolean\n\tstorageOptions?: JSONObject\n}\n\nexport class ClientStorageFactory<T>\n{\n #storage: IStsStorage<T>;\n\n constructor(options: IClientStorageOptions) {\n if (options.usePrefix === false) {\n PREFIX = '';\n }\n switch (options.clientStorageType) {\n case ClientStorageType.SESSION_STORAGE :\n this.#storage = new SessionStorage<T>();\n break;\n case ClientStorageType.LOCAL_STORAGE :\n this.#storage = new LocalStorage<T>();\n break;\n case ClientStorageType.COOKIE_STORAGE :\n this.#storage = new CookieStorage<T>();\n break;\n case ClientStorageType.MEMORY_STORAGE :\n this.#storage = new MemoryStorage<T>();\n break;\n default:\n throw new Error(`Unknown [${options.clientStorageType}] storage type.`);\n }\n return;\n }\n\n GetStorage(): IStsStorage<T>\n {\n return this.#storage;\n }\n}\n","import { inject } from \"vue\";\n\n// Declare STS plugin keys (for provide)\n// https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\nimport { STSStoragePluginKey } from './stsPluginKeys';\n\nimport { ClientStorageType, ClientStorageFactory, type IStsStorage } from './stsStorage'\n\nexport interface ISTSStoragePluginOptions {\n\tclientStorageType: ClientStorageType\n}\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 useSTSStoragePlugin = <T>(): IStsStorage<T> => inject(STSStoragePluginKey) as IStsStorage<T>\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSStoragePlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: <T>(app: any, options: ISTSStoragePluginOptions) => {\n const cs = new ClientStorageFactory<T>({clientStorageType: options.clientStorageType, usePrefix: true});\n\n const pluginInstance = cs.GetStorage();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n // This allows access to the $sts property within templates.\n // Also, outside of script setup or setup(), this.$sts can be used.\n // If access is required within script setup, use the useSTSStoragePlugin composable function. Example;\n // import { useSTSStoragePlugin } from './storage';\n // const STSStorageString = useSTSStoragePlugin<string>();\n //\n // Note: An alternate to get access to this global is to use the hidden API call such as;\n // const app: ComponentInternalInstance | null = getCurrentInstance();\n // Assign the $sts plugin helper (legacy method - see below (injects) for updated usage)\n // let $sts: any\n // if (app) $sts = app.appContext.config.globalProperties.$sts;\n\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSStoragePluginKey] = pluginInstance;\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(STSStoragePluginKey, pluginInstance);\n }\n}\n","import { defineStore } from 'pinia'\n\nimport type { IWorker, IWorkerEx, IRunnerEx, IRunner, ITelemetryStore } from './../plugins/stsTestWorkerDefinitions'\n\n// https://pinia.vuejs.org/\n// https://seb-l.github.io/pinia-plugin-persist/\nexport const TelemetryStore = defineStore('__sts__TelemetryStore', {\n // State\n // https://pinia.vuejs.org/core-concepts/state.html\n state: (): ITelemetryStore => {\n return {\n workers: { }\n }\n },\n\n // Getters\n // https://pinia.vuejs.org/core-concepts/getters.html\n\n // Actions\n // https://pinia.vuejs.org/core-concepts/actions.html\n actions: {\n RemoveWorker(workerEx: IWorkerEx) {\n delete this.workers[workerEx.id];\n },\n\n RemoveRunner(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n const worker: IWorker = this.workers[workerEx.id];\n if (worker && worker.runners) {\n delete worker.runners[runnerEx.id];\n }\n },\n\n Update(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n if (!this.workers[workerEx.id]) {\n // Create a new telemetry record\n this.workers[workerEx.id] = {\n id: workerEx.id,\n state: workerEx.state,\n primaryThreadWorkerOptions: { ...workerEx.primaryThreadWorkerOptions },\n workerThreadWorkerOptions: { ...workerEx.workerThreadWorkerOptions },\n runners: { }\n } as IWorker\n }\n const worker: IWorker = this.workers[workerEx.id];\n // Now check for the async runner\n if (worker.runners) {\n if (!worker.runners[runnerEx.id]) {\n // Create a new asyncRunnerInstance telemetry record\n const runner: IRunner = {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData },\n }\n worker.runners[runner.id] = runner;\n } else {\n const runner: IRunner = worker.runners[runnerEx.id];\n runner.instrumentData = { ...runnerEx.instrumentData }\n }\n }\n }\n }\n});\n","import type { IPublishMessagePayloadContentBase, IAsyncRunnerContext, \n PublishInstrumentControllerV2, IPublishMessagePayload } from '@nsshunt/stspublisherserver'\n\nexport interface ISTSAgentWorkerMessagePort extends IPublishMessagePayloadContentBase {\n port: MessagePort\n options: IWorkerOptions\n}\n\nexport enum IRunnerState {\n\tcreated = 'created',\n\trunning = 'running',\n\tstopped = 'stopped',\n\tpaused = 'paused',\n\terror = 'error',\n}\n\nexport interface IRunnerTelemetry {\n\trequestCount: number // requestCount\n\terrorCount: number\n\tretryCount: number\n\tauthenticationCount: number\n\tvelocity: number\n\tcoreCount: number\n\ttimer: number\n\tduration: number\n\tlatency: number\n\tactiveRequestCount: number\n\tmessage: string[]\n}\n\nexport interface IRunner {\n\tid: number\n\tasyncRunnerContext: IAsyncRunnerContext\n\toptions: IRunnerOptions\n\tstate: IRunnerState\n\tinstrumentData: IRunnerTelemetry\n}\n\nexport interface IRunnerEx extends IRunner {\n publishInstrumentController: PublishInstrumentControllerV2\n Stop: () => Promise<boolean>\n}\n\nexport enum IWorkerState {\n\tstarting = 'starting',\n\tstarted = 'started',\n\tstopped = 'stopped'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerOptions {\n hostName: string\n agentId: string\n userAgent: string\n}\n\nexport type Runners = Record<string, IRunner>\n\nexport interface IWorker {\n\tid: number\n\tstate: IWorkerState\n primaryThreadWorkerOptions: IWorkerOptions\n\tworkerThreadWorkerOptions: IWorkerOptions\n\trunners?: Runners // Will be created by utility helper\n}\n\nexport type Workers = Record<string, IWorker>\n\nexport interface IPrimaryWorker {\n ProcessMessageFromWorker(workerPort: MessagePort, publishMessagePayload: IPublishMessagePayload): Promise<void>\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IRunnerOptions {\n\n}\n\nexport interface IWorkerEx extends IWorker {\n\tworker: Worker\n primaryWorker: IPrimaryWorker\n\trunnersEx: Record<string, IRunnerEx>\n\tAddRunner: (runnerOptions: IRunnerOptions) => IRunnerEx\n\tStopRunner: (runner: IRunnerEx) => Promise<boolean>\n\tStop: () => Promise<boolean>\n}\n\nexport interface ISTSTestWorkerOptions {\n messageMod: number\n iterations: number\n}\n\nexport interface ITelemetryStore {\n\tworkers: Workers\n}\n\nexport interface ITestRunnerTelemetryPayload extends IPublishMessagePayloadContentBase {\n\trunner: IRunner\n}\n\nexport interface IWorkerFactory {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createPrimaryThreadWorker: (app: any, options: IWorkerOptions) => IPrimaryWorker\n\tcreateWorkerThreadWorker: () => Worker // | wt.Worker\n get workerThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n get primaryThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n}\n\nexport interface IWorkerManagerOptions {\n workerFactory: IWorkerFactory\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerManager`);\n\n//import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers\nimport { type IAsyncRunnerContext, IPublishMessagePayload, IPublishMessagePayloadContentBase, \n type PublishMessageCommand, PublishMessageCommands, type AgentPublishInstrumentController } from '@nsshunt/stspublisherserver' \n \nimport { Gauge, InstrumentGaugeTelemetry } from '@nsshunt/stsinstrumentation'\n\nimport { ModelDelimeter } from '@nsshunt/stsmodels'\n\nimport { TelemetryStore } from './../stores/TelemetryStore'\n//import { ApplicationStore } from './../stores/applicationStore'\n\nimport type { ISTSAgentWorkerMessagePort, IWorkerEx, IRunner, IRunnerEx,\n ITestRunnerTelemetryPayload, IRunnerOptions, IRunnerTelemetry,\n IWorkerManagerOptions, IWorkerFactory } from './stsTestWorkerDefinitions'\n\nimport { IWorkerState, IRunnerState } from './stsTestWorkerDefinitions'\nimport { Sleep } from '@nsshunt/stsutils';\nimport { inject } from 'vue';\n\nimport { STSInstrumentControllerPluginKey, GetSTSInstrumentControllerPluginKey, GetSTSInstrumentController } from '@nsshunt/stspublisherserver'\nimport { STSWorkerManagerPluginKey } from './stsPluginKeys';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport colors from 'colors'\n\nexport class STSWorkerManager {\n //#agentSession: string = null;\n #workersEx: Record<string, IWorkerEx> = { };\n #runner = 0;\n #workerId = 0;\n #options: IWorkerManagerOptions;\n #STSInstrumentController: AgentPublishInstrumentController\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #app: any\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(app: any, options?: IWorkerManagerOptions) {\n this.#app = app;\n if (options) {\n this.#options = options;\n } else {\n this.#options = { } as IWorkerManagerOptions;\n }\n\n debug(`CompareSTSInstrumentControllerPluginKeyWMEx(): [${CompareSTSInstrumentControllerPluginKeyWMEx()}]`);\n\n debug(`Attempting to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n //this.#STSInstrumentController = app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n //this.#STSInstrumentController = app.config.globalProperties.$sts[GetSTSInstrumentControllerPluginKey()]\n this.#STSInstrumentController = GetSTSInstrumentController(app);\n //this.#STSInstrumentController = app.config.globalProperties.$sts.aic;\n\n debug(this.#STSInstrumentController);\n debug('keys within app.config.globalProperties.$sts');\n for (const [key, ] of Object.entries(app.config.globalProperties.$sts)) {\n debug(`${key}`);\n }\n\n if (!this.#STSInstrumentController) {\n debug(`Failed to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n }\n }\n \n get WorkersEx(): Record<string, IWorkerEx>\n {\n return this.#workersEx;\n }\n\n AddWorker = async (useWorkerFactory?: IWorkerFactory): Promise<IWorkerEx> => {\n let workerFactory: IWorkerFactory;\n if (useWorkerFactory) {\n // Use the supplied workFactory\n workerFactory = useWorkerFactory;\n } else {\n // Use the default workFactory\n workerFactory = this.#options.workerFactory\n }\n const stsWorkerEx: IWorkerEx = {\n id: this.#workerId++, // uuidv4()\n worker: workerFactory.createWorkerThreadWorker(),\n primaryWorker: workerFactory.createPrimaryThreadWorker(this.#app, workerFactory.primaryThreadWorkerOptions),\n state: IWorkerState.starting,\n workerThreadWorkerOptions: workerFactory.workerThreadWorkerOptions,\n primaryThreadWorkerOptions: workerFactory.primaryThreadWorkerOptions,\n runnersEx: { } as Record<string, IRunnerEx>,\n AddRunner: (runnerOptions: IRunnerOptions): IRunnerEx => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),\n StopRunner: (runner: IRunnerEx): Promise<boolean> => this.#StopRunner(stsWorkerEx, runner),\n Stop: async (): Promise<boolean> => this.#StopWorker(stsWorkerEx)\n }\n this.#STSInstrumentController.LogEx(`Creating new worker: [${stsWorkerEx.id}]`.yellow);\n console.log(`Adding worker: [${stsWorkerEx.id}]`);\n\n stsWorkerEx.worker.onmessage = function(data: MessageEvent) {\n console.log(data.data);\n }\n\n stsWorkerEx.worker.onerror = function(error) {\n console.log(error);\n };\n\n const { \n port1, // process message port\n port2 // collector message port\n } = new MessageChannel();\n\n const workerPort = port1;\n \n console.log(`STSWorkerManager::AddWorker::workerThreadWorkerOptions: [${JSON.stringify(stsWorkerEx.workerThreadWorkerOptions)}]`);\n\n this.#PostMessageToWorker(stsWorkerEx, PublishMessageCommands.MessagePort, {\n port: port2,\n //applicationStoreState: stateCopy,\n options: { ...stsWorkerEx.workerThreadWorkerOptions }\n } as ISTSAgentWorkerMessagePort, port2);\n \n // Process messages received back from the worker\n workerPort.onmessage = async (data: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (publishMessagePayload.command) {\n case PublishMessageCommands.MessagePortResponse : \n stsWorkerEx.state = IWorkerState.started;\n break;\n case PublishMessageCommands.InstrumentTelemetry :\n this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n stsWorkerEx.primaryWorker.ProcessMessageFromWorker(workerPort, publishMessagePayload);\n }\n }\n\n this.#workersEx[stsWorkerEx.id] = stsWorkerEx;\n\n console.log(`Added worker: [${stsWorkerEx.id}]`);\n\n return stsWorkerEx;\n }\n\n AddRunnerToWorker = (stsWorkerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n const runnerEx: IRunnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);\n stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;\n this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);\n runnerEx.publishInstrumentController.LogEx(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}]`.green)\n return runnerEx;\n }\n\n #CreateRunnerCopy(runnerEx: IRunnerEx): IRunner {\n return {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData }\n } as IRunner\n }\n\n #SetRunnerIntoWorker = (workerEx: IWorkerEx, runnerEx: IRunnerEx): void => {\n // Now that the worker is setup, send the options\n //@@ wait until worker in running state\n const payload: ITestRunnerTelemetryPayload = {\n runner: this.#CreateRunnerCopy(runnerEx)\n }\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Add, payload);\n }\n\n #ProcessTelemetry = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n const store = TelemetryStore();\n\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n let update = false;\n\n // Copy telemetry\n runnerEx.instrumentData = { ...runner.instrumentData };\n\n if (runner.instrumentData.message) {\n runnerEx.instrumentData.message = [...runner.instrumentData.message];\n } else {\n runnerEx.instrumentData.message = [ ];\n }\n\n if (runner.instrumentData.message) {\n runner.instrumentData.message.forEach((message) => {\n runnerEx.publishInstrumentController.LogEx(message);\n });\n update = true;\n }\n\n if (runner.instrumentData.requestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.REQUEST_COUNT_GAUGE, {\n val: runnerEx.instrumentData.requestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.errorCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ERROR_COUNT_GAUGE, {\n val: runnerEx.instrumentData.errorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.retryCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.RETRY_COUNT_GAUGE, {\n val: runnerEx.instrumentData.retryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.authenticationCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_COUNT_GAUGE, {\n val: runnerEx.instrumentData.authenticationCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.coreCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CORE_COUNT_GAUGE, {\n val: runnerEx.instrumentData.coreCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.timer) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.TIMER_GAUGE, {\n val: runnerEx.instrumentData.timer\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.activeRequestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ACTIVE_REQUEST_GAUGE, {\n val: runnerEx.instrumentData.activeRequestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.velocity) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.VELOCITY_GAUGE, {\n Inc: runnerEx.instrumentData.velocity\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.duration) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.latency) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (update) {\n store.Update(workerEx, runnerEx);\n }\n }\n }\n\n #CreateAsyncRunner = (workerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n //const applicationStore = ApplicationStore();\n this.#runner++; // The runner number always increases\n this.#STSInstrumentController.LogEx(`Creating new async runner: [${this.#runner}]`.yellow);\n const asyncRunnerContext: IAsyncRunnerContext = {\n nid: `\\\n${workerEx.workerThreadWorkerOptions.hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}\\\n${ModelDelimeter.NID_SEPERATOR}\\\nworker${workerEx.id}\\\n${ModelDelimeter.SEPERATOR}\\\n${this.#runner}`,\n id: this.#runner.toString(),\n hostName: (workerEx.workerThreadWorkerOptions.hostName ? workerEx.workerThreadWorkerOptions.hostName : 'host'),\n agentName: `${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}`,\n threadId: `worker${workerEx.id}`,\n asyncRunnerId: this.#runner\n }\n const runnerEx: IRunnerEx = {\n id: this.#runner,\n publishInstrumentController: this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext),\n asyncRunnerContext: asyncRunnerContext,\n state: IRunnerState.created,\n options: runnerOptions,\n instrumentData: {\n requestCount: 0,\n errorCount: 0,\n retryCount: 0,\n authenticationCount: 0,\n velocity: 0,\n coreCount: 0,\n timer: 0,\n duration: 0,\n latency: 0,\n activeRequestCount: 0,\n message: [ ]\n } as IRunnerTelemetry,\n Stop: async (): Promise<boolean> => this.#StopRunner(workerEx, runnerEx)\n }\n return runnerEx;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #PostMessageToWorker = (workerEx: IWorkerEx, command: PublishMessageCommand, payload: IPublishMessagePayloadContentBase | null, transferObject?: any) => {\n if (transferObject) {\n console.log(`#PostMessageToWorker with transfer object`);\n workerEx.worker.postMessage({ command, payload }, [transferObject]);\n console.log(`#PostMessageToWorker with transfer object - done...`);\n } else {\n console.log(`#PostMessageToWorker`);\n workerEx.worker.postMessage({ command, payload });\n }\n }\n\n #TerminateWorker = (workerEx: IWorkerEx) => {\n if (workerEx.worker) {\n const store = TelemetryStore();\n\n workerEx.worker.terminate();\n //@@workerEx.worker = null;\n console.log(`Terminated worker: [${workerEx.id}]`);\n store.RemoveWorker(workerEx);\n delete this.#workersEx[workerEx.id];\n } else {\n // Some other runner has already removed the parent worker, do nothing\n // console.log(`WORKER ALREADY NULL`);\n }\n }\n\n #StopRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx | null = null): Promise<boolean> => {\n // If runnerEx not provided, Remove the first runner in the collection\n if (runnerEx === null) {\n const ids: string[] = Object.keys(workerEx.runnersEx);\n if (ids.length > 0) {\n const id = ids[0];\n runnerEx = workerEx.runnersEx[id];\n }\n }\n if (runnerEx !== null) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, {\n runner: this.#CreateRunnerCopy(runnerEx)\n } as ITestRunnerTelemetryPayload);\n\n runnerEx.publishInstrumentController.LogEx(`Terminating runner: [${runnerEx.id}]`);\n \n const promArray: Promise<boolean>[] = [ ];\n\n promArray.push((async (): Promise<boolean> => {\n await Sleep(100);\n return runnerEx.publishInstrumentController.InstrumentTerminate() as Promise<boolean>\n })());\n\n const store = TelemetryStore();\n store.RemoveRunner(workerEx, runnerEx);\n\n delete workerEx.runnersEx[runnerEx.id];\n\n const retVal = await Promise.all(promArray);\n console.log(`Removed instrument workers: [${retVal}]`);\n\n /*\n // If the removed runner was the last runner, remove the worker\n if (Object.keys(workerEx.runnersEx).length === 0) {\n this.#TerminateWorker(workerEx);\n }\n */\n }\n return true;\n }\n\n #StopWorker = async (workerEx: IWorkerEx): Promise<boolean> => {\n try {\n if (workerEx.state !== IWorkerState.stopped) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, null);\n \n //@@ Now wait until we get an ack back from the worker\n // This is because we may be trying to stop BEFORE the worker has had a chance to startup ...\n \n console.log(`Terminating worker: [${workerEx.id}]`);\n const promArray: Promise<boolean>[] = [ ];\n \n // Terminate only those that are currently running...\n const ids: string[] = Object.keys(workerEx.runnersEx);\n\n ids.forEach((id) => {\n const runnerEx: IRunnerEx = workerEx.runnersEx[id];\n promArray.push(this.#StopRunner(workerEx, runnerEx));\n });\n await Promise.all(promArray);\n\n this.#TerminateWorker(workerEx);\n }\n return true;\n } catch (error) {\n console.log(`Error in STSTestWorker:StopWorker: [${error}]`);\n return false;\n }\n }\n\n GetNextAvailableWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let leastRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (leastRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {\n leastRunnerWorker = stsWorker;\n }\n } else {\n leastRunnerWorker = stsWorker;\n }\n }\n return leastRunnerWorker;\n }\n\n GetBusyWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let busyWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (busyWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {\n busyWorker = stsWorker;\n }\n } else {\n busyWorker = stsWorker;\n }\n }\n return busyWorker;\n }\n\n get Options(): IWorkerManagerOptions {\n return this.#options;\n }\n\n set Options(options: IWorkerManagerOptions) {\n this.#options = options;\n }\n\n /*\n StopRunner = async () => {\n // Calculate the worker with the most runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.StopRunner();\n }\n */\n\n /*\n StopWorker = async () => {\n // Calculate the worker with the least runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.Stop();\n }\n */\n\n StopAllWorkers = async () => {\n const promArray = [ ];\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n promArray.push(stsWorker.Stop());\n }\n\n await Promise.all(promArray);\n }\n}\n\nexport const GetSTSInstrumentControllerPluginKeyWM = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWM = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWMEx = (): boolean => STSInstrumentControllerPluginKey === GetSTSInstrumentControllerPluginKey()\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 useSTSWorkerManager = (): STSWorkerManager => inject(STSWorkerManagerPluginKey) as STSWorkerManager\n\nexport const STSWorkerManagerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any, options?: IWorkerManagerOptions) => {\n const wm = new STSWorkerManager(app, options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSWorkerManagerPluginKey] = wm;\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(STSWorkerManagerPluginKey, wm);\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}`);\n\nimport type { IPublishMessagePayload } from '@nsshunt/stspublisherserver';\n\ndeclare interface RequestResponseMessage {\n\tpublishMessagePayload: IPublishMessagePayload\n\tpublishMessagePayloadResponse?: IPublishMessagePayload\n\tcb: () => void,\n\ttimeout: NodeJS.Timeout\n}\n\ndeclare type RequestResponseMessages = Record<string, RequestResponseMessage>;\n\nexport class RequestResponseHelper\n{\n #requestResponseMessages: RequestResponseMessages = { }\n #requestResponseMessageTimeout = 10000; //@@ config\n #port: MessagePort\n\n constructor(port: MessagePort) {\n this.#port = port\n this.#SetupListener();\n }\n\n PostMessage = (message: IPublishMessagePayload): Promise<IPublishMessagePayload> => {\n return new Promise((resolve, reject) => {\n const { messageId } = message.payload;\n if (messageId) {\n if (this.#requestResponseMessages[messageId]) {\n reject(`RequestResponseHelper: Message with id: [${messageId}] already exists within the Request/Response record structure`);\n } else {\n this.#requestResponseMessages[messageId] = {\n publishMessagePayload: { ...message },\n cb: () => {\n const detail = this.#requestResponseMessages[messageId].publishMessagePayloadResponse;\n clearTimeout(this.#requestResponseMessages[messageId].timeout);\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n if (detail) {\n debug(`RequestResponseHelper: Resolving response message with id: [${messageId}] from target worker port. Details: [${JSON.stringify(detail)}]`);\n resolve(detail);\n } else {\n const msg = `Could not get detail from this.#requestResponseMessages[messageId].publishMessagePayloadResponse`;\n debug(msg);\n reject(msg);\n }\n },\n timeout: setTimeout(() => {\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n debug(`RequestResponseHelper: Timeout has occurred after: [${this.#requestResponseMessageTimeout}]ms with message id: [${messageId}]. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n reject('RequestResponseHelper: Did not receive response form parent process.');\n }, this.#requestResponseMessageTimeout) // max message timeout allowed\n }\n debug(`RequestResponseHelper: Sending message with id: [${messageId}] to target worker port. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n this.#port.postMessage(message);\n }\n } else {\n const msg = `RequestResponseHelper: Response did not include a message id`;\n debug(msg);\n reject(msg);\n }\n });\n }\n\n #SetupListener = () => {\n this.#port.onmessage = async (msg: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = msg.data as IPublishMessagePayload;\n if (publishMessagePayload.payload.messageId) {\n const messageId = publishMessagePayload.payload.messageId;\n if (messageId && messageId !== '') {\n if (this.#requestResponseMessages[messageId]) {\n const requestResponseMessage: RequestResponseMessage = this.#requestResponseMessages[messageId];\n requestResponseMessage.publishMessagePayloadResponse = { ...publishMessagePayload };\n requestResponseMessage.cb();\n } else {\n throw new Error(`RequestResponseHelper: Could not find Request/Response message with id: [${messageId}]`);\n }\n }\n }\n }\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerInstance`);\n\nimport { IPublishMessagePayload, PublishMessageCommands, IPublishMessagePayloadContentBase } from '@nsshunt/stspublisherserver' // '@nsshunt/stspublisherserver' //'./plugins/publishers/publisherAgent'\n\nimport type { ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload } from './stsTestWorkerDefinitions'\nimport { IRunnerState } from './stsTestWorkerDefinitions'\n\nimport { RequestResponseHelper } from './requestResponseHelper'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerInstanceOptions {\n\n}\n\nexport abstract class WorkerInstance {\n #collectorCollectorPort: MessagePort | null = null;\n #requestResponseHelper: RequestResponseHelper | null = null;\n #runners: Record<string, IRunner> = { };\n #options: IWorkerInstanceOptions | null = null;\n\n constructor() {\n debug(`WorkerInstance::constructor`)\n }\n\n GetRandomInt = (max: number) => {\n debug(`WorkerInstance::GetRandomInt`)\n return Math.floor(Math.random() * Math.floor(max));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n StartWork = async (runner: IRunner): Promise<void> => {\n debug(`WorkerInstance::StartWork`)\n return;\n }\n\n PostTelemetry = (runner: IRunner) => {\n //debug(`WorkerInstance::PostTelemetry`)\n if (this.#collectorCollectorPort) {\n const message: IPublishMessagePayload = {\n command: PublishMessageCommands.InstrumentTelemetry,\n payload: {\n runner\n } as ITestRunnerTelemetryPayload\n }\n this.#collectorCollectorPort.postMessage(message);\n }\n }\n\n get RequestResponseHelper(): RequestResponseHelper | null {\n return this.#requestResponseHelper;\n }\n\n get CollectorCollectorPort(): MessagePort | null {\n return this.#collectorCollectorPort;\n }\n\n get Options(): IWorkerInstanceOptions | null {\n return this.#options;\n }\n\n #SetMessagePort = (workerMessagePort: ISTSAgentWorkerMessagePort) => {\n debug(`WorkerInstance::SetMessagePort`)\n this.#collectorCollectorPort = workerMessagePort.port as MessagePort;\n this.#collectorCollectorPort.onmessage = function(data: MessageEvent) {\n console.log(`collectorCollectorPort onmessage: ${data.data}`);\n }\n\n this.#requestResponseHelper = new RequestResponseHelper(this.#collectorCollectorPort);\n\n const response: IPublishMessagePayload = {\n command: PublishMessageCommands.MessagePortResponse,\n payload: { } as IPublishMessagePayloadContentBase\n }\n\n this.#collectorCollectorPort.postMessage(response);\n }\n\n StartRunner = async (runner: IRunner) => {\n debug(`WorkerInstance::StartRunner`)\n console.log(`StartTests: [${JSON.stringify(runner)}]`);\n runner.state = IRunnerState.running;\n this.StartWork(runner);\n }\n\n #AddAsyncRunner = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::AddAsyncRunner`)\n const { runner } = testRunnerTelemetryPayload;\n this.#runners[runner.id] = runner;\n this.StartRunner(runner);\n }\n\n #StopRunners = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::StopRunners`)\n if (testRunnerTelemetryPayload === null) {\n for (const [, testRunner] of Object.entries(this.#runners)) {\n testRunner.state = IRunnerState.stopped;\n }\n } else {\n const runner: IRunner = this.#runners[testRunnerTelemetryPayload.runner.id];\n if (runner) {\n runner.state = IRunnerState.stopped;\n }\n }\n }\n\n ProcessMessage = async(data: MessageEvent) => {\n debug(`WorkerInstance::ProcessMessage`)\n try {\n const payloadMessage: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (payloadMessage.command) {\n case PublishMessageCommands.MessagePort :\n this.#SetMessagePort(payloadMessage.payload as ISTSAgentWorkerMessagePort);\n this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;\n debug(`WorkerInstance::ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)\n break;\n case PublishMessageCommands.Add :\n this.#AddAsyncRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case PublishMessageCommands.Stop :\n this.#StopRunners(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n debug(`Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);\n }\n } catch (error) {\n console.log(error);\n }\n }\n}"],"names":["self","tinyEmitterModule","inject","tinyEmitter","te.TinyEmitter","converter","debug","Debug","ClientStorageType","Cookies","defineStore","IRunnerState","IWorkerState","PublishMessageCommands","Gauge","ModelDelimeter","Sleep","STSInstrumentControllerPluginKey","GetSTSInstrumentController","GetSTSInstrumentControllerPluginKey","_options"],"mappings":"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","x_google_ignoreList":[1,3]}
1
+ {"version":3,"file":"stsvueutils.umd.js","sources":["../src/plugins/stsPluginKeys.ts","../node_modules/tiny-emitter/index.js","../src/plugins/emitter.ts","../node_modules/js-cookie/dist/js.cookie.mjs","../src/plugins/stsStorage.ts","../src/plugins/storage.ts","../src/stores/TelemetryStore.ts","../src/plugins/stsTestWorkerDefinitions.ts","../src/plugins/workerManager.ts","../src/plugins/requestResponseHelper.ts","../src/plugins/workerInstance.ts"],"sourcesContent":["// Individual STS plugin keys for provide/inject logic\nexport const STSStoragePluginKey = Symbol('storage')\nexport const STSEmitterPluginKey = Symbol('emitter')\nexport const STSWorkerManagerPluginKey = Symbol('workerManager')\n","function E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n","import { inject } from 'vue'\n\nimport { STSEmitterPluginKey } from './stsPluginKeys';\n\nimport * as te from 'tiny-emitter';\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 useSTSEmitterPlugin = (): te.TinyEmitter => inject(STSEmitterPluginKey) as te.TinyEmitter\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSEmitterPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any) => {\n const tinyEmitter: te.TinyEmitter = new te.TinyEmitter();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSEmitterPluginKey] = tinyEmitter;\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(STSEmitterPluginKey, tinyEmitter);\n }\n}\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","import Debug from 'debug';\nconst debug = Debug(`proc:${process.pid}:storage.ts`);\n\nimport Cookies from 'js-cookie'\nimport type { JSONObject } from \"@nsshunt/stsutils\";\n\nlet PREFIX = '_ststra_';\n\nexport interface IStsStorage<T> {\n\tget(key: string): T | null\n\tset(key: string, value: T, options?: JSONObject): void\n\tremove(key: string): void\n}\n\nexport enum ClientStorageType {\n\tLOCAL_STORAGE = 'LocalStorage', //@@ todo\n\tSESSION_STORAGE = 'SessionStorage',\n\tCOOKIE_STORAGE = 'CookieStorage',\n\tMEMORY_STORAGE = 'MemoryStorage' //@@ todo\n}\n\nclass CookieStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const raw = Cookies.get(PREFIX + key);\n if (raw) {\n return JSON.parse(raw);\n } else {\n return null;\n }\n }\n\n set = (key: string, value: T, options: JSONObject = { }) => {\n let cookieAttributes: Cookies.CookieAttributes = { };\n if ('https:' === window.location.protocol) {\n cookieAttributes = {\n secure: true,\n sameSite: 'none'\n };\n }\n\t\n if (options && options.daysUntilExpire) {\n cookieAttributes.expires = options.daysUntilExpire;\n } else {\n cookieAttributes.expires = 1;\n }\n debug(`CookieStorage.set: key: ${key}, value: [${value}]`);\n Cookies.set(PREFIX + key, JSON.stringify(value), cookieAttributes);\n }\n\n remove = (key: string): void => {\n Cookies.remove(PREFIX + key);\n }\n}\n\nclass SessionStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = sessionStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`SessionStorage.set: key: ${key}, value: [${value}]`);\n sessionStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n sessionStorage.removeItem(PREFIX + key);\n }\n}\n\nclass LocalStorage<T> implements IStsStorage<T>\n{\n get = (key: string): T | null => {\n const value: string | null = localStorage.getItem(PREFIX + key);\n if (value) {\n return JSON.parse(value);\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`LocalStorage.set: key: ${key}, value: [${value}]`);\n localStorage.setItem(PREFIX + key, JSON.stringify(value));\n }\n \n remove = (key: string): void => {\n localStorage.removeItem(PREFIX + key);\n }\n}\n\nclass MemoryStorage<T> implements IStsStorage<T>\n{\n #store: Record<string, T> = { };\n\n get = (key: string): T | null => {\n const value: T = this.#store[PREFIX + key];\n if (value) {\n return value;\n } else {\n return null;\n }\n }\n \n set = (key: string, value: T): void => {\n debug(`MemoryStorage.set: key: ${key}, value: [${value}]`);\n this.#store[PREFIX + key] = value;\n }\n \n remove = (key: string): void => {\n delete this.#store[PREFIX + key];\n }\n}\n\nexport interface IClientStorageOptions {\n\tclientStorageType: ClientStorageType\n\tusePrefix: boolean\n\tstorageOptions?: JSONObject\n}\n\nexport class ClientStorageFactory<T>\n{\n #storage: IStsStorage<T>;\n\n constructor(options: IClientStorageOptions) {\n if (options.usePrefix === false) {\n PREFIX = '';\n }\n switch (options.clientStorageType) {\n case ClientStorageType.SESSION_STORAGE :\n this.#storage = new SessionStorage<T>();\n break;\n case ClientStorageType.LOCAL_STORAGE :\n this.#storage = new LocalStorage<T>();\n break;\n case ClientStorageType.COOKIE_STORAGE :\n this.#storage = new CookieStorage<T>();\n break;\n case ClientStorageType.MEMORY_STORAGE :\n this.#storage = new MemoryStorage<T>();\n break;\n default:\n throw new Error(`Unknown [${options.clientStorageType}] storage type.`);\n }\n return;\n }\n\n GetStorage(): IStsStorage<T>\n {\n return this.#storage;\n }\n}\n","import { inject } from \"vue\";\n\n// Declare STS plugin keys (for provide)\n// https://vuejs.org/guide/components/provide-inject.html#working-with-symbol-keys\nimport { STSStoragePluginKey } from './stsPluginKeys';\n\nimport { ClientStorageType, ClientStorageFactory, type IStsStorage } from './stsStorage'\n\nexport interface ISTSStoragePluginOptions {\n\tclientStorageType: ClientStorageType\n}\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 useSTSStoragePlugin = <T>(): IStsStorage<T> => inject(STSStoragePluginKey) as IStsStorage<T>\n\n// https://learnvue.co/2021/06/building-your-own-vue-3-plugin-a-full-guide/\nexport const STSStoragePlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: <T>(app: any, options: ISTSStoragePluginOptions) => {\n const cs = new ClientStorageFactory<T>({clientStorageType: options.clientStorageType, usePrefix: true});\n\n const pluginInstance = cs.GetStorage();\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n // This allows access to the $sts property within templates.\n // Also, outside of script setup or setup(), this.$sts can be used.\n // If access is required within script setup, use the useSTSStoragePlugin composable function. Example;\n // import { useSTSStoragePlugin } from './storage';\n // const STSStorageString = useSTSStoragePlugin<string>();\n //\n // Note: An alternate to get access to this global is to use the hidden API call such as;\n // const app: ComponentInternalInstance | null = getCurrentInstance();\n // Assign the $sts plugin helper (legacy method - see below (injects) for updated usage)\n // let $sts: any\n // if (app) $sts = app.appContext.config.globalProperties.$sts;\n\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSStoragePluginKey] = pluginInstance;\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(STSStoragePluginKey, pluginInstance);\n }\n}\n","import { defineStore } from 'pinia'\n\nimport type { IWorker, IWorkerEx, IRunnerEx, IRunner, ITelemetryStore } from './../plugins/stsTestWorkerDefinitions'\n\n// https://pinia.vuejs.org/\n// https://seb-l.github.io/pinia-plugin-persist/\nexport const TelemetryStore = defineStore('__sts__TelemetryStore', {\n // State\n // https://pinia.vuejs.org/core-concepts/state.html\n state: (): ITelemetryStore => {\n return {\n workers: { }\n }\n },\n\n // Getters\n // https://pinia.vuejs.org/core-concepts/getters.html\n\n // Actions\n // https://pinia.vuejs.org/core-concepts/actions.html\n actions: {\n RemoveWorker(workerEx: IWorkerEx) {\n delete this.workers[workerEx.id];\n },\n\n RemoveRunner(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n const worker: IWorker = this.workers[workerEx.id];\n if (worker && worker.runners) {\n delete worker.runners[runnerEx.id];\n }\n },\n\n Update(workerEx: IWorkerEx, runnerEx: IRunnerEx) {\n if (!this.workers[workerEx.id]) {\n // Create a new telemetry record\n this.workers[workerEx.id] = {\n id: workerEx.id,\n state: workerEx.state,\n primaryThreadWorkerOptions: { ...workerEx.primaryThreadWorkerOptions },\n workerThreadWorkerOptions: { ...workerEx.workerThreadWorkerOptions },\n runners: { }\n } as IWorker\n }\n const worker: IWorker = this.workers[workerEx.id];\n // Now check for the async runner\n if (worker.runners) {\n if (!worker.runners[runnerEx.id]) {\n // Create a new asyncRunnerInstance telemetry record\n const runner: IRunner = {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData },\n }\n worker.runners[runner.id] = runner;\n } else {\n const runner: IRunner = worker.runners[runnerEx.id];\n runner.instrumentData = { ...runnerEx.instrumentData }\n }\n }\n }\n }\n});\n","import type { IPublishMessagePayloadContentBase, IAsyncRunnerContext, \n PublishInstrumentControllerV2, IPublishMessagePayload } from '@nsshunt/stspublisherserver'\n\nexport interface ISTSAgentWorkerMessagePort extends IPublishMessagePayloadContentBase {\n port: MessagePort\n options: IWorkerOptions\n}\n\nexport enum IRunnerState {\n\tcreated = 'created',\n\trunning = 'running',\n\tstopped = 'stopped',\n\tpaused = 'paused',\n\terror = 'error',\n}\n\nexport interface IRunnerTelemetry {\n\trequestCount: number // requestCount\n\terrorCount: number\n\tretryCount: number\n\tauthenticationCount: number\n\tvelocity: number\n\tcoreCount: number\n\ttimer: number\n\tduration: number\n\tlatency: number\n\tactiveRequestCount: number\n\tmessage: string[]\n\tchildCount: number\n}\n\nexport interface IRunner {\n\tid: number\n\tasyncRunnerContext: IAsyncRunnerContext\n\toptions: IRunnerOptions\n\tstate: IRunnerState\n\tinstrumentData: IRunnerTelemetry\n}\n\nexport interface IRunnerEx extends IRunner {\n publishInstrumentController: PublishInstrumentControllerV2\n Stop: () => Promise<boolean>\n}\n\nexport enum IWorkerState {\n\tstarting = 'starting',\n\tstarted = 'started',\n\tstopped = 'stopped'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerOptions {\n hostName: string\n agentId: string\n userAgent: string\n}\n\nexport type Runners = Record<string, IRunner>\n\nexport interface IWorker {\n\tid: number\n\tstate: IWorkerState\n primaryThreadWorkerOptions: IWorkerOptions\n\tworkerThreadWorkerOptions: IWorkerOptions\n\trunners?: Runners // Will be created by utility helper\n}\n\nexport type Workers = Record<string, IWorker>\n\nexport interface IPrimaryWorker {\n ProcessMessageFromWorker(workerPort: MessagePort, publishMessagePayload: IPublishMessagePayload): Promise<void>\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IRunnerOptions {\n\n}\n\nexport interface IWorkerEx extends IWorker {\n\tworker: Worker\n primaryWorker: IPrimaryWorker\n\trunnersEx: Record<string, IRunnerEx>\n\tAddRunner: (runnerOptions: IRunnerOptions) => IRunnerEx\n\tStopRunner: (runner: IRunnerEx) => Promise<boolean>\n\tStop: () => Promise<boolean>\n}\n\nexport interface ISTSTestWorkerOptions {\n messageMod: number\n iterations: number\n}\n\nexport interface ITelemetryStore {\n\tworkers: Workers\n}\n\nexport interface ITestRunnerTelemetryPayload extends IPublishMessagePayloadContentBase {\n\trunner: IRunner\n}\n\nexport interface IWorkerFactory {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n createPrimaryThreadWorker: (app: any, options: IWorkerOptions) => IPrimaryWorker\n\tcreateWorkerThreadWorker: () => Worker // | wt.Worker\n get workerThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n get primaryThreadWorkerOptions(): IWorkerOptions // These options will be passed as a message to the thread worker once setup\n}\n\nexport interface IWorkerManagerOptions {\n workerFactory: IWorkerFactory\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerManager`);\n\n//import MyWorker from './sts-worker?worker' // https://vitejs.dev/guide/features.html#web-workers\nimport { type IAsyncRunnerContext, IPublishMessagePayload, IPublishMessagePayloadContentBase, \n type PublishMessageCommand, PublishMessageCommands, type AgentPublishInstrumentController } from '@nsshunt/stspublisherserver' \n \nimport { Gauge, InstrumentGaugeTelemetry } from '@nsshunt/stsinstrumentation'\n\nimport { ModelDelimeter } from '@nsshunt/stsutils'\n\nimport { TelemetryStore } from './../stores/TelemetryStore'\n//import { ApplicationStore } from './../stores/applicationStore'\n\nimport type { ISTSAgentWorkerMessagePort, IWorkerEx, IRunner, IRunnerEx,\n ITestRunnerTelemetryPayload, IRunnerOptions, IRunnerTelemetry,\n IWorkerManagerOptions, IWorkerFactory } from './stsTestWorkerDefinitions'\n\nimport { IWorkerState, IRunnerState } from './stsTestWorkerDefinitions'\nimport { Sleep } from '@nsshunt/stsutils';\nimport { inject } from 'vue';\n\nimport { STSInstrumentControllerPluginKey, GetSTSInstrumentControllerPluginKey, GetSTSInstrumentController } from '@nsshunt/stspublisherserver'\nimport { STSWorkerManagerPluginKey } from './stsPluginKeys';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport colors from 'colors'\n\nexport class STSWorkerManager {\n //#agentSession: string = null;\n #workersEx: Record<string, IWorkerEx> = { };\n #runner = 0;\n #workerId = 0;\n #options: IWorkerManagerOptions;\n #STSInstrumentController: AgentPublishInstrumentController\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #app: any\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(app: any, options?: IWorkerManagerOptions) {\n this.#app = app;\n if (options) {\n this.#options = options;\n } else {\n this.#options = { } as IWorkerManagerOptions;\n }\n\n debug(`CompareSTSInstrumentControllerPluginKeyWMEx(): [${CompareSTSInstrumentControllerPluginKeyWMEx()}]`);\n\n debug(`Attempting to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n //this.#STSInstrumentController = app.config.globalProperties.$sts[STSInstrumentControllerPluginKey]\n //this.#STSInstrumentController = app.config.globalProperties.$sts[GetSTSInstrumentControllerPluginKey()]\n this.#STSInstrumentController = GetSTSInstrumentController(app);\n //this.#STSInstrumentController = app.config.globalProperties.$sts.aic;\n\n debug(this.#STSInstrumentController);\n debug('keys within app.config.globalProperties.$sts');\n for (const [key, ] of Object.entries(app.config.globalProperties.$sts)) {\n debug(`${key}`);\n }\n\n if (!this.#STSInstrumentController) {\n debug(`Failed to get STSInstrumentControllerPlugin using symbol: [${String(STSInstrumentControllerPluginKey)}]`);\n }\n }\n \n get WorkersEx(): Record<string, IWorkerEx>\n {\n return this.#workersEx;\n }\n\n AddWorker = async (useWorkerFactory?: IWorkerFactory): Promise<IWorkerEx> => {\n let workerFactory: IWorkerFactory;\n if (useWorkerFactory) {\n // Use the supplied workFactory\n workerFactory = useWorkerFactory;\n } else {\n // Use the default workFactory\n workerFactory = this.#options.workerFactory\n }\n const stsWorkerEx: IWorkerEx = {\n id: this.#workerId++, // uuidv4()\n worker: workerFactory.createWorkerThreadWorker(),\n primaryWorker: workerFactory.createPrimaryThreadWorker(this.#app, workerFactory.primaryThreadWorkerOptions),\n state: IWorkerState.starting,\n workerThreadWorkerOptions: workerFactory.workerThreadWorkerOptions,\n primaryThreadWorkerOptions: workerFactory.primaryThreadWorkerOptions,\n runnersEx: { } as Record<string, IRunnerEx>,\n AddRunner: (runnerOptions: IRunnerOptions): IRunnerEx => this.AddRunnerToWorker(stsWorkerEx, runnerOptions),\n StopRunner: (runner: IRunnerEx): Promise<boolean> => this.#StopRunner(stsWorkerEx, runner),\n Stop: async (): Promise<boolean> => this.#StopWorker(stsWorkerEx)\n }\n this.#STSInstrumentController.LogEx(`Creating new worker: [${stsWorkerEx.id}]`.yellow);\n console.log(`Adding worker: [${stsWorkerEx.id}]`);\n\n stsWorkerEx.worker.onmessage = function(data: MessageEvent) {\n console.log(data.data);\n }\n\n stsWorkerEx.worker.onerror = function(error) {\n console.log(error);\n };\n\n const { \n port1, // process message port\n port2 // collector message port\n } = new MessageChannel();\n\n const workerPort = port1;\n \n console.log(`STSWorkerManager::AddWorker::workerThreadWorkerOptions: [${JSON.stringify(stsWorkerEx.workerThreadWorkerOptions)}]`);\n\n this.#PostMessageToWorker(stsWorkerEx, PublishMessageCommands.MessagePort, {\n port: port2,\n //applicationStoreState: stateCopy,\n options: { ...stsWorkerEx.workerThreadWorkerOptions }\n } as ISTSAgentWorkerMessagePort, port2);\n \n // Process messages received back from the worker\n workerPort.onmessage = async (data: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (publishMessagePayload.command) {\n case PublishMessageCommands.MessagePortResponse : \n stsWorkerEx.state = IWorkerState.started;\n break;\n case PublishMessageCommands.InstrumentTelemetry :\n this.#ProcessTelemetry(stsWorkerEx, publishMessagePayload.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n stsWorkerEx.primaryWorker.ProcessMessageFromWorker(workerPort, publishMessagePayload);\n }\n }\n\n this.#workersEx[stsWorkerEx.id] = stsWorkerEx;\n\n console.log(`Added worker: [${stsWorkerEx.id}]`);\n\n return stsWorkerEx;\n }\n\n AddRunnerToWorker = (stsWorkerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n const runnerEx: IRunnerEx = this.#CreateAsyncRunner(stsWorkerEx, runnerOptions);\n stsWorkerEx.runnersEx[runnerEx.id] = runnerEx;\n this.#SetRunnerIntoWorker(stsWorkerEx, runnerEx);\n runnerEx.publishInstrumentController.LogEx(`Added runner: [${runnerEx.id}] into worker: [${stsWorkerEx.id}]`.green)\n return runnerEx;\n }\n\n #CreateRunnerCopy(runnerEx: IRunnerEx): IRunner {\n return {\n id: runnerEx.id,\n asyncRunnerContext: { ...runnerEx.asyncRunnerContext },\n options: { ...runnerEx.options },\n state: runnerEx.state,\n instrumentData: { ...runnerEx.instrumentData }\n } as IRunner\n }\n\n #SetRunnerIntoWorker = (workerEx: IWorkerEx, runnerEx: IRunnerEx): void => {\n // Now that the worker is setup, send the options\n //@@ wait until worker in running state\n const payload: ITestRunnerTelemetryPayload = {\n runner: this.#CreateRunnerCopy(runnerEx)\n }\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Add, payload);\n }\n\n #ProcessTelemetry = (workerEx: IWorkerEx, payloadContents: ITestRunnerTelemetryPayload): void => {\n const store = TelemetryStore();\n\n const { runner } = payloadContents;\n\n if (workerEx.runnersEx[runner.id]) {\n const runnerEx: IRunnerEx = workerEx.runnersEx[runner.id];\n let update = false;\n\n // Copy telemetry\n runnerEx.instrumentData = { ...runner.instrumentData };\n\n if (runner.instrumentData.message) {\n runnerEx.instrumentData.message = [...runner.instrumentData.message];\n } else {\n runnerEx.instrumentData.message = [ ];\n }\n\n if (runner.instrumentData.message) {\n runner.instrumentData.message.forEach((message) => {\n runnerEx.publishInstrumentController.LogEx(message);\n });\n update = true;\n }\n\n if (runner.instrumentData.requestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.REQUEST_COUNT_GAUGE, {\n val: runnerEx.instrumentData.requestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.errorCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ERROR_COUNT_GAUGE, {\n val: runnerEx.instrumentData.errorCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.retryCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.RETRY_COUNT_GAUGE, {\n val: runnerEx.instrumentData.retryCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.authenticationCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.AUTHENTICATION_COUNT_GAUGE, {\n val: runnerEx.instrumentData.authenticationCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.coreCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CORE_COUNT_GAUGE, {\n val: runnerEx.instrumentData.coreCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.timer) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.TIMER_GAUGE, {\n val: runnerEx.instrumentData.timer\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.activeRequestCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.ACTIVE_REQUEST_GAUGE, {\n val: runnerEx.instrumentData.activeRequestCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.velocity) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.VELOCITY_GAUGE, {\n Inc: runnerEx.instrumentData.velocity\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.duration) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.DURATION_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.duration\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.latency) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.LATENCY_HISTOGRAM_GAUGE, {\n val: runnerEx.instrumentData.latency\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (runner.instrumentData.childCount) {\n runnerEx.publishInstrumentController.UpdateInstrument(Gauge.CHILD_COUNT, {\n val: runnerEx.instrumentData.childCount\n } as InstrumentGaugeTelemetry);\n update = true;\n }\n\n if (update) {\n store.Update(workerEx, runnerEx);\n }\n }\n }\n\n #CreateAsyncRunner = (workerEx: IWorkerEx, runnerOptions: IRunnerOptions): IRunnerEx => {\n //const applicationStore = ApplicationStore();\n this.#runner++; // The runner number always increases\n this.#STSInstrumentController.LogEx(`Creating new async runner: [${this.#runner}]`.yellow);\n const asyncRunnerContext: IAsyncRunnerContext = {\n nid: `\\\n${workerEx.workerThreadWorkerOptions.hostName}${ModelDelimeter.COMPONENT_SEPERATOR}${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}\\\n${ModelDelimeter.NID_SEPERATOR}\\\nworker${workerEx.id}\\\n${ModelDelimeter.SEPERATOR}\\\n${this.#runner}`,\n id: this.#runner.toString(),\n hostName: (workerEx.workerThreadWorkerOptions.hostName ? workerEx.workerThreadWorkerOptions.hostName : 'host'),\n agentName: `${workerEx.workerThreadWorkerOptions.agentId}-${workerEx.workerThreadWorkerOptions.userAgent}`,\n threadId: `worker${workerEx.id}`,\n asyncRunnerId: this.#runner\n }\n const runnerEx: IRunnerEx = {\n id: this.#runner,\n publishInstrumentController: this.#STSInstrumentController.AddPublishInstrumentController(asyncRunnerContext),\n asyncRunnerContext: asyncRunnerContext,\n state: IRunnerState.created,\n options: runnerOptions,\n instrumentData: {\n requestCount: 0,\n errorCount: 0,\n retryCount: 0,\n authenticationCount: 0,\n velocity: 0,\n coreCount: 0,\n timer: 0,\n duration: 0,\n latency: 0,\n activeRequestCount: 0,\n message: [ ],\n childCount: 0\n } as IRunnerTelemetry,\n Stop: async (): Promise<boolean> => this.#StopRunner(workerEx, runnerEx)\n }\n return runnerEx;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n #PostMessageToWorker = (workerEx: IWorkerEx, command: PublishMessageCommand, payload: IPublishMessagePayloadContentBase | null, transferObject?: any) => {\n if (transferObject) {\n console.log(`#PostMessageToWorker with transfer object`);\n workerEx.worker.postMessage({ command, payload }, [transferObject]);\n console.log(`#PostMessageToWorker with transfer object - done...`);\n } else {\n console.log(`#PostMessageToWorker`);\n workerEx.worker.postMessage({ command, payload });\n }\n }\n\n #TerminateWorker = (workerEx: IWorkerEx) => {\n if (workerEx.worker) {\n const store = TelemetryStore();\n\n workerEx.worker.terminate();\n //@@workerEx.worker = null;\n console.log(`Terminated worker: [${workerEx.id}]`);\n store.RemoveWorker(workerEx);\n delete this.#workersEx[workerEx.id];\n } else {\n // Some other runner has already removed the parent worker, do nothing\n // console.log(`WORKER ALREADY NULL`);\n }\n }\n\n #StopRunner = async (workerEx: IWorkerEx, runnerEx: IRunnerEx | null = null): Promise<boolean> => {\n // If runnerEx not provided, Remove the first runner in the collection\n if (runnerEx === null) {\n const ids: string[] = Object.keys(workerEx.runnersEx);\n if (ids.length > 0) {\n const id = ids[0];\n runnerEx = workerEx.runnersEx[id];\n }\n }\n if (runnerEx !== null) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, {\n runner: this.#CreateRunnerCopy(runnerEx)\n } as ITestRunnerTelemetryPayload);\n\n runnerEx.publishInstrumentController.LogEx(`Terminating runner: [${runnerEx.id}]`);\n \n const promArray: Promise<boolean>[] = [ ];\n\n promArray.push((async (): Promise<boolean> => {\n await Sleep(100);\n return runnerEx.publishInstrumentController.InstrumentTerminate() as Promise<boolean>\n })());\n\n const store = TelemetryStore();\n store.RemoveRunner(workerEx, runnerEx);\n\n delete workerEx.runnersEx[runnerEx.id];\n\n const retVal = await Promise.all(promArray);\n console.log(`Removed instrument workers: [${retVal}]`);\n\n /*\n // If the removed runner was the last runner, remove the worker\n if (Object.keys(workerEx.runnersEx).length === 0) {\n this.#TerminateWorker(workerEx);\n }\n */\n }\n return true;\n }\n\n #StopWorker = async (workerEx: IWorkerEx): Promise<boolean> => {\n try {\n if (workerEx.state !== IWorkerState.stopped) {\n this.#PostMessageToWorker(workerEx, PublishMessageCommands.Stop, null);\n \n //@@ Now wait until we get an ack back from the worker\n // This is because we may be trying to stop BEFORE the worker has had a chance to startup ...\n \n console.log(`Terminating worker: [${workerEx.id}]`);\n const promArray: Promise<boolean>[] = [ ];\n \n // Terminate only those that are currently running...\n const ids: string[] = Object.keys(workerEx.runnersEx);\n\n ids.forEach((id) => {\n const runnerEx: IRunnerEx = workerEx.runnersEx[id];\n promArray.push(this.#StopRunner(workerEx, runnerEx));\n });\n await Promise.all(promArray);\n\n this.#TerminateWorker(workerEx);\n }\n return true;\n } catch (error) {\n console.log(`Error in STSTestWorker:StopWorker: [${error}]`);\n return false;\n }\n }\n\n GetNextAvailableWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let leastRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (leastRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(leastRunnerWorker.runnersEx).length) {\n leastRunnerWorker = stsWorker;\n }\n } else {\n leastRunnerWorker = stsWorker;\n }\n }\n return leastRunnerWorker;\n }\n\n GetBusyWorker = (): IWorkerEx | null => {\n // Calculate the worker with the least runners\n let busyWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (busyWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(busyWorker.runnersEx).length) {\n busyWorker = stsWorker;\n }\n } else {\n busyWorker = stsWorker;\n }\n }\n return busyWorker;\n }\n\n get Options(): IWorkerManagerOptions {\n return this.#options;\n }\n\n set Options(options: IWorkerManagerOptions) {\n this.#options = options;\n }\n\n /*\n StopRunner = async () => {\n // Calculate the worker with the most runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length > Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.StopRunner();\n }\n */\n\n /*\n StopWorker = async () => {\n // Calculate the worker with the least runners\n let largestRunnerWorker: IWorkerEx | null = null;\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n if (largestRunnerWorker) {\n if (Object.keys(stsWorker.runnersEx).length < Object.keys(largestRunnerWorker.runnersEx).length) {\n largestRunnerWorker = stsWorker;\n }\n } else {\n largestRunnerWorker = stsWorker;\n }\n }\n if (largestRunnerWorker) largestRunnerWorker.Stop();\n }\n */\n\n StopAllWorkers = async () => {\n const promArray = [ ];\n for (const [, stsWorker] of Object.entries(this.WorkersEx)) {\n promArray.push(stsWorker.Stop());\n }\n\n await Promise.all(promArray);\n }\n}\n\nexport const GetSTSInstrumentControllerPluginKeyWM = (): symbol => STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWM = (val: symbol): boolean => val === STSInstrumentControllerPluginKey\n\nexport const CompareSTSInstrumentControllerPluginKeyWMEx = (): boolean => STSInstrumentControllerPluginKey === GetSTSInstrumentControllerPluginKey()\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 useSTSWorkerManager = (): STSWorkerManager => inject(STSWorkerManagerPluginKey) as STSWorkerManager\n\nexport const STSWorkerManagerPlugin = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n install: (app: any, options?: IWorkerManagerOptions) => {\n const wm = new STSWorkerManager(app, options);\n\n // Assign plugin instance to global $sts object (legacy method - see below)\n if (!app.config.globalProperties.$sts) {\n app.config.globalProperties.$sts = { };\n }\n app.config.globalProperties.$sts[STSWorkerManagerPluginKey] = wm;\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(STSWorkerManagerPluginKey, wm);\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}`);\n\nimport type { IPublishMessagePayload } from '@nsshunt/stspublisherserver';\n\ndeclare interface RequestResponseMessage {\n\tpublishMessagePayload: IPublishMessagePayload\n\tpublishMessagePayloadResponse?: IPublishMessagePayload\n\tcb: () => void,\n\ttimeout: NodeJS.Timeout\n}\n\ndeclare type RequestResponseMessages = Record<string, RequestResponseMessage>;\n\nexport class RequestResponseHelper\n{\n #requestResponseMessages: RequestResponseMessages = { }\n #requestResponseMessageTimeout = 10000; //@@ config\n #port: MessagePort\n\n constructor(port: MessagePort) {\n this.#port = port\n this.#SetupListener();\n }\n\n PostMessage = (message: IPublishMessagePayload): Promise<IPublishMessagePayload> => {\n return new Promise((resolve, reject) => {\n const { messageId } = message.payload;\n if (messageId) {\n if (this.#requestResponseMessages[messageId]) {\n reject(`RequestResponseHelper: Message with id: [${messageId}] already exists within the Request/Response record structure`);\n } else {\n this.#requestResponseMessages[messageId] = {\n publishMessagePayload: { ...message },\n cb: () => {\n const detail = this.#requestResponseMessages[messageId].publishMessagePayloadResponse;\n clearTimeout(this.#requestResponseMessages[messageId].timeout);\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n if (detail) {\n debug(`RequestResponseHelper: Resolving response message with id: [${messageId}] from target worker port. Details: [${JSON.stringify(detail)}]`);\n resolve(detail);\n } else {\n const msg = `Could not get detail from this.#requestResponseMessages[messageId].publishMessagePayloadResponse`;\n debug(msg);\n reject(msg);\n }\n },\n timeout: setTimeout(() => {\n setTimeout(() => {\n delete this.#requestResponseMessages[messageId];\n }, 0);\n debug(`RequestResponseHelper: Timeout has occurred after: [${this.#requestResponseMessageTimeout}]ms with message id: [${messageId}]. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n reject('RequestResponseHelper: Did not receive response form parent process.');\n }, this.#requestResponseMessageTimeout) // max message timeout allowed\n }\n debug(`RequestResponseHelper: Sending message with id: [${messageId}] to target worker port. Details: [${JSON.stringify(this.#requestResponseMessages[messageId].publishMessagePayload)}]`);\n this.#port.postMessage(message);\n }\n } else {\n const msg = `RequestResponseHelper: Response did not include a message id`;\n debug(msg);\n reject(msg);\n }\n });\n }\n\n #SetupListener = () => {\n this.#port.onmessage = async (msg: MessageEvent) => {\n const publishMessagePayload: IPublishMessagePayload = msg.data as IPublishMessagePayload;\n if (publishMessagePayload.payload.messageId) {\n const messageId = publishMessagePayload.payload.messageId;\n if (messageId && messageId !== '') {\n if (this.#requestResponseMessages[messageId]) {\n const requestResponseMessage: RequestResponseMessage = this.#requestResponseMessages[messageId];\n requestResponseMessage.publishMessagePayloadResponse = { ...publishMessagePayload };\n requestResponseMessage.cb();\n } else {\n throw new Error(`RequestResponseHelper: Could not find Request/Response message with id: [${messageId}]`);\n }\n }\n }\n }\n }\n}\n","import debugModule from 'debug'\nconst debug = debugModule(`proc:${process.pid}:workerInstance`);\n\nimport { IPublishMessagePayload, PublishMessageCommands, IPublishMessagePayloadContentBase } from '@nsshunt/stspublisherserver' // '@nsshunt/stspublisherserver' //'./plugins/publishers/publisherAgent'\n\nimport type { ISTSAgentWorkerMessagePort, IRunner, ITestRunnerTelemetryPayload } from './stsTestWorkerDefinitions'\nimport { IRunnerState } from './stsTestWorkerDefinitions'\n\nimport { RequestResponseHelper } from './requestResponseHelper'\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IWorkerInstanceOptions {\n\n}\n\nexport abstract class WorkerInstance {\n #collectorCollectorPort: MessagePort | null = null;\n #requestResponseHelper: RequestResponseHelper | null = null;\n #runners: Record<string, IRunner> = { };\n #options: IWorkerInstanceOptions | null = null;\n\n constructor() {\n debug(`WorkerInstance::constructor`)\n }\n\n GetRandomInt = (max: number) => {\n debug(`WorkerInstance::GetRandomInt`)\n return Math.floor(Math.random() * Math.floor(max));\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n StartWork = async (runner: IRunner): Promise<void> => {\n debug(`WorkerInstance::StartWork`)\n return;\n }\n\n PostTelemetry = (runner: IRunner) => {\n //debug(`WorkerInstance::PostTelemetry`)\n if (this.#collectorCollectorPort) {\n const message: IPublishMessagePayload = {\n command: PublishMessageCommands.InstrumentTelemetry,\n payload: {\n runner\n } as ITestRunnerTelemetryPayload\n }\n this.#collectorCollectorPort.postMessage(message);\n }\n }\n\n get RequestResponseHelper(): RequestResponseHelper | null {\n return this.#requestResponseHelper;\n }\n\n get CollectorCollectorPort(): MessagePort | null {\n return this.#collectorCollectorPort;\n }\n\n get Options(): IWorkerInstanceOptions | null {\n return this.#options;\n }\n\n #SetMessagePort = (workerMessagePort: ISTSAgentWorkerMessagePort) => {\n debug(`WorkerInstance::SetMessagePort`)\n this.#collectorCollectorPort = workerMessagePort.port as MessagePort;\n this.#collectorCollectorPort.onmessage = function(data: MessageEvent) {\n console.log(`collectorCollectorPort onmessage: ${data.data}`);\n }\n\n this.#requestResponseHelper = new RequestResponseHelper(this.#collectorCollectorPort);\n\n const response: IPublishMessagePayload = {\n command: PublishMessageCommands.MessagePortResponse,\n payload: { } as IPublishMessagePayloadContentBase\n }\n\n this.#collectorCollectorPort.postMessage(response);\n }\n\n StartRunner = async (runner: IRunner) => {\n debug(`WorkerInstance::StartRunner`)\n console.log(`StartTests: [${JSON.stringify(runner)}]`);\n runner.state = IRunnerState.running;\n this.StartWork(runner);\n }\n\n #AddAsyncRunner = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::AddAsyncRunner`)\n const { runner } = testRunnerTelemetryPayload;\n this.#runners[runner.id] = runner;\n this.StartRunner(runner);\n }\n\n #StopRunners = (testRunnerTelemetryPayload: ITestRunnerTelemetryPayload) => {\n debug(`WorkerInstance::StopRunners`)\n if (testRunnerTelemetryPayload === null) {\n for (const [, testRunner] of Object.entries(this.#runners)) {\n testRunner.state = IRunnerState.stopped;\n }\n } else {\n const runner: IRunner = this.#runners[testRunnerTelemetryPayload.runner.id];\n if (runner) {\n runner.state = IRunnerState.stopped;\n }\n }\n }\n\n ProcessMessage = async(data: MessageEvent) => {\n debug(`WorkerInstance::ProcessMessage`)\n try {\n const payloadMessage: IPublishMessagePayload = data.data as IPublishMessagePayload;\n switch (payloadMessage.command) {\n case PublishMessageCommands.MessagePort :\n this.#SetMessagePort(payloadMessage.payload as ISTSAgentWorkerMessagePort);\n this.#options = (payloadMessage.payload as ISTSAgentWorkerMessagePort).options;\n debug(`WorkerInstance::ProcessMessage::#options: [${JSON.stringify(this.#options)}]`)\n break;\n case PublishMessageCommands.Add :\n this.#AddAsyncRunner(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n case PublishMessageCommands.Stop :\n this.#StopRunners(payloadMessage.payload as ITestRunnerTelemetryPayload);\n break;\n default :\n debug(`Invalid payloadMessage.command: [${payloadMessage.command}] - Ignoring`);\n }\n } catch (error) {\n console.log(error);\n }\n }\n}"],"names":["self","tinyEmitterModule","inject","tinyEmitter","te.TinyEmitter","converter","debug","Debug","ClientStorageType","Cookies","defineStore","IRunnerState","IWorkerState","PublishMessageCommands","Gauge","ModelDelimeter","Sleep","STSInstrumentControllerPluginKey","GetSTSInstrumentController","GetSTSInstrumentControllerPluginKey","_options"],"mappings":"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","x_google_ignoreList":[1,3]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsshunt/stsvueutils",
3
- "version": "1.0.46",
3
+ "version": "1.0.48",
4
4
  "description": "Vue 3 framework utilities and plugins",
5
5
  "main": "./dist/stsvueutils.umd.js",
6
6
  "module": "./dist/stsvueutils.mjs",
@@ -37,31 +37,30 @@
37
37
  },
38
38
  "homepage": "https://github.com/nsshunt/stsvueutils#readme",
39
39
  "devDependencies": {
40
- "@babel/preset-env": "^7.22.20",
41
- "@babel/preset-typescript": "^7.23.0",
40
+ "@babel/preset-env": "^7.23.2",
41
+ "@babel/preset-typescript": "^7.23.2",
42
42
  "@tsconfig/node20": "^20.1.2",
43
- "@types/debug": "^4.1.9",
44
- "@types/jest": "^29.5.5",
45
- "@types/js-cookie": "^3.0.4",
46
- "@typescript-eslint/eslint-plugin": "^6.7.3",
47
- "@typescript-eslint/parser": "^6.7.3",
48
- "eslint": "^8.50.0",
43
+ "@types/debug": "^4.1.10",
44
+ "@types/jest": "^29.5.6",
45
+ "@types/js-cookie": "^3.0.5",
46
+ "@typescript-eslint/eslint-plugin": "^6.9.0",
47
+ "@typescript-eslint/parser": "^6.9.0",
48
+ "eslint": "^8.52.0",
49
49
  "jest": "^29.7.0",
50
50
  "rollup-plugin-visualizer": "^5.9.2",
51
51
  "supertest": "^6.3.3",
52
- "ts-loader": "^9.4.4",
52
+ "ts-loader": "^9.5.0",
53
53
  "typescript": "^5.2.2",
54
- "vite": "^4.4.9",
55
- "vue": "^3.3.4"
54
+ "vite": "^4.5.0",
55
+ "vue": "^3.3.6"
56
56
  },
57
57
  "dependencies": {
58
- "@nsshunt/stsinstrumentation": "^7.0.2",
59
- "@nsshunt/stsmodels": "^1.12.91",
60
- "@nsshunt/stspublisherserver": "^2.0.17",
61
- "@nsshunt/stsutils": "^1.16.11",
58
+ "@nsshunt/stsinstrumentation": "^7.0.3",
59
+ "@nsshunt/stspublisherserver": "^2.0.18",
60
+ "@nsshunt/stsutils": "^1.16.12",
62
61
  "debug": "^4.3.4",
63
62
  "js-cookie": "^3.0.5",
64
- "pinia": "^2.1.6",
63
+ "pinia": "^2.1.7",
65
64
  "tiny-emitter": "^2.1.0"
66
65
  }
67
66
  }
@@ -22,6 +22,7 @@ export interface IRunnerTelemetry {
22
22
  latency: number;
23
23
  activeRequestCount: number;
24
24
  message: string[];
25
+ childCount: number;
25
26
  }
26
27
  export interface IRunner {
27
28
  id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"stsTestWorkerDefinitions.d.ts","sourceRoot":"","sources":["../../src/plugins/stsTestWorkerDefinitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stsTestWorkerDefinitions.d.ts","sourceRoot":"","sources":["../../src/plugins/stsTestWorkerDefinitions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workerManager.d.ts","sourceRoot":"","sources":["../../src/plugins/workerManager.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAA8B,SAAS,EAAW,SAAS,EACtC,cAAc,EAC3C,qBAAqB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAY7E,qBAAa,gBAAgB;;gBAWb,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,qBAAqB;IA2BrD,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAGzC;IAED,SAAS,sBAA6B,cAAc,KAAG,QAAQ,SAAS,CAAC,CAmExE;IAED,iBAAiB,gBAAiB,SAAS,iBAAiB,cAAc,KAAG,SAAS,CAMrF;IA0QD,sBAAsB,QAAO,SAAS,GAAG,IAAI,CAa5C;IAED,aAAa,QAAO,SAAS,GAAG,IAAI,CAanC;IAED,IAAI,OAAO,IAAI,qBAAqB,CAEnC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAEzC;IAoCD,cAAc,sBAOb;CACJ;AAED,eAAO,MAAM,qCAAqC,QAAO,MAA0C,CAAA;AAEnG,eAAO,MAAM,yCAAyC,QAAS,MAAM,KAAG,OAAmD,CAAA;AAE3H,eAAO,MAAM,2CAA2C,QAAO,OAAqF,CAAA;AAIpJ,eAAO,MAAM,mBAAmB,QAAO,gBAAyE,CAAA;AAEhH,eAAO,MAAM,sBAAsB;mBAEhB,GAAG,YAAY,qBAAqB;CAatD,CAAA"}
1
+ {"version":3,"file":"workerManager.d.ts","sourceRoot":"","sources":["../../src/plugins/workerManager.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAA8B,SAAS,EAAW,SAAS,EACtC,cAAc,EAC3C,qBAAqB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAY7E,qBAAa,gBAAgB;;gBAWb,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,qBAAqB;IA2BrD,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAGzC;IAED,SAAS,sBAA6B,cAAc,KAAG,QAAQ,SAAS,CAAC,CAmExE;IAED,iBAAiB,gBAAiB,SAAS,iBAAiB,cAAc,KAAG,SAAS,CAMrF;IAkRD,sBAAsB,QAAO,SAAS,GAAG,IAAI,CAa5C;IAED,aAAa,QAAO,SAAS,GAAG,IAAI,CAanC;IAED,IAAI,OAAO,IAAI,qBAAqB,CAEnC;IAED,IAAI,OAAO,CAAC,OAAO,EAAE,qBAAqB,EAEzC;IAoCD,cAAc,sBAOb;CACJ;AAED,eAAO,MAAM,qCAAqC,QAAO,MAA0C,CAAA;AAEnG,eAAO,MAAM,yCAAyC,QAAS,MAAM,KAAG,OAAmD,CAAA;AAE3H,eAAO,MAAM,2CAA2C,QAAO,OAAqF,CAAA;AAIpJ,eAAO,MAAM,mBAAmB,QAAO,gBAAyE,CAAA;AAEhH,eAAO,MAAM,sBAAsB;mBAEhB,GAAG,YAAY,qBAAqB;CAatD,CAAA"}